// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: c_compiler -c %s -I "common" -o %t3.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  S1409C5_nt  {
  int s1409c5f0[2];
  void  mf1409c5(); // _ZN10S1409C5_nt8mf1409c5Ev
};
//SIG(-1 S1409C5_nt) C1{ m Fi[2]}


void  S1409C5_nt ::mf1409c5(){}

//skip512 S1409C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C4_nt  {
  int s1409c4f0;
  __tsi64 s1409c4f1;
  void *s1409c4f2[4];
  int s1409c4f3[2];
  void *s1409c4f4;
  ::S1409C5_nt s1409c4f5;
  void *s1409c4f6[2];
  virtual  ~S1409C4_nt(); // _ZN10S1409C4_ntD1Ev
  virtual void  v4(); // _ZN10S1409C4_nt2v4Ev
  virtual void  v5(); // _ZN10S1409C4_nt2v5Ev
  virtual void  v6(); // _ZN10S1409C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1409C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1409C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1409C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1409C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1409C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1409C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1409C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1409C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1409C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1409C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1409C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1409C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1409C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1409C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1409C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1409C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1409C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1409C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1409C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1409C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1409C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1409C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1409C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1409C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1409C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1409C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1409C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1409C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1409C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1409C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1409C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1409C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1409C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1409C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1409C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1409C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1409C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1409C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1409C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1409C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1409C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1409C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1409C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1409C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1409C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1409C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1409C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1409C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1409C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1409C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1409C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1409C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1409C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1409C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1409C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1409C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1409C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1409C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1409C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1409C4_nt3v66Ev
  virtual void  v67(); // _ZN10S1409C4_nt3v67Ev
  S1409C4_nt(); // tgen
};
//SIG(-1 S1409C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1409C4_nt ::~S1409C4_nt(){ note_dtor("S1409C4_nt", this);}
void  S1409C4_nt ::v4(){vfunc_called(this, "_ZN10S1409C4_nt2v4Ev");}
void  S1409C4_nt ::v5(){vfunc_called(this, "_ZN10S1409C4_nt2v5Ev");}
void  S1409C4_nt ::v6(){vfunc_called(this, "_ZN10S1409C4_nt2v6Ev");}
void  S1409C4_nt ::v7(){vfunc_called(this, "_ZN10S1409C4_nt2v7Ev");}
void  S1409C4_nt ::v8(){vfunc_called(this, "_ZN10S1409C4_nt2v8Ev");}
void  S1409C4_nt ::v9(){vfunc_called(this, "_ZN10S1409C4_nt2v9Ev");}
void  S1409C4_nt ::v10(){vfunc_called(this, "_ZN10S1409C4_nt3v10Ev");}
void  S1409C4_nt ::v11(){vfunc_called(this, "_ZN10S1409C4_nt3v11Ev");}
void  S1409C4_nt ::v12(){vfunc_called(this, "_ZN10S1409C4_nt3v12Ev");}
void  S1409C4_nt ::v13(){vfunc_called(this, "_ZN10S1409C4_nt3v13Ev");}
void  S1409C4_nt ::v14(){vfunc_called(this, "_ZN10S1409C4_nt3v14Ev");}
void  S1409C4_nt ::v15(){vfunc_called(this, "_ZN10S1409C4_nt3v15Ev");}
void  S1409C4_nt ::v16(){vfunc_called(this, "_ZN10S1409C4_nt3v16Ev");}
void  S1409C4_nt ::v17(){vfunc_called(this, "_ZN10S1409C4_nt3v17Ev");}
void  S1409C4_nt ::v18(){vfunc_called(this, "_ZN10S1409C4_nt3v18Ev");}
void  S1409C4_nt ::v19(){vfunc_called(this, "_ZN10S1409C4_nt3v19Ev");}
void  S1409C4_nt ::v20(){vfunc_called(this, "_ZN10S1409C4_nt3v20Ev");}
void  S1409C4_nt ::v21(){vfunc_called(this, "_ZN10S1409C4_nt3v21Ev");}
void  S1409C4_nt ::v22(){vfunc_called(this, "_ZN10S1409C4_nt3v22Ev");}
void  S1409C4_nt ::v23(){vfunc_called(this, "_ZN10S1409C4_nt3v23Ev");}
void  S1409C4_nt ::v24(){vfunc_called(this, "_ZN10S1409C4_nt3v24Ev");}
void  S1409C4_nt ::v25(){vfunc_called(this, "_ZN10S1409C4_nt3v25Ev");}
void  S1409C4_nt ::v26(){vfunc_called(this, "_ZN10S1409C4_nt3v26Ev");}
void  S1409C4_nt ::v27(){vfunc_called(this, "_ZN10S1409C4_nt3v27Ev");}
void  S1409C4_nt ::v28(){vfunc_called(this, "_ZN10S1409C4_nt3v28Ev");}
void  S1409C4_nt ::v29(){vfunc_called(this, "_ZN10S1409C4_nt3v29Ev");}
void  S1409C4_nt ::v30(){vfunc_called(this, "_ZN10S1409C4_nt3v30Ev");}
void  S1409C4_nt ::v31(){vfunc_called(this, "_ZN10S1409C4_nt3v31Ev");}
void  S1409C4_nt ::v32(){vfunc_called(this, "_ZN10S1409C4_nt3v32Ev");}
void  S1409C4_nt ::v33(){vfunc_called(this, "_ZN10S1409C4_nt3v33Ev");}
void  S1409C4_nt ::v34(){vfunc_called(this, "_ZN10S1409C4_nt3v34Ev");}
void  S1409C4_nt ::v35(){vfunc_called(this, "_ZN10S1409C4_nt3v35Ev");}
void  S1409C4_nt ::v36(){vfunc_called(this, "_ZN10S1409C4_nt3v36Ev");}
void  S1409C4_nt ::v37(){vfunc_called(this, "_ZN10S1409C4_nt3v37Ev");}
void  S1409C4_nt ::v38(){vfunc_called(this, "_ZN10S1409C4_nt3v38Ev");}
void  S1409C4_nt ::v39(){vfunc_called(this, "_ZN10S1409C4_nt3v39Ev");}
void  S1409C4_nt ::v40(){vfunc_called(this, "_ZN10S1409C4_nt3v40Ev");}
void  S1409C4_nt ::v41(){vfunc_called(this, "_ZN10S1409C4_nt3v41Ev");}
void  S1409C4_nt ::v42(){vfunc_called(this, "_ZN10S1409C4_nt3v42Ev");}
void  S1409C4_nt ::v43(){vfunc_called(this, "_ZN10S1409C4_nt3v43Ev");}
void  S1409C4_nt ::v44(){vfunc_called(this, "_ZN10S1409C4_nt3v44Ev");}
void  S1409C4_nt ::v45(){vfunc_called(this, "_ZN10S1409C4_nt3v45Ev");}
void  S1409C4_nt ::v46(){vfunc_called(this, "_ZN10S1409C4_nt3v46Ev");}
void  S1409C4_nt ::v47(){vfunc_called(this, "_ZN10S1409C4_nt3v47Ev");}
void  S1409C4_nt ::v48(){vfunc_called(this, "_ZN10S1409C4_nt3v48Ev");}
void  S1409C4_nt ::v49(){vfunc_called(this, "_ZN10S1409C4_nt3v49Ev");}
void  S1409C4_nt ::v50(){vfunc_called(this, "_ZN10S1409C4_nt3v50Ev");}
void  S1409C4_nt ::v51(){vfunc_called(this, "_ZN10S1409C4_nt3v51Ev");}
void  S1409C4_nt ::v52(){vfunc_called(this, "_ZN10S1409C4_nt3v52Ev");}
void  S1409C4_nt ::v53(){vfunc_called(this, "_ZN10S1409C4_nt3v53Ev");}
void  S1409C4_nt ::v54(){vfunc_called(this, "_ZN10S1409C4_nt3v54Ev");}
void  S1409C4_nt ::v55(){vfunc_called(this, "_ZN10S1409C4_nt3v55Ev");}
void  S1409C4_nt ::v56(){vfunc_called(this, "_ZN10S1409C4_nt3v56Ev");}
void  S1409C4_nt ::v57(){vfunc_called(this, "_ZN10S1409C4_nt3v57Ev");}
void  S1409C4_nt ::v58(){vfunc_called(this, "_ZN10S1409C4_nt3v58Ev");}
void  S1409C4_nt ::v59(){vfunc_called(this, "_ZN10S1409C4_nt3v59Ev");}
void  S1409C4_nt ::v60(){vfunc_called(this, "_ZN10S1409C4_nt3v60Ev");}
void  S1409C4_nt ::v61(){vfunc_called(this, "_ZN10S1409C4_nt3v61Ev");}
void  S1409C4_nt ::v62(){vfunc_called(this, "_ZN10S1409C4_nt3v62Ev");}
void  S1409C4_nt ::v63(){vfunc_called(this, "_ZN10S1409C4_nt3v63Ev");}
void  S1409C4_nt ::v64(){vfunc_called(this, "_ZN10S1409C4_nt3v64Ev");}
void  S1409C4_nt ::v65(){vfunc_called(this, "_ZN10S1409C4_nt3v65Ev");}
void  S1409C4_nt ::v66(){vfunc_called(this, "_ZN10S1409C4_nt3v66Ev");}
void  S1409C4_nt ::v67(){vfunc_called(this, "_ZN10S1409C4_nt3v67Ev");}
S1409C4_nt ::S1409C4_nt(){ note_ctor("S1409C4_nt", this);} // tgen

//skip512 S1409C4_nt

#else // __cplusplus

extern void _ZN10S1409C4_ntC1Ev();
extern void _ZN10S1409C4_ntD1Ev();
Name_Map name_map_S1409C4_nt[] = {
  NSPAIR(_ZN10S1409C4_ntC1Ev),
  NSPAIR(_ZN10S1409C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1409C4_nt[];
extern void _ZN10S1409C4_ntD1Ev();
extern void _ZN10S1409C4_ntD0Ev();
extern void _ZN10S1409C4_nt2v4Ev();
extern void _ZN10S1409C4_nt2v5Ev();
extern void _ZN10S1409C4_nt2v6Ev();
extern void _ZN10S1409C4_nt2v7Ev();
extern void _ZN10S1409C4_nt2v8Ev();
extern void _ZN10S1409C4_nt2v9Ev();
extern void _ZN10S1409C4_nt3v10Ev();
extern void _ZN10S1409C4_nt3v11Ev();
extern void _ZN10S1409C4_nt3v12Ev();
extern void _ZN10S1409C4_nt3v13Ev();
extern void _ZN10S1409C4_nt3v14Ev();
extern void _ZN10S1409C4_nt3v15Ev();
extern void _ZN10S1409C4_nt3v16Ev();
extern void _ZN10S1409C4_nt3v17Ev();
extern void _ZN10S1409C4_nt3v18Ev();
extern void _ZN10S1409C4_nt3v19Ev();
extern void _ZN10S1409C4_nt3v20Ev();
extern void _ZN10S1409C4_nt3v21Ev();
extern void _ZN10S1409C4_nt3v22Ev();
extern void _ZN10S1409C4_nt3v23Ev();
extern void _ZN10S1409C4_nt3v24Ev();
extern void _ZN10S1409C4_nt3v25Ev();
extern void _ZN10S1409C4_nt3v26Ev();
extern void _ZN10S1409C4_nt3v27Ev();
extern void _ZN10S1409C4_nt3v28Ev();
extern void _ZN10S1409C4_nt3v29Ev();
extern void _ZN10S1409C4_nt3v30Ev();
extern void _ZN10S1409C4_nt3v31Ev();
extern void _ZN10S1409C4_nt3v32Ev();
extern void _ZN10S1409C4_nt3v33Ev();
extern void _ZN10S1409C4_nt3v34Ev();
extern void _ZN10S1409C4_nt3v35Ev();
extern void _ZN10S1409C4_nt3v36Ev();
extern void _ZN10S1409C4_nt3v37Ev();
extern void _ZN10S1409C4_nt3v38Ev();
extern void _ZN10S1409C4_nt3v39Ev();
extern void _ZN10S1409C4_nt3v40Ev();
extern void _ZN10S1409C4_nt3v41Ev();
extern void _ZN10S1409C4_nt3v42Ev();
extern void _ZN10S1409C4_nt3v43Ev();
extern void _ZN10S1409C4_nt3v44Ev();
extern void _ZN10S1409C4_nt3v45Ev();
extern void _ZN10S1409C4_nt3v46Ev();
extern void _ZN10S1409C4_nt3v47Ev();
extern void _ZN10S1409C4_nt3v48Ev();
extern void _ZN10S1409C4_nt3v49Ev();
extern void _ZN10S1409C4_nt3v50Ev();
extern void _ZN10S1409C4_nt3v51Ev();
extern void _ZN10S1409C4_nt3v52Ev();
extern void _ZN10S1409C4_nt3v53Ev();
extern void _ZN10S1409C4_nt3v54Ev();
extern void _ZN10S1409C4_nt3v55Ev();
extern void _ZN10S1409C4_nt3v56Ev();
extern void _ZN10S1409C4_nt3v57Ev();
extern void _ZN10S1409C4_nt3v58Ev();
extern void _ZN10S1409C4_nt3v59Ev();
extern void _ZN10S1409C4_nt3v60Ev();
extern void _ZN10S1409C4_nt3v61Ev();
extern void _ZN10S1409C4_nt3v62Ev();
extern void _ZN10S1409C4_nt3v63Ev();
extern void _ZN10S1409C4_nt3v64Ev();
extern void _ZN10S1409C4_nt3v65Ev();
extern void _ZN10S1409C4_nt3v66Ev();
extern void _ZN10S1409C4_nt3v67Ev();
static  VTBL_ENTRY vtc_S1409C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1409C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1409C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v67Ev,
};
extern VTBL_ENTRY _ZTI10S1409C4_nt[];
VTBL_ENTRY *P__ZTI10S1409C4_nt = _ZTI10S1409C4_nt; 
extern  VTBL_ENTRY _ZTV10S1409C4_nt[];
Class_Descriptor cd_S1409C4_nt = {  "S1409C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1409C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1409C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1409C4_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C8_nt  {
  void *s1409c8f0;
  int s1409c8f1[2];
  void  mf1409c8(); // _ZN10S1409C8_nt8mf1409c8Ev
};
//SIG(-1 S1409C8_nt) C1{ m Fp Fi[2]}


void  S1409C8_nt ::mf1409c8(){}

//skip512 S1409C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S1409C8_nt[];
VTBL_ENTRY *P__ZTI10S1409C8_nt = _ZTI10S1409C8_nt; 
Class_Descriptor cd_S1409C8_nt = {  "S1409C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S1409C8_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C7_nt  : S1409C8_nt {
};
//SIG(-1 S1409C7_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S1409C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S1409C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C7_nt = {  "S1409C7_nt", // class name
  bases_S1409C7_nt, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C6_nt  : S1409C7_nt {
};
//SIG(-1 S1409C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1409C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S1409C7_nt;
static Base_Class bases_S1409C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C9_nt  {
  int s1409c9f0;
  void  mf1409c9(); // _ZN10S1409C9_nt8mf1409c9Ev
};
//SIG(-1 S1409C9_nt) C1{ m Fi}


void  S1409C9_nt ::mf1409c9(){}

//skip512 S1409C9_nt

#else // __cplusplus

Class_Descriptor cd_S1409C9_nt = {  "S1409C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C13  : S1409C8_nt {
};
//SIG(-1 S1409C13) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1409C13()
{
  extern Class_Descriptor cd_S1409C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C13, buf);
    S1409C13 &lv = *(new (buf) S1409C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C13)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S1409C13");
    test_class_info(&lv, &cd_S1409C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C13(Test_S1409C13, "S1409C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S1409C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C13 = {  "S1409C13", // class name
  bases_S1409C13, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C12  : S1409C13 {
};
//SIG(-1 S1409C12) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1409C12()
{
  extern Class_Descriptor cd_S1409C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C12, buf);
    S1409C12 &lv = *(new (buf) S1409C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C12)");
    check_base_class_offset(lv, (S1409C8_nt*)(S1409C13*), 0, "S1409C12");
    check_base_class_offset(lv, (S1409C13*), 0, "S1409C12");
    test_class_info(&lv, &cd_S1409C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C12(Test_S1409C12, "S1409C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S1409C13;
static Base_Class bases_S1409C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C12 = {  "S1409C12", // class name
  bases_S1409C12, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C14_nt  {
  int s1409c14f0[3];
  void  mf1409c14(); // _ZN11S1409C14_nt9mf1409c14Ev
};
//SIG(-1 S1409C14_nt) C1{ m Fi[3]}


void  S1409C14_nt ::mf1409c14(){}

//skip512 S1409C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C19  : S1409C8_nt {
};
//SIG(-1 S1409C19) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1409C19()
{
  extern Class_Descriptor cd_S1409C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C19, buf);
    S1409C19 &lv = *(new (buf) S1409C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C19)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S1409C19");
    test_class_info(&lv, &cd_S1409C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C19(Test_S1409C19, "S1409C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S1409C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C19 = {  "S1409C19", // class name
  bases_S1409C19, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C18  : S1409C19 {
};
//SIG(-1 S1409C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1409C18()
{
  extern Class_Descriptor cd_S1409C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C18, buf);
    S1409C18 &lv = *(new (buf) S1409C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C18)");
    check_base_class_offset(lv, (S1409C8_nt*)(S1409C19*), 0, "S1409C18");
    check_base_class_offset(lv, (S1409C19*), 0, "S1409C18");
    test_class_info(&lv, &cd_S1409C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C18(Test_S1409C18, "S1409C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S1409C19;
static Base_Class bases_S1409C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C18 = {  "S1409C18", // class name
  bases_S1409C18, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C3_nt  : S1409C4_nt {
  ::S1409C6_nt s1409c3f0;
  ::S1409C6_nt s1409c3f1;
  ::S1409C9_nt s1409c3f2;
  int s1409c3f3;
  char s1409c3f4[4];
  void *s1409c3f5[2];
  ::S1409C6_nt s1409c3f6;
  unsigned int s1409c3f7:1;
  unsigned int s1409c3f8:1;
  unsigned int s1409c3f9:1;
  unsigned int s1409c3f10:1;
  unsigned int s1409c3f11:1;
  unsigned int s1409c3f12:1;
  unsigned int s1409c3f13:1;
  unsigned int s1409c3f14:1;
  unsigned int s1409c3f15:1;
  unsigned int s1409c3f16:1;
  unsigned int s1409c3f17:1;
  unsigned int s1409c3f18:1;
  unsigned int s1409c3f19:1;
  unsigned int s1409c3f20:1;
  unsigned int s1409c3f21:1;
  unsigned int s1409c3f22:1;
  unsigned int s1409c3f23:1;
  unsigned int s1409c3f24:1;
  unsigned int s1409c3f25:1;
  unsigned int s1409c3f26:1;
  unsigned int s1409c3f27:1;
  unsigned int s1409c3f28:1;
  unsigned int s1409c3f29:1;
  unsigned int s1409c3f30:1;
  unsigned int s1409c3f31:1;
  unsigned int s1409c3f32:1;
  unsigned int s1409c3f33:1;
  unsigned int s1409c3f34:1;
  unsigned int s1409c3f35:1;
  unsigned int s1409c3f36:1;
  unsigned int s1409c3f37:1;
  unsigned int s1409c3f38:1;
  unsigned int s1409c3f39:1;
  unsigned int s1409c3f40:1;
  unsigned int s1409c3f41:1;
  unsigned int s1409c3f42:1;
  unsigned int s1409c3f43:1;
  unsigned int s1409c3f44:1;
  unsigned int s1409c3f45:1;
  unsigned int s1409c3f46:1;
  unsigned int s1409c3f47:1;
  unsigned int s1409c3f48:1;
  unsigned int s1409c3f49:1;
  unsigned int s1409c3f50:1;
  unsigned int s1409c3f51:1;
  unsigned int s1409c3f52:1;
  unsigned int s1409c3f53:1;
  unsigned int s1409c3f54:1;
  unsigned int s1409c3f55:1;
  unsigned int s1409c3f56:1;
  unsigned int s1409c3f57:1;
  unsigned int s1409c3f58:1;
  unsigned int s1409c3f59:1;
  unsigned int s1409c3f60:1;
  unsigned int s1409c3f61:1;
  unsigned int s1409c3f62:1;
  unsigned int s1409c3f63:1;
  unsigned int s1409c3f64:1;
  unsigned int s1409c3f65:1;
  unsigned int s1409c3f66:1;
  unsigned int s1409c3f67:1;
  unsigned int s1409c3f68:1;
  unsigned int s1409c3f69:1;
  unsigned int s1409c3f70:1;
  unsigned int s1409c3f71:1;
  unsigned int s1409c3f72:1;
  unsigned int s1409c3f73:1;
  unsigned int s1409c3f74:1;
  unsigned int s1409c3f75:1;
  unsigned int s1409c3f76:1;
  unsigned int s1409c3f77:1;
  unsigned int s1409c3f78:1;
  unsigned int s1409c3f79:1;
  unsigned int s1409c3f80:1;
  unsigned int s1409c3f81:1;
  unsigned int s1409c3f82:1;
  unsigned int s1409c3f83:1;
  int s1409c3f84[5];
  void *s1409c3f85[2];
  int s1409c3f86[3];
  ::S1409C5_nt s1409c3f87;
  ::S1409C5_nt s1409c3f88;
  ::S1409C5_nt s1409c3f89;
  ::S1409C12 s1409c3f90;
  ::S1409C12 s1409c3f91;
  int s1409c3f92;
  void *s1409c3f93[2];
  ::S1409C14_nt s1409c3f94;
  ::S1409C14_nt s1409c3f95;
  ::S1409C14_nt s1409c3f96;
  ::S1409C14_nt s1409c3f97;
  void *s1409c3f98;
  ::S1409C5_nt s1409c3f99;
  ::S1409C12 s1409c3f100;
  ::S1409C14_nt s1409c3f101;
  ::S1409C14_nt s1409c3f102;
  int s1409c3f103;
  ::S1409C14_nt s1409c3f104;
  ::S1409C14_nt s1409c3f105;
  void *s1409c3f106;
  int s1409c3f107;
  char s1409c3f108;
  ::S1409C14_nt s1409c3f109;
  ::S1409C14_nt s1409c3f110;
  void *s1409c3f111;
  int s1409c3f112;
  void *s1409c3f113;
  ::S1409C12 s1409c3f114;
  ::S1409C18 s1409c3f115;
  ::S1409C18 s1409c3f116;
  virtual  ~S1409C3_nt(); // _ZN10S1409C3_ntD1Ev
  virtual void  v68(); // _ZN10S1409C3_nt3v68Ev
  virtual void  v69(); // _ZN10S1409C3_nt3v69Ev
  virtual void  v70(); // _ZN10S1409C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1409C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1409C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1409C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1409C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1409C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1409C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1409C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1409C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1409C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1409C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1409C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1409C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1409C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1409C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1409C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1409C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1409C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1409C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1409C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1409C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1409C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1409C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1409C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1409C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1409C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1409C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1409C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1409C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1409C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1409C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1409C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1409C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1409C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1409C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1409C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1409C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1409C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1409C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1409C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1409C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1409C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1409C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1409C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1409C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1409C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1409C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1409C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1409C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1409C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1409C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1409C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1409C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1409C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1409C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1409C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1409C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1409C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1409C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1409C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1409C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1409C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1409C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1409C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1409C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1409C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1409C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1409C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1409C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1409C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1409C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1409C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1409C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1409C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1409C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1409C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1409C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1409C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1409C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1409C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1409C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1409C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1409C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1409C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1409C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1409C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1409C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1409C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1409C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1409C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1409C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1409C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1409C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1409C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1409C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1409C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1409C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1409C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1409C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1409C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1409C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1409C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1409C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1409C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1409C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1409C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1409C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1409C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1409C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1409C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1409C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1409C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1409C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1409C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1409C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1409C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1409C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1409C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1409C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1409C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1409C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1409C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1409C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1409C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1409C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1409C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1409C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1409C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1409C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1409C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1409C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1409C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1409C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1409C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1409C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1409C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1409C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1409C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1409C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1409C3_nt4v209Ev
  virtual void  v210(); // _ZN10S1409C3_nt4v210Ev
  S1409C3_nt(); // tgen
};
//SIG(-1 S1409C3_nt) C1{ BC2{ vd v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S1409C3_nt ::~S1409C3_nt(){ note_dtor("S1409C3_nt", this);}
void  S1409C3_nt ::v68(){vfunc_called(this, "_ZN10S1409C3_nt3v68Ev");}
void  S1409C3_nt ::v69(){vfunc_called(this, "_ZN10S1409C3_nt3v69Ev");}
void  S1409C3_nt ::v70(){vfunc_called(this, "_ZN10S1409C3_nt3v70Ev");}
void  S1409C3_nt ::v71(){vfunc_called(this, "_ZN10S1409C3_nt3v71Ev");}
void  S1409C3_nt ::v72(){vfunc_called(this, "_ZN10S1409C3_nt3v72Ev");}
void  S1409C3_nt ::v73(){vfunc_called(this, "_ZN10S1409C3_nt3v73Ev");}
void  S1409C3_nt ::v74(){vfunc_called(this, "_ZN10S1409C3_nt3v74Ev");}
void  S1409C3_nt ::v75(){vfunc_called(this, "_ZN10S1409C3_nt3v75Ev");}
void  S1409C3_nt ::v76(){vfunc_called(this, "_ZN10S1409C3_nt3v76Ev");}
void  S1409C3_nt ::v77(){vfunc_called(this, "_ZN10S1409C3_nt3v77Ev");}
void  S1409C3_nt ::v78(){vfunc_called(this, "_ZN10S1409C3_nt3v78Ev");}
void  S1409C3_nt ::v79(){vfunc_called(this, "_ZN10S1409C3_nt3v79Ev");}
void  S1409C3_nt ::v80(){vfunc_called(this, "_ZN10S1409C3_nt3v80Ev");}
void  S1409C3_nt ::v81(){vfunc_called(this, "_ZN10S1409C3_nt3v81Ev");}
void  S1409C3_nt ::v82(){vfunc_called(this, "_ZN10S1409C3_nt3v82Ev");}
void  S1409C3_nt ::v83(){vfunc_called(this, "_ZN10S1409C3_nt3v83Ev");}
void  S1409C3_nt ::v84(){vfunc_called(this, "_ZN10S1409C3_nt3v84Ev");}
void  S1409C3_nt ::v85(){vfunc_called(this, "_ZN10S1409C3_nt3v85Ev");}
void  S1409C3_nt ::v86(){vfunc_called(this, "_ZN10S1409C3_nt3v86Ev");}
void  S1409C3_nt ::v87(){vfunc_called(this, "_ZN10S1409C3_nt3v87Ev");}
void  S1409C3_nt ::v88(){vfunc_called(this, "_ZN10S1409C3_nt3v88Ev");}
void  S1409C3_nt ::v89(){vfunc_called(this, "_ZN10S1409C3_nt3v89Ev");}
void  S1409C3_nt ::v90(){vfunc_called(this, "_ZN10S1409C3_nt3v90Ev");}
void  S1409C3_nt ::v91(){vfunc_called(this, "_ZN10S1409C3_nt3v91Ev");}
void  S1409C3_nt ::v92(){vfunc_called(this, "_ZN10S1409C3_nt3v92Ev");}
void  S1409C3_nt ::v93(){vfunc_called(this, "_ZN10S1409C3_nt3v93Ev");}
void  S1409C3_nt ::v94(){vfunc_called(this, "_ZN10S1409C3_nt3v94Ev");}
void  S1409C3_nt ::v95(){vfunc_called(this, "_ZN10S1409C3_nt3v95Ev");}
void  S1409C3_nt ::v96(){vfunc_called(this, "_ZN10S1409C3_nt3v96Ev");}
void  S1409C3_nt ::v97(){vfunc_called(this, "_ZN10S1409C3_nt3v97Ev");}
void  S1409C3_nt ::v98(){vfunc_called(this, "_ZN10S1409C3_nt3v98Ev");}
void  S1409C3_nt ::v99(){vfunc_called(this, "_ZN10S1409C3_nt3v99Ev");}
void  S1409C3_nt ::v100(){vfunc_called(this, "_ZN10S1409C3_nt4v100Ev");}
void  S1409C3_nt ::v101(){vfunc_called(this, "_ZN10S1409C3_nt4v101Ev");}
void  S1409C3_nt ::v102(){vfunc_called(this, "_ZN10S1409C3_nt4v102Ev");}
void  S1409C3_nt ::v103(){vfunc_called(this, "_ZN10S1409C3_nt4v103Ev");}
void  S1409C3_nt ::v104(){vfunc_called(this, "_ZN10S1409C3_nt4v104Ev");}
void  S1409C3_nt ::v105(){vfunc_called(this, "_ZN10S1409C3_nt4v105Ev");}
void  S1409C3_nt ::v106(){vfunc_called(this, "_ZN10S1409C3_nt4v106Ev");}
void  S1409C3_nt ::v107(){vfunc_called(this, "_ZN10S1409C3_nt4v107Ev");}
void  S1409C3_nt ::v108(){vfunc_called(this, "_ZN10S1409C3_nt4v108Ev");}
void  S1409C3_nt ::v109(){vfunc_called(this, "_ZN10S1409C3_nt4v109Ev");}
void  S1409C3_nt ::v110(){vfunc_called(this, "_ZN10S1409C3_nt4v110Ev");}
void  S1409C3_nt ::v111(){vfunc_called(this, "_ZN10S1409C3_nt4v111Ev");}
void  S1409C3_nt ::v112(){vfunc_called(this, "_ZN10S1409C3_nt4v112Ev");}
void  S1409C3_nt ::v113(){vfunc_called(this, "_ZN10S1409C3_nt4v113Ev");}
void  S1409C3_nt ::v114(){vfunc_called(this, "_ZN10S1409C3_nt4v114Ev");}
void  S1409C3_nt ::v115(){vfunc_called(this, "_ZN10S1409C3_nt4v115Ev");}
void  S1409C3_nt ::v116(){vfunc_called(this, "_ZN10S1409C3_nt4v116Ev");}
void  S1409C3_nt ::v117(){vfunc_called(this, "_ZN10S1409C3_nt4v117Ev");}
void  S1409C3_nt ::v118(){vfunc_called(this, "_ZN10S1409C3_nt4v118Ev");}
void  S1409C3_nt ::v119(){vfunc_called(this, "_ZN10S1409C3_nt4v119Ev");}
void  S1409C3_nt ::v120(){vfunc_called(this, "_ZN10S1409C3_nt4v120Ev");}
void  S1409C3_nt ::v121(){vfunc_called(this, "_ZN10S1409C3_nt4v121Ev");}
void  S1409C3_nt ::v122(){vfunc_called(this, "_ZN10S1409C3_nt4v122Ev");}
void  S1409C3_nt ::v123(){vfunc_called(this, "_ZN10S1409C3_nt4v123Ev");}
void  S1409C3_nt ::v124(){vfunc_called(this, "_ZN10S1409C3_nt4v124Ev");}
void  S1409C3_nt ::v125(){vfunc_called(this, "_ZN10S1409C3_nt4v125Ev");}
void  S1409C3_nt ::v126(){vfunc_called(this, "_ZN10S1409C3_nt4v126Ev");}
void  S1409C3_nt ::v127(){vfunc_called(this, "_ZN10S1409C3_nt4v127Ev");}
void  S1409C3_nt ::v128(){vfunc_called(this, "_ZN10S1409C3_nt4v128Ev");}
void  S1409C3_nt ::v129(){vfunc_called(this, "_ZN10S1409C3_nt4v129Ev");}
void  S1409C3_nt ::v130(){vfunc_called(this, "_ZN10S1409C3_nt4v130Ev");}
void  S1409C3_nt ::v131(){vfunc_called(this, "_ZN10S1409C3_nt4v131Ev");}
void  S1409C3_nt ::v132(){vfunc_called(this, "_ZN10S1409C3_nt4v132Ev");}
void  S1409C3_nt ::v133(){vfunc_called(this, "_ZN10S1409C3_nt4v133Ev");}
void  S1409C3_nt ::v134(){vfunc_called(this, "_ZN10S1409C3_nt4v134Ev");}
void  S1409C3_nt ::v135(){vfunc_called(this, "_ZN10S1409C3_nt4v135Ev");}
void  S1409C3_nt ::v136(){vfunc_called(this, "_ZN10S1409C3_nt4v136Ev");}
void  S1409C3_nt ::v137(){vfunc_called(this, "_ZN10S1409C3_nt4v137Ev");}
void  S1409C3_nt ::v138(){vfunc_called(this, "_ZN10S1409C3_nt4v138Ev");}
void  S1409C3_nt ::v139(){vfunc_called(this, "_ZN10S1409C3_nt4v139Ev");}
void  S1409C3_nt ::v140(){vfunc_called(this, "_ZN10S1409C3_nt4v140Ev");}
void  S1409C3_nt ::v141(){vfunc_called(this, "_ZN10S1409C3_nt4v141Ev");}
void  S1409C3_nt ::v142(){vfunc_called(this, "_ZN10S1409C3_nt4v142Ev");}
void  S1409C3_nt ::v143(){vfunc_called(this, "_ZN10S1409C3_nt4v143Ev");}
void  S1409C3_nt ::v144(){vfunc_called(this, "_ZN10S1409C3_nt4v144Ev");}
void  S1409C3_nt ::v145(){vfunc_called(this, "_ZN10S1409C3_nt4v145Ev");}
void  S1409C3_nt ::v146(){vfunc_called(this, "_ZN10S1409C3_nt4v146Ev");}
void  S1409C3_nt ::v147(){vfunc_called(this, "_ZN10S1409C3_nt4v147Ev");}
void  S1409C3_nt ::v148(){vfunc_called(this, "_ZN10S1409C3_nt4v148Ev");}
void  S1409C3_nt ::v149(){vfunc_called(this, "_ZN10S1409C3_nt4v149Ev");}
void  S1409C3_nt ::v150(){vfunc_called(this, "_ZN10S1409C3_nt4v150Ev");}
void  S1409C3_nt ::v151(){vfunc_called(this, "_ZN10S1409C3_nt4v151Ev");}
void  S1409C3_nt ::v152(){vfunc_called(this, "_ZN10S1409C3_nt4v152Ev");}
void  S1409C3_nt ::v153(){vfunc_called(this, "_ZN10S1409C3_nt4v153Ev");}
void  S1409C3_nt ::v154(){vfunc_called(this, "_ZN10S1409C3_nt4v154Ev");}
void  S1409C3_nt ::v155(){vfunc_called(this, "_ZN10S1409C3_nt4v155Ev");}
void  S1409C3_nt ::v156(){vfunc_called(this, "_ZN10S1409C3_nt4v156Ev");}
void  S1409C3_nt ::v157(){vfunc_called(this, "_ZN10S1409C3_nt4v157Ev");}
void  S1409C3_nt ::v158(){vfunc_called(this, "_ZN10S1409C3_nt4v158Ev");}
void  S1409C3_nt ::v159(){vfunc_called(this, "_ZN10S1409C3_nt4v159Ev");}
void  S1409C3_nt ::v160(){vfunc_called(this, "_ZN10S1409C3_nt4v160Ev");}
void  S1409C3_nt ::v161(){vfunc_called(this, "_ZN10S1409C3_nt4v161Ev");}
void  S1409C3_nt ::v162(){vfunc_called(this, "_ZN10S1409C3_nt4v162Ev");}
void  S1409C3_nt ::v163(){vfunc_called(this, "_ZN10S1409C3_nt4v163Ev");}
void  S1409C3_nt ::v164(){vfunc_called(this, "_ZN10S1409C3_nt4v164Ev");}
void  S1409C3_nt ::v165(){vfunc_called(this, "_ZN10S1409C3_nt4v165Ev");}
void  S1409C3_nt ::v166(){vfunc_called(this, "_ZN10S1409C3_nt4v166Ev");}
void  S1409C3_nt ::v167(){vfunc_called(this, "_ZN10S1409C3_nt4v167Ev");}
void  S1409C3_nt ::v168(){vfunc_called(this, "_ZN10S1409C3_nt4v168Ev");}
void  S1409C3_nt ::v169(){vfunc_called(this, "_ZN10S1409C3_nt4v169Ev");}
void  S1409C3_nt ::v170(){vfunc_called(this, "_ZN10S1409C3_nt4v170Ev");}
void  S1409C3_nt ::v171(){vfunc_called(this, "_ZN10S1409C3_nt4v171Ev");}
void  S1409C3_nt ::v172(){vfunc_called(this, "_ZN10S1409C3_nt4v172Ev");}
void  S1409C3_nt ::v173(){vfunc_called(this, "_ZN10S1409C3_nt4v173Ev");}
void  S1409C3_nt ::v174(){vfunc_called(this, "_ZN10S1409C3_nt4v174Ev");}
void  S1409C3_nt ::v175(){vfunc_called(this, "_ZN10S1409C3_nt4v175Ev");}
void  S1409C3_nt ::v176(){vfunc_called(this, "_ZN10S1409C3_nt4v176Ev");}
void  S1409C3_nt ::v177(){vfunc_called(this, "_ZN10S1409C3_nt4v177Ev");}
void  S1409C3_nt ::v178(){vfunc_called(this, "_ZN10S1409C3_nt4v178Ev");}
void  S1409C3_nt ::v179(){vfunc_called(this, "_ZN10S1409C3_nt4v179Ev");}
void  S1409C3_nt ::v180(){vfunc_called(this, "_ZN10S1409C3_nt4v180Ev");}
void  S1409C3_nt ::v181(){vfunc_called(this, "_ZN10S1409C3_nt4v181Ev");}
void  S1409C3_nt ::v182(){vfunc_called(this, "_ZN10S1409C3_nt4v182Ev");}
void  S1409C3_nt ::v183(){vfunc_called(this, "_ZN10S1409C3_nt4v183Ev");}
void  S1409C3_nt ::v184(){vfunc_called(this, "_ZN10S1409C3_nt4v184Ev");}
void  S1409C3_nt ::v185(){vfunc_called(this, "_ZN10S1409C3_nt4v185Ev");}
void  S1409C3_nt ::v186(){vfunc_called(this, "_ZN10S1409C3_nt4v186Ev");}
void  S1409C3_nt ::v187(){vfunc_called(this, "_ZN10S1409C3_nt4v187Ev");}
void  S1409C3_nt ::v188(){vfunc_called(this, "_ZN10S1409C3_nt4v188Ev");}
void  S1409C3_nt ::v189(){vfunc_called(this, "_ZN10S1409C3_nt4v189Ev");}
void  S1409C3_nt ::v190(){vfunc_called(this, "_ZN10S1409C3_nt4v190Ev");}
void  S1409C3_nt ::v191(){vfunc_called(this, "_ZN10S1409C3_nt4v191Ev");}
void  S1409C3_nt ::v192(){vfunc_called(this, "_ZN10S1409C3_nt4v192Ev");}
void  S1409C3_nt ::v193(){vfunc_called(this, "_ZN10S1409C3_nt4v193Ev");}
void  S1409C3_nt ::v194(){vfunc_called(this, "_ZN10S1409C3_nt4v194Ev");}
void  S1409C3_nt ::v195(){vfunc_called(this, "_ZN10S1409C3_nt4v195Ev");}
void  S1409C3_nt ::v196(){vfunc_called(this, "_ZN10S1409C3_nt4v196Ev");}
void  S1409C3_nt ::v197(){vfunc_called(this, "_ZN10S1409C3_nt4v197Ev");}
void  S1409C3_nt ::v198(){vfunc_called(this, "_ZN10S1409C3_nt4v198Ev");}
void  S1409C3_nt ::v199(){vfunc_called(this, "_ZN10S1409C3_nt4v199Ev");}
void  S1409C3_nt ::v200(){vfunc_called(this, "_ZN10S1409C3_nt4v200Ev");}
void  S1409C3_nt ::v201(){vfunc_called(this, "_ZN10S1409C3_nt4v201Ev");}
void  S1409C3_nt ::v202(){vfunc_called(this, "_ZN10S1409C3_nt4v202Ev");}
void  S1409C3_nt ::v203(){vfunc_called(this, "_ZN10S1409C3_nt4v203Ev");}
void  S1409C3_nt ::v204(){vfunc_called(this, "_ZN10S1409C3_nt4v204Ev");}
void  S1409C3_nt ::v205(){vfunc_called(this, "_ZN10S1409C3_nt4v205Ev");}
void  S1409C3_nt ::v206(){vfunc_called(this, "_ZN10S1409C3_nt4v206Ev");}
void  S1409C3_nt ::v207(){vfunc_called(this, "_ZN10S1409C3_nt4v207Ev");}
void  S1409C3_nt ::v208(){vfunc_called(this, "_ZN10S1409C3_nt4v208Ev");}
void  S1409C3_nt ::v209(){vfunc_called(this, "_ZN10S1409C3_nt4v209Ev");}
void  S1409C3_nt ::v210(){vfunc_called(this, "_ZN10S1409C3_nt4v210Ev");}
S1409C3_nt ::S1409C3_nt(){ note_ctor("S1409C3_nt", this);} // tgen

//skip512 S1409C3_nt

#else // __cplusplus

extern void _ZN10S1409C3_ntC1Ev();
extern void _ZN10S1409C3_ntD1Ev();
Name_Map name_map_S1409C3_nt[] = {
  NSPAIR(_ZN10S1409C3_ntC1Ev),
  NSPAIR(_ZN10S1409C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1409C4_nt;
extern VTBL_ENTRY _ZTI10S1409C4_nt[];
extern  VTBL_ENTRY _ZTV10S1409C4_nt[];
static Base_Class bases_S1409C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1409C3_nt[];
extern void _ZN10S1409C3_ntD1Ev();
extern void _ZN10S1409C3_ntD0Ev();
extern void _ZN10S1409C4_nt2v4Ev();
extern void _ZN10S1409C4_nt2v5Ev();
extern void _ZN10S1409C4_nt2v6Ev();
extern void _ZN10S1409C4_nt2v7Ev();
extern void _ZN10S1409C4_nt2v8Ev();
extern void _ZN10S1409C4_nt2v9Ev();
extern void _ZN10S1409C4_nt3v10Ev();
extern void _ZN10S1409C4_nt3v11Ev();
extern void _ZN10S1409C4_nt3v12Ev();
extern void _ZN10S1409C4_nt3v13Ev();
extern void _ZN10S1409C4_nt3v14Ev();
extern void _ZN10S1409C4_nt3v15Ev();
extern void _ZN10S1409C4_nt3v16Ev();
extern void _ZN10S1409C4_nt3v17Ev();
extern void _ZN10S1409C4_nt3v18Ev();
extern void _ZN10S1409C4_nt3v19Ev();
extern void _ZN10S1409C4_nt3v20Ev();
extern void _ZN10S1409C4_nt3v21Ev();
extern void _ZN10S1409C4_nt3v22Ev();
extern void _ZN10S1409C4_nt3v23Ev();
extern void _ZN10S1409C4_nt3v24Ev();
extern void _ZN10S1409C4_nt3v25Ev();
extern void _ZN10S1409C4_nt3v26Ev();
extern void _ZN10S1409C4_nt3v27Ev();
extern void _ZN10S1409C4_nt3v28Ev();
extern void _ZN10S1409C4_nt3v29Ev();
extern void _ZN10S1409C4_nt3v30Ev();
extern void _ZN10S1409C4_nt3v31Ev();
extern void _ZN10S1409C4_nt3v32Ev();
extern void _ZN10S1409C4_nt3v33Ev();
extern void _ZN10S1409C4_nt3v34Ev();
extern void _ZN10S1409C4_nt3v35Ev();
extern void _ZN10S1409C4_nt3v36Ev();
extern void _ZN10S1409C4_nt3v37Ev();
extern void _ZN10S1409C4_nt3v38Ev();
extern void _ZN10S1409C4_nt3v39Ev();
extern void _ZN10S1409C4_nt3v40Ev();
extern void _ZN10S1409C4_nt3v41Ev();
extern void _ZN10S1409C4_nt3v42Ev();
extern void _ZN10S1409C4_nt3v43Ev();
extern void _ZN10S1409C4_nt3v44Ev();
extern void _ZN10S1409C4_nt3v45Ev();
extern void _ZN10S1409C4_nt3v46Ev();
extern void _ZN10S1409C4_nt3v47Ev();
extern void _ZN10S1409C4_nt3v48Ev();
extern void _ZN10S1409C4_nt3v49Ev();
extern void _ZN10S1409C4_nt3v50Ev();
extern void _ZN10S1409C4_nt3v51Ev();
extern void _ZN10S1409C4_nt3v52Ev();
extern void _ZN10S1409C4_nt3v53Ev();
extern void _ZN10S1409C4_nt3v54Ev();
extern void _ZN10S1409C4_nt3v55Ev();
extern void _ZN10S1409C4_nt3v56Ev();
extern void _ZN10S1409C4_nt3v57Ev();
extern void _ZN10S1409C4_nt3v58Ev();
extern void _ZN10S1409C4_nt3v59Ev();
extern void _ZN10S1409C4_nt3v60Ev();
extern void _ZN10S1409C4_nt3v61Ev();
extern void _ZN10S1409C4_nt3v62Ev();
extern void _ZN10S1409C4_nt3v63Ev();
extern void _ZN10S1409C4_nt3v64Ev();
extern void _ZN10S1409C4_nt3v65Ev();
extern void _ZN10S1409C4_nt3v66Ev();
extern void _ZN10S1409C4_nt3v67Ev();
extern void _ZN10S1409C3_nt3v68Ev();
extern void _ZN10S1409C3_nt3v69Ev();
extern void _ZN10S1409C3_nt3v70Ev();
extern void _ZN10S1409C3_nt3v71Ev();
extern void _ZN10S1409C3_nt3v72Ev();
extern void _ZN10S1409C3_nt3v73Ev();
extern void _ZN10S1409C3_nt3v74Ev();
extern void _ZN10S1409C3_nt3v75Ev();
extern void _ZN10S1409C3_nt3v76Ev();
extern void _ZN10S1409C3_nt3v77Ev();
extern void _ZN10S1409C3_nt3v78Ev();
extern void _ZN10S1409C3_nt3v79Ev();
extern void _ZN10S1409C3_nt3v80Ev();
extern void _ZN10S1409C3_nt3v81Ev();
extern void _ZN10S1409C3_nt3v82Ev();
extern void _ZN10S1409C3_nt3v83Ev();
extern void _ZN10S1409C3_nt3v84Ev();
extern void _ZN10S1409C3_nt3v85Ev();
extern void _ZN10S1409C3_nt3v86Ev();
extern void _ZN10S1409C3_nt3v87Ev();
extern void _ZN10S1409C3_nt3v88Ev();
extern void _ZN10S1409C3_nt3v89Ev();
extern void _ZN10S1409C3_nt3v90Ev();
extern void _ZN10S1409C3_nt3v91Ev();
extern void _ZN10S1409C3_nt3v92Ev();
extern void _ZN10S1409C3_nt3v93Ev();
extern void _ZN10S1409C3_nt3v94Ev();
extern void _ZN10S1409C3_nt3v95Ev();
extern void _ZN10S1409C3_nt3v96Ev();
extern void _ZN10S1409C3_nt3v97Ev();
extern void _ZN10S1409C3_nt3v98Ev();
extern void _ZN10S1409C3_nt3v99Ev();
extern void _ZN10S1409C3_nt4v100Ev();
extern void _ZN10S1409C3_nt4v101Ev();
extern void _ZN10S1409C3_nt4v102Ev();
extern void _ZN10S1409C3_nt4v103Ev();
extern void _ZN10S1409C3_nt4v104Ev();
extern void _ZN10S1409C3_nt4v105Ev();
extern void _ZN10S1409C3_nt4v106Ev();
extern void _ZN10S1409C3_nt4v107Ev();
extern void _ZN10S1409C3_nt4v108Ev();
extern void _ZN10S1409C3_nt4v109Ev();
extern void _ZN10S1409C3_nt4v110Ev();
extern void _ZN10S1409C3_nt4v111Ev();
extern void _ZN10S1409C3_nt4v112Ev();
extern void _ZN10S1409C3_nt4v113Ev();
extern void _ZN10S1409C3_nt4v114Ev();
extern void _ZN10S1409C3_nt4v115Ev();
extern void _ZN10S1409C3_nt4v116Ev();
extern void _ZN10S1409C3_nt4v117Ev();
extern void _ZN10S1409C3_nt4v118Ev();
extern void _ZN10S1409C3_nt4v119Ev();
extern void _ZN10S1409C3_nt4v120Ev();
extern void _ZN10S1409C3_nt4v121Ev();
extern void _ZN10S1409C3_nt4v122Ev();
extern void _ZN10S1409C3_nt4v123Ev();
extern void _ZN10S1409C3_nt4v124Ev();
extern void _ZN10S1409C3_nt4v125Ev();
extern void _ZN10S1409C3_nt4v126Ev();
extern void _ZN10S1409C3_nt4v127Ev();
extern void _ZN10S1409C3_nt4v128Ev();
extern void _ZN10S1409C3_nt4v129Ev();
extern void _ZN10S1409C3_nt4v130Ev();
extern void _ZN10S1409C3_nt4v131Ev();
extern void _ZN10S1409C3_nt4v132Ev();
extern void _ZN10S1409C3_nt4v133Ev();
extern void _ZN10S1409C3_nt4v134Ev();
extern void _ZN10S1409C3_nt4v135Ev();
extern void _ZN10S1409C3_nt4v136Ev();
extern void _ZN10S1409C3_nt4v137Ev();
extern void _ZN10S1409C3_nt4v138Ev();
extern void _ZN10S1409C3_nt4v139Ev();
extern void _ZN10S1409C3_nt4v140Ev();
extern void _ZN10S1409C3_nt4v141Ev();
extern void _ZN10S1409C3_nt4v142Ev();
extern void _ZN10S1409C3_nt4v143Ev();
extern void _ZN10S1409C3_nt4v144Ev();
extern void _ZN10S1409C3_nt4v145Ev();
extern void _ZN10S1409C3_nt4v146Ev();
extern void _ZN10S1409C3_nt4v147Ev();
extern void _ZN10S1409C3_nt4v148Ev();
extern void _ZN10S1409C3_nt4v149Ev();
extern void _ZN10S1409C3_nt4v150Ev();
extern void _ZN10S1409C3_nt4v151Ev();
extern void _ZN10S1409C3_nt4v152Ev();
extern void _ZN10S1409C3_nt4v153Ev();
extern void _ZN10S1409C3_nt4v154Ev();
extern void _ZN10S1409C3_nt4v155Ev();
extern void _ZN10S1409C3_nt4v156Ev();
extern void _ZN10S1409C3_nt4v157Ev();
extern void _ZN10S1409C3_nt4v158Ev();
extern void _ZN10S1409C3_nt4v159Ev();
extern void _ZN10S1409C3_nt4v160Ev();
extern void _ZN10S1409C3_nt4v161Ev();
extern void _ZN10S1409C3_nt4v162Ev();
extern void _ZN10S1409C3_nt4v163Ev();
extern void _ZN10S1409C3_nt4v164Ev();
extern void _ZN10S1409C3_nt4v165Ev();
extern void _ZN10S1409C3_nt4v166Ev();
extern void _ZN10S1409C3_nt4v167Ev();
extern void _ZN10S1409C3_nt4v168Ev();
extern void _ZN10S1409C3_nt4v169Ev();
extern void _ZN10S1409C3_nt4v170Ev();
extern void _ZN10S1409C3_nt4v171Ev();
extern void _ZN10S1409C3_nt4v172Ev();
extern void _ZN10S1409C3_nt4v173Ev();
extern void _ZN10S1409C3_nt4v174Ev();
extern void _ZN10S1409C3_nt4v175Ev();
extern void _ZN10S1409C3_nt4v176Ev();
extern void _ZN10S1409C3_nt4v177Ev();
extern void _ZN10S1409C3_nt4v178Ev();
extern void _ZN10S1409C3_nt4v179Ev();
extern void _ZN10S1409C3_nt4v180Ev();
extern void _ZN10S1409C3_nt4v181Ev();
extern void _ZN10S1409C3_nt4v182Ev();
extern void _ZN10S1409C3_nt4v183Ev();
extern void _ZN10S1409C3_nt4v184Ev();
extern void _ZN10S1409C3_nt4v185Ev();
extern void _ZN10S1409C3_nt4v186Ev();
extern void _ZN10S1409C3_nt4v187Ev();
extern void _ZN10S1409C3_nt4v188Ev();
extern void _ZN10S1409C3_nt4v189Ev();
extern void _ZN10S1409C3_nt4v190Ev();
extern void _ZN10S1409C3_nt4v191Ev();
extern void _ZN10S1409C3_nt4v192Ev();
extern void _ZN10S1409C3_nt4v193Ev();
extern void _ZN10S1409C3_nt4v194Ev();
extern void _ZN10S1409C3_nt4v195Ev();
extern void _ZN10S1409C3_nt4v196Ev();
extern void _ZN10S1409C3_nt4v197Ev();
extern void _ZN10S1409C3_nt4v198Ev();
extern void _ZN10S1409C3_nt4v199Ev();
extern void _ZN10S1409C3_nt4v200Ev();
extern void _ZN10S1409C3_nt4v201Ev();
extern void _ZN10S1409C3_nt4v202Ev();
extern void _ZN10S1409C3_nt4v203Ev();
extern void _ZN10S1409C3_nt4v204Ev();
extern void _ZN10S1409C3_nt4v205Ev();
extern void _ZN10S1409C3_nt4v206Ev();
extern void _ZN10S1409C3_nt4v207Ev();
extern void _ZN10S1409C3_nt4v208Ev();
extern void _ZN10S1409C3_nt4v209Ev();
extern void _ZN10S1409C3_nt4v210Ev();
static  VTBL_ENTRY vtc_S1409C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1409C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1409C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v210Ev,
};
extern VTBL_ENTRY _ZTI10S1409C3_nt[];
VTBL_ENTRY *P__ZTI10S1409C3_nt = _ZTI10S1409C3_nt; 
extern  VTBL_ENTRY _ZTV10S1409C3_nt[];
Class_Descriptor cd_S1409C3_nt = {  "S1409C3_nt", // class name
  bases_S1409C3_nt, 1,
  &(vtc_S1409C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1409C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1409C3_nt),211, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C23  : S1409C8_nt {
};
//SIG(-1 S1409C23) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1409C23()
{
  extern Class_Descriptor cd_S1409C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C23, buf);
    S1409C23 &lv = *(new (buf) S1409C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C23)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S1409C23");
    test_class_info(&lv, &cd_S1409C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C23(Test_S1409C23, "S1409C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S1409C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C23 = {  "S1409C23", // class name
  bases_S1409C23, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C22  : S1409C23 {
};
//SIG(-1 S1409C22) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1409C22()
{
  extern Class_Descriptor cd_S1409C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C22, buf);
    S1409C22 &lv = *(new (buf) S1409C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C22)");
    check_base_class_offset(lv, (S1409C8_nt*)(S1409C23*), 0, "S1409C22");
    check_base_class_offset(lv, (S1409C23*), 0, "S1409C22");
    test_class_info(&lv, &cd_S1409C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C22(Test_S1409C22, "S1409C22", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S1409C23;
static Base_Class bases_S1409C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C22 = {  "S1409C22", // class name
  bases_S1409C22, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C27  : S1409C8_nt {
};
//SIG(-1 S1409C27) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1409C27()
{
  extern Class_Descriptor cd_S1409C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C27, buf);
    S1409C27 &lv = *(new (buf) S1409C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C27)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S1409C27");
    test_class_info(&lv, &cd_S1409C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C27(Test_S1409C27, "S1409C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S1409C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C27 = {  "S1409C27", // class name
  bases_S1409C27, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C26  : S1409C27 {
};
//SIG(-1 S1409C26) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1409C26()
{
  extern Class_Descriptor cd_S1409C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C26, buf);
    S1409C26 &lv = *(new (buf) S1409C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C26)");
    check_base_class_offset(lv, (S1409C8_nt*)(S1409C27*), 0, "S1409C26");
    check_base_class_offset(lv, (S1409C27*), 0, "S1409C26");
    test_class_info(&lv, &cd_S1409C26);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C26(Test_S1409C26, "S1409C26", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S1409C27;
static Base_Class bases_S1409C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C26 = {  "S1409C26", // class name
  bases_S1409C26, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C2  : S1409C3_nt {
  void *s1409c2f0;
  ::S1409C22 s1409c2f1;
  ::S1409C22 s1409c2f2;
  int s1409c2f3;
  unsigned int s1409c2f4:1;
  unsigned int s1409c2f5:1;
  ::S1409C22 s1409c2f6;
  int s1409c2f7[4];
  ::S1409C26 s1409c2f8;
  ::S1409C26 s1409c2f9;
  virtual  ~S1409C2(); // _ZN7S1409C2D1Ev
  virtual void  v211(); // _ZN7S1409C24v211Ev
  virtual void  v212(); // _ZN7S1409C24v212Ev
  virtual void  v213(); // _ZN7S1409C24v213Ev
  S1409C2(); // tgen
};
//SIG(-1 S1409C2) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2 v3 Fp FC14{ BC15{ BC7}} FC14 Fi Fi:1 Fi:1 FC14 Fi[4] FC16{ BC17{ BC7}} FC16}


 S1409C2 ::~S1409C2(){ note_dtor("S1409C2", this);}
void  S1409C2 ::v211(){vfunc_called(this, "_ZN7S1409C24v211Ev");}
void  S1409C2 ::v212(){vfunc_called(this, "_ZN7S1409C24v212Ev");}
void  S1409C2 ::v213(){vfunc_called(this, "_ZN7S1409C24v213Ev");}
S1409C2 ::S1409C2(){ note_ctor("S1409C2", this);} // tgen

static void Test_S1409C2()
{
  extern Class_Descriptor cd_S1409C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(86,132)];
    init_test(&cd_S1409C2, buf);
    S1409C2 *dp, &lv = *(dp=new (buf) S1409C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(680,524), "sizeof(S1409C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C2)");
    check_base_class_offset(lv, (S1409C4_nt*)(S1409C3_nt*), 0, "S1409C2");
    check_base_class_offset(lv, (S1409C3_nt*), 0, "S1409C2");
    check_field_offset(lv, s1409c2f0, ABISELECT(568,436), "S1409C2.s1409c2f0");
    check_field_offset(lv, s1409c2f1, ABISELECT(576,440), "S1409C2.s1409c2f1");
    check_field_offset(lv, s1409c2f2, ABISELECT(592,452), "S1409C2.s1409c2f2");
    check_field_offset(lv, s1409c2f3, ABISELECT(608,464), "S1409C2.s1409c2f3");
    set_bf_and_test(lv, s1409c2f4, ABISELECT(612,468), 0, 1, 1, "S1409C2");
    set_bf_and_test(lv, s1409c2f5, ABISELECT(612,468), 1, 1, 1, "S1409C2");
    check_field_offset(lv, s1409c2f6, ABISELECT(616,472), "S1409C2.s1409c2f6");
    check_field_offset(lv, s1409c2f7, ABISELECT(632,484), "S1409C2.s1409c2f7");
    check_field_offset(lv, s1409c2f8, ABISELECT(648,500), "S1409C2.s1409c2f8");
    check_field_offset(lv, s1409c2f9, ABISELECT(664,512), "S1409C2.s1409c2f9");
    test_class_info(&lv, &cd_S1409C2);
    dp->~S1409C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C2(Test_S1409C2, "S1409C2", ABISELECT(680,524));

#else // __cplusplus

extern void _ZN7S1409C2C1Ev();
extern void _ZN7S1409C2D1Ev();
Name_Map name_map_S1409C2[] = {
  NSPAIR(_ZN7S1409C2C1Ev),
  NSPAIR(_ZN7S1409C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1409C4_nt;
extern VTBL_ENTRY _ZTI10S1409C4_nt[];
extern  VTBL_ENTRY _ZTV10S1409C4_nt[];
extern Class_Descriptor cd_S1409C3_nt;
extern VTBL_ENTRY _ZTI10S1409C3_nt[];
extern  VTBL_ENTRY _ZTV10S1409C3_nt[];
static Base_Class bases_S1409C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1409C2[];
extern void _ZN7S1409C2D1Ev();
extern void _ZN7S1409C2D0Ev();
extern void _ZN10S1409C4_nt2v4Ev();
extern void _ZN10S1409C4_nt2v5Ev();
extern void _ZN10S1409C4_nt2v6Ev();
extern void _ZN10S1409C4_nt2v7Ev();
extern void _ZN10S1409C4_nt2v8Ev();
extern void _ZN10S1409C4_nt2v9Ev();
extern void _ZN10S1409C4_nt3v10Ev();
extern void _ZN10S1409C4_nt3v11Ev();
extern void _ZN10S1409C4_nt3v12Ev();
extern void _ZN10S1409C4_nt3v13Ev();
extern void _ZN10S1409C4_nt3v14Ev();
extern void _ZN10S1409C4_nt3v15Ev();
extern void _ZN10S1409C4_nt3v16Ev();
extern void _ZN10S1409C4_nt3v17Ev();
extern void _ZN10S1409C4_nt3v18Ev();
extern void _ZN10S1409C4_nt3v19Ev();
extern void _ZN10S1409C4_nt3v20Ev();
extern void _ZN10S1409C4_nt3v21Ev();
extern void _ZN10S1409C4_nt3v22Ev();
extern void _ZN10S1409C4_nt3v23Ev();
extern void _ZN10S1409C4_nt3v24Ev();
extern void _ZN10S1409C4_nt3v25Ev();
extern void _ZN10S1409C4_nt3v26Ev();
extern void _ZN10S1409C4_nt3v27Ev();
extern void _ZN10S1409C4_nt3v28Ev();
extern void _ZN10S1409C4_nt3v29Ev();
extern void _ZN10S1409C4_nt3v30Ev();
extern void _ZN10S1409C4_nt3v31Ev();
extern void _ZN10S1409C4_nt3v32Ev();
extern void _ZN10S1409C4_nt3v33Ev();
extern void _ZN10S1409C4_nt3v34Ev();
extern void _ZN10S1409C4_nt3v35Ev();
extern void _ZN10S1409C4_nt3v36Ev();
extern void _ZN10S1409C4_nt3v37Ev();
extern void _ZN10S1409C4_nt3v38Ev();
extern void _ZN10S1409C4_nt3v39Ev();
extern void _ZN10S1409C4_nt3v40Ev();
extern void _ZN10S1409C4_nt3v41Ev();
extern void _ZN10S1409C4_nt3v42Ev();
extern void _ZN10S1409C4_nt3v43Ev();
extern void _ZN10S1409C4_nt3v44Ev();
extern void _ZN10S1409C4_nt3v45Ev();
extern void _ZN10S1409C4_nt3v46Ev();
extern void _ZN10S1409C4_nt3v47Ev();
extern void _ZN10S1409C4_nt3v48Ev();
extern void _ZN10S1409C4_nt3v49Ev();
extern void _ZN10S1409C4_nt3v50Ev();
extern void _ZN10S1409C4_nt3v51Ev();
extern void _ZN10S1409C4_nt3v52Ev();
extern void _ZN10S1409C4_nt3v53Ev();
extern void _ZN10S1409C4_nt3v54Ev();
extern void _ZN10S1409C4_nt3v55Ev();
extern void _ZN10S1409C4_nt3v56Ev();
extern void _ZN10S1409C4_nt3v57Ev();
extern void _ZN10S1409C4_nt3v58Ev();
extern void _ZN10S1409C4_nt3v59Ev();
extern void _ZN10S1409C4_nt3v60Ev();
extern void _ZN10S1409C4_nt3v61Ev();
extern void _ZN10S1409C4_nt3v62Ev();
extern void _ZN10S1409C4_nt3v63Ev();
extern void _ZN10S1409C4_nt3v64Ev();
extern void _ZN10S1409C4_nt3v65Ev();
extern void _ZN10S1409C4_nt3v66Ev();
extern void _ZN10S1409C4_nt3v67Ev();
extern void _ZN10S1409C3_nt3v68Ev();
extern void _ZN10S1409C3_nt3v69Ev();
extern void _ZN10S1409C3_nt3v70Ev();
extern void _ZN10S1409C3_nt3v71Ev();
extern void _ZN10S1409C3_nt3v72Ev();
extern void _ZN10S1409C3_nt3v73Ev();
extern void _ZN10S1409C3_nt3v74Ev();
extern void _ZN10S1409C3_nt3v75Ev();
extern void _ZN10S1409C3_nt3v76Ev();
extern void _ZN10S1409C3_nt3v77Ev();
extern void _ZN10S1409C3_nt3v78Ev();
extern void _ZN10S1409C3_nt3v79Ev();
extern void _ZN10S1409C3_nt3v80Ev();
extern void _ZN10S1409C3_nt3v81Ev();
extern void _ZN10S1409C3_nt3v82Ev();
extern void _ZN10S1409C3_nt3v83Ev();
extern void _ZN10S1409C3_nt3v84Ev();
extern void _ZN10S1409C3_nt3v85Ev();
extern void _ZN10S1409C3_nt3v86Ev();
extern void _ZN10S1409C3_nt3v87Ev();
extern void _ZN10S1409C3_nt3v88Ev();
extern void _ZN10S1409C3_nt3v89Ev();
extern void _ZN10S1409C3_nt3v90Ev();
extern void _ZN10S1409C3_nt3v91Ev();
extern void _ZN10S1409C3_nt3v92Ev();
extern void _ZN10S1409C3_nt3v93Ev();
extern void _ZN10S1409C3_nt3v94Ev();
extern void _ZN10S1409C3_nt3v95Ev();
extern void _ZN10S1409C3_nt3v96Ev();
extern void _ZN10S1409C3_nt3v97Ev();
extern void _ZN10S1409C3_nt3v98Ev();
extern void _ZN10S1409C3_nt3v99Ev();
extern void _ZN10S1409C3_nt4v100Ev();
extern void _ZN10S1409C3_nt4v101Ev();
extern void _ZN10S1409C3_nt4v102Ev();
extern void _ZN10S1409C3_nt4v103Ev();
extern void _ZN10S1409C3_nt4v104Ev();
extern void _ZN10S1409C3_nt4v105Ev();
extern void _ZN10S1409C3_nt4v106Ev();
extern void _ZN10S1409C3_nt4v107Ev();
extern void _ZN10S1409C3_nt4v108Ev();
extern void _ZN10S1409C3_nt4v109Ev();
extern void _ZN10S1409C3_nt4v110Ev();
extern void _ZN10S1409C3_nt4v111Ev();
extern void _ZN10S1409C3_nt4v112Ev();
extern void _ZN10S1409C3_nt4v113Ev();
extern void _ZN10S1409C3_nt4v114Ev();
extern void _ZN10S1409C3_nt4v115Ev();
extern void _ZN10S1409C3_nt4v116Ev();
extern void _ZN10S1409C3_nt4v117Ev();
extern void _ZN10S1409C3_nt4v118Ev();
extern void _ZN10S1409C3_nt4v119Ev();
extern void _ZN10S1409C3_nt4v120Ev();
extern void _ZN10S1409C3_nt4v121Ev();
extern void _ZN10S1409C3_nt4v122Ev();
extern void _ZN10S1409C3_nt4v123Ev();
extern void _ZN10S1409C3_nt4v124Ev();
extern void _ZN10S1409C3_nt4v125Ev();
extern void _ZN10S1409C3_nt4v126Ev();
extern void _ZN10S1409C3_nt4v127Ev();
extern void _ZN10S1409C3_nt4v128Ev();
extern void _ZN10S1409C3_nt4v129Ev();
extern void _ZN10S1409C3_nt4v130Ev();
extern void _ZN10S1409C3_nt4v131Ev();
extern void _ZN10S1409C3_nt4v132Ev();
extern void _ZN10S1409C3_nt4v133Ev();
extern void _ZN10S1409C3_nt4v134Ev();
extern void _ZN10S1409C3_nt4v135Ev();
extern void _ZN10S1409C3_nt4v136Ev();
extern void _ZN10S1409C3_nt4v137Ev();
extern void _ZN10S1409C3_nt4v138Ev();
extern void _ZN10S1409C3_nt4v139Ev();
extern void _ZN10S1409C3_nt4v140Ev();
extern void _ZN10S1409C3_nt4v141Ev();
extern void _ZN10S1409C3_nt4v142Ev();
extern void _ZN10S1409C3_nt4v143Ev();
extern void _ZN10S1409C3_nt4v144Ev();
extern void _ZN10S1409C3_nt4v145Ev();
extern void _ZN10S1409C3_nt4v146Ev();
extern void _ZN10S1409C3_nt4v147Ev();
extern void _ZN10S1409C3_nt4v148Ev();
extern void _ZN10S1409C3_nt4v149Ev();
extern void _ZN10S1409C3_nt4v150Ev();
extern void _ZN10S1409C3_nt4v151Ev();
extern void _ZN10S1409C3_nt4v152Ev();
extern void _ZN10S1409C3_nt4v153Ev();
extern void _ZN10S1409C3_nt4v154Ev();
extern void _ZN10S1409C3_nt4v155Ev();
extern void _ZN10S1409C3_nt4v156Ev();
extern void _ZN10S1409C3_nt4v157Ev();
extern void _ZN10S1409C3_nt4v158Ev();
extern void _ZN10S1409C3_nt4v159Ev();
extern void _ZN10S1409C3_nt4v160Ev();
extern void _ZN10S1409C3_nt4v161Ev();
extern void _ZN10S1409C3_nt4v162Ev();
extern void _ZN10S1409C3_nt4v163Ev();
extern void _ZN10S1409C3_nt4v164Ev();
extern void _ZN10S1409C3_nt4v165Ev();
extern void _ZN10S1409C3_nt4v166Ev();
extern void _ZN10S1409C3_nt4v167Ev();
extern void _ZN10S1409C3_nt4v168Ev();
extern void _ZN10S1409C3_nt4v169Ev();
extern void _ZN10S1409C3_nt4v170Ev();
extern void _ZN10S1409C3_nt4v171Ev();
extern void _ZN10S1409C3_nt4v172Ev();
extern void _ZN10S1409C3_nt4v173Ev();
extern void _ZN10S1409C3_nt4v174Ev();
extern void _ZN10S1409C3_nt4v175Ev();
extern void _ZN10S1409C3_nt4v176Ev();
extern void _ZN10S1409C3_nt4v177Ev();
extern void _ZN10S1409C3_nt4v178Ev();
extern void _ZN10S1409C3_nt4v179Ev();
extern void _ZN10S1409C3_nt4v180Ev();
extern void _ZN10S1409C3_nt4v181Ev();
extern void _ZN10S1409C3_nt4v182Ev();
extern void _ZN10S1409C3_nt4v183Ev();
extern void _ZN10S1409C3_nt4v184Ev();
extern void _ZN10S1409C3_nt4v185Ev();
extern void _ZN10S1409C3_nt4v186Ev();
extern void _ZN10S1409C3_nt4v187Ev();
extern void _ZN10S1409C3_nt4v188Ev();
extern void _ZN10S1409C3_nt4v189Ev();
extern void _ZN10S1409C3_nt4v190Ev();
extern void _ZN10S1409C3_nt4v191Ev();
extern void _ZN10S1409C3_nt4v192Ev();
extern void _ZN10S1409C3_nt4v193Ev();
extern void _ZN10S1409C3_nt4v194Ev();
extern void _ZN10S1409C3_nt4v195Ev();
extern void _ZN10S1409C3_nt4v196Ev();
extern void _ZN10S1409C3_nt4v197Ev();
extern void _ZN10S1409C3_nt4v198Ev();
extern void _ZN10S1409C3_nt4v199Ev();
extern void _ZN10S1409C3_nt4v200Ev();
extern void _ZN10S1409C3_nt4v201Ev();
extern void _ZN10S1409C3_nt4v202Ev();
extern void _ZN10S1409C3_nt4v203Ev();
extern void _ZN10S1409C3_nt4v204Ev();
extern void _ZN10S1409C3_nt4v205Ev();
extern void _ZN10S1409C3_nt4v206Ev();
extern void _ZN10S1409C3_nt4v207Ev();
extern void _ZN10S1409C3_nt4v208Ev();
extern void _ZN10S1409C3_nt4v209Ev();
extern void _ZN10S1409C3_nt4v210Ev();
extern void _ZN7S1409C24v211Ev();
extern void _ZN7S1409C24v212Ev();
extern void _ZN7S1409C24v213Ev();
static  VTBL_ENTRY vtc_S1409C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1409C2[0]),
  (VTBL_ENTRY)&_ZN7S1409C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1409C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN7S1409C24v211Ev,
  (VTBL_ENTRY)&_ZN7S1409C24v212Ev,
  (VTBL_ENTRY)&_ZN7S1409C24v213Ev,
};
extern VTBL_ENTRY _ZTI7S1409C2[];
extern  VTBL_ENTRY _ZTV7S1409C2[];
Class_Descriptor cd_S1409C2 = {  "S1409C2", // class name
  bases_S1409C2, 2,
  &(vtc_S1409C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(680,524), // object size
  NSPAIRA(_ZTI7S1409C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1409C2),214, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C31  : S1409C8_nt {
};
//SIG(-1 S1409C31) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1409C31()
{
  extern Class_Descriptor cd_S1409C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C31, buf);
    S1409C31 &lv = *(new (buf) S1409C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C31)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S1409C31");
    test_class_info(&lv, &cd_S1409C31);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C31(Test_S1409C31, "S1409C31", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S1409C31[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C31 = {  "S1409C31", // class name
  bases_S1409C31, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C30  : S1409C31 {
};
//SIG(-1 S1409C30) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1409C30()
{
  extern Class_Descriptor cd_S1409C30;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1409C30, buf);
    S1409C30 &lv = *(new (buf) S1409C30());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1409C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C30)");
    check_base_class_offset(lv, (S1409C8_nt*)(S1409C31*), 0, "S1409C30");
    check_base_class_offset(lv, (S1409C31*), 0, "S1409C30");
    test_class_info(&lv, &cd_S1409C30);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C30(Test_S1409C30, "S1409C30", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S1409C31;
static Base_Class bases_S1409C30[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C31,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S1409C30 = {  "S1409C30", // class name
  bases_S1409C30, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1409C1  : S1409C2 {
  ::S1409C30 s1409c1f0;
  virtual  ~S1409C1(); // _ZN7S1409C1D1Ev
  virtual void  v1(); // _ZN7S1409C12v1Ev
  virtual void  v2(); // _ZN7S1409C12v2Ev
  virtual void  v3(); // _ZN7S1409C12v3Ev
  S1409C1(); // tgen
};
//SIG(1 S1409C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC9{ m Fi} Fi Fc[4] Fp[2] FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC5 FC5 FC5 FC10{ BC11{ BC8}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC12 FC12 FC12 Fp FC5 FC10 FC12 FC12 Fi FC12 FC12 Fp Fi Fc FC12 FC12 Fp Fi Fp FC10 FC13{ BC14{ BC8}} FC13} vd v211 v212 v213 Fp FC15{ BC16{ BC8}} FC15 Fi Fi:1 Fi:1 FC15 Fi[4] FC17{ BC18{ BC8}} FC17} vd v1 v2 v3 FC19{ BC20{ BC8}}}


 S1409C1 ::~S1409C1(){ note_dtor("S1409C1", this);}
void  S1409C1 ::v1(){vfunc_called(this, "_ZN7S1409C12v1Ev");}
void  S1409C1 ::v2(){vfunc_called(this, "_ZN7S1409C12v2Ev");}
void  S1409C1 ::v3(){vfunc_called(this, "_ZN7S1409C12v3Ev");}
S1409C1 ::S1409C1(){ note_ctor("S1409C1", this);} // tgen

static void Test_S1409C1()
{
  extern Class_Descriptor cd_S1409C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(88,135)];
    init_test(&cd_S1409C1, buf);
    S1409C1 *dp, &lv = *(dp=new (buf) S1409C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(696,536), "sizeof(S1409C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1409C1)");
    check_base_class_offset(lv, (S1409C4_nt*)(S1409C3_nt*)(S1409C2*), 0, "S1409C1");
    check_base_class_offset(lv, (S1409C3_nt*)(S1409C2*), 0, "S1409C1");
    check_base_class_offset(lv, (S1409C2*), 0, "S1409C1");
    check_field_offset(lv, s1409c1f0, ABISELECT(680,524), "S1409C1.s1409c1f0");
    test_class_info(&lv, &cd_S1409C1);
    dp->~S1409C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1409C1(Test_S1409C1, "S1409C1", ABISELECT(696,536));

#else // __cplusplus

extern void _ZN7S1409C1C1Ev();
extern void _ZN7S1409C1D1Ev();
Name_Map name_map_S1409C1[] = {
  NSPAIR(_ZN7S1409C1C1Ev),
  NSPAIR(_ZN7S1409C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1409C4_nt;
extern VTBL_ENTRY _ZTI10S1409C4_nt[];
extern  VTBL_ENTRY _ZTV10S1409C4_nt[];
extern Class_Descriptor cd_S1409C3_nt;
extern VTBL_ENTRY _ZTI10S1409C3_nt[];
extern  VTBL_ENTRY _ZTV10S1409C3_nt[];
extern Class_Descriptor cd_S1409C2;
extern VTBL_ENTRY _ZTI7S1409C2[];
extern  VTBL_ENTRY _ZTV7S1409C2[];
static Base_Class bases_S1409C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1409C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1409C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1409C1[];
extern void _ZN7S1409C1D1Ev();
extern void _ZN7S1409C1D0Ev();
extern void _ZN10S1409C4_nt2v4Ev();
extern void _ZN10S1409C4_nt2v5Ev();
extern void _ZN10S1409C4_nt2v6Ev();
extern void _ZN10S1409C4_nt2v7Ev();
extern void _ZN10S1409C4_nt2v8Ev();
extern void _ZN10S1409C4_nt2v9Ev();
extern void _ZN10S1409C4_nt3v10Ev();
extern void _ZN10S1409C4_nt3v11Ev();
extern void _ZN10S1409C4_nt3v12Ev();
extern void _ZN10S1409C4_nt3v13Ev();
extern void _ZN10S1409C4_nt3v14Ev();
extern void _ZN10S1409C4_nt3v15Ev();
extern void _ZN10S1409C4_nt3v16Ev();
extern void _ZN10S1409C4_nt3v17Ev();
extern void _ZN10S1409C4_nt3v18Ev();
extern void _ZN10S1409C4_nt3v19Ev();
extern void _ZN10S1409C4_nt3v20Ev();
extern void _ZN10S1409C4_nt3v21Ev();
extern void _ZN10S1409C4_nt3v22Ev();
extern void _ZN10S1409C4_nt3v23Ev();
extern void _ZN10S1409C4_nt3v24Ev();
extern void _ZN10S1409C4_nt3v25Ev();
extern void _ZN10S1409C4_nt3v26Ev();
extern void _ZN10S1409C4_nt3v27Ev();
extern void _ZN10S1409C4_nt3v28Ev();
extern void _ZN10S1409C4_nt3v29Ev();
extern void _ZN10S1409C4_nt3v30Ev();
extern void _ZN10S1409C4_nt3v31Ev();
extern void _ZN10S1409C4_nt3v32Ev();
extern void _ZN10S1409C4_nt3v33Ev();
extern void _ZN10S1409C4_nt3v34Ev();
extern void _ZN10S1409C4_nt3v35Ev();
extern void _ZN10S1409C4_nt3v36Ev();
extern void _ZN10S1409C4_nt3v37Ev();
extern void _ZN10S1409C4_nt3v38Ev();
extern void _ZN10S1409C4_nt3v39Ev();
extern void _ZN10S1409C4_nt3v40Ev();
extern void _ZN10S1409C4_nt3v41Ev();
extern void _ZN10S1409C4_nt3v42Ev();
extern void _ZN10S1409C4_nt3v43Ev();
extern void _ZN10S1409C4_nt3v44Ev();
extern void _ZN10S1409C4_nt3v45Ev();
extern void _ZN10S1409C4_nt3v46Ev();
extern void _ZN10S1409C4_nt3v47Ev();
extern void _ZN10S1409C4_nt3v48Ev();
extern void _ZN10S1409C4_nt3v49Ev();
extern void _ZN10S1409C4_nt3v50Ev();
extern void _ZN10S1409C4_nt3v51Ev();
extern void _ZN10S1409C4_nt3v52Ev();
extern void _ZN10S1409C4_nt3v53Ev();
extern void _ZN10S1409C4_nt3v54Ev();
extern void _ZN10S1409C4_nt3v55Ev();
extern void _ZN10S1409C4_nt3v56Ev();
extern void _ZN10S1409C4_nt3v57Ev();
extern void _ZN10S1409C4_nt3v58Ev();
extern void _ZN10S1409C4_nt3v59Ev();
extern void _ZN10S1409C4_nt3v60Ev();
extern void _ZN10S1409C4_nt3v61Ev();
extern void _ZN10S1409C4_nt3v62Ev();
extern void _ZN10S1409C4_nt3v63Ev();
extern void _ZN10S1409C4_nt3v64Ev();
extern void _ZN10S1409C4_nt3v65Ev();
extern void _ZN10S1409C4_nt3v66Ev();
extern void _ZN10S1409C4_nt3v67Ev();
extern void _ZN10S1409C3_nt3v68Ev();
extern void _ZN10S1409C3_nt3v69Ev();
extern void _ZN10S1409C3_nt3v70Ev();
extern void _ZN10S1409C3_nt3v71Ev();
extern void _ZN10S1409C3_nt3v72Ev();
extern void _ZN10S1409C3_nt3v73Ev();
extern void _ZN10S1409C3_nt3v74Ev();
extern void _ZN10S1409C3_nt3v75Ev();
extern void _ZN10S1409C3_nt3v76Ev();
extern void _ZN10S1409C3_nt3v77Ev();
extern void _ZN10S1409C3_nt3v78Ev();
extern void _ZN10S1409C3_nt3v79Ev();
extern void _ZN10S1409C3_nt3v80Ev();
extern void _ZN10S1409C3_nt3v81Ev();
extern void _ZN10S1409C3_nt3v82Ev();
extern void _ZN10S1409C3_nt3v83Ev();
extern void _ZN10S1409C3_nt3v84Ev();
extern void _ZN10S1409C3_nt3v85Ev();
extern void _ZN10S1409C3_nt3v86Ev();
extern void _ZN10S1409C3_nt3v87Ev();
extern void _ZN10S1409C3_nt3v88Ev();
extern void _ZN10S1409C3_nt3v89Ev();
extern void _ZN10S1409C3_nt3v90Ev();
extern void _ZN10S1409C3_nt3v91Ev();
extern void _ZN10S1409C3_nt3v92Ev();
extern void _ZN10S1409C3_nt3v93Ev();
extern void _ZN10S1409C3_nt3v94Ev();
extern void _ZN10S1409C3_nt3v95Ev();
extern void _ZN10S1409C3_nt3v96Ev();
extern void _ZN10S1409C3_nt3v97Ev();
extern void _ZN10S1409C3_nt3v98Ev();
extern void _ZN10S1409C3_nt3v99Ev();
extern void _ZN10S1409C3_nt4v100Ev();
extern void _ZN10S1409C3_nt4v101Ev();
extern void _ZN10S1409C3_nt4v102Ev();
extern void _ZN10S1409C3_nt4v103Ev();
extern void _ZN10S1409C3_nt4v104Ev();
extern void _ZN10S1409C3_nt4v105Ev();
extern void _ZN10S1409C3_nt4v106Ev();
extern void _ZN10S1409C3_nt4v107Ev();
extern void _ZN10S1409C3_nt4v108Ev();
extern void _ZN10S1409C3_nt4v109Ev();
extern void _ZN10S1409C3_nt4v110Ev();
extern void _ZN10S1409C3_nt4v111Ev();
extern void _ZN10S1409C3_nt4v112Ev();
extern void _ZN10S1409C3_nt4v113Ev();
extern void _ZN10S1409C3_nt4v114Ev();
extern void _ZN10S1409C3_nt4v115Ev();
extern void _ZN10S1409C3_nt4v116Ev();
extern void _ZN10S1409C3_nt4v117Ev();
extern void _ZN10S1409C3_nt4v118Ev();
extern void _ZN10S1409C3_nt4v119Ev();
extern void _ZN10S1409C3_nt4v120Ev();
extern void _ZN10S1409C3_nt4v121Ev();
extern void _ZN10S1409C3_nt4v122Ev();
extern void _ZN10S1409C3_nt4v123Ev();
extern void _ZN10S1409C3_nt4v124Ev();
extern void _ZN10S1409C3_nt4v125Ev();
extern void _ZN10S1409C3_nt4v126Ev();
extern void _ZN10S1409C3_nt4v127Ev();
extern void _ZN10S1409C3_nt4v128Ev();
extern void _ZN10S1409C3_nt4v129Ev();
extern void _ZN10S1409C3_nt4v130Ev();
extern void _ZN10S1409C3_nt4v131Ev();
extern void _ZN10S1409C3_nt4v132Ev();
extern void _ZN10S1409C3_nt4v133Ev();
extern void _ZN10S1409C3_nt4v134Ev();
extern void _ZN10S1409C3_nt4v135Ev();
extern void _ZN10S1409C3_nt4v136Ev();
extern void _ZN10S1409C3_nt4v137Ev();
extern void _ZN10S1409C3_nt4v138Ev();
extern void _ZN10S1409C3_nt4v139Ev();
extern void _ZN10S1409C3_nt4v140Ev();
extern void _ZN10S1409C3_nt4v141Ev();
extern void _ZN10S1409C3_nt4v142Ev();
extern void _ZN10S1409C3_nt4v143Ev();
extern void _ZN10S1409C3_nt4v144Ev();
extern void _ZN10S1409C3_nt4v145Ev();
extern void _ZN10S1409C3_nt4v146Ev();
extern void _ZN10S1409C3_nt4v147Ev();
extern void _ZN10S1409C3_nt4v148Ev();
extern void _ZN10S1409C3_nt4v149Ev();
extern void _ZN10S1409C3_nt4v150Ev();
extern void _ZN10S1409C3_nt4v151Ev();
extern void _ZN10S1409C3_nt4v152Ev();
extern void _ZN10S1409C3_nt4v153Ev();
extern void _ZN10S1409C3_nt4v154Ev();
extern void _ZN10S1409C3_nt4v155Ev();
extern void _ZN10S1409C3_nt4v156Ev();
extern void _ZN10S1409C3_nt4v157Ev();
extern void _ZN10S1409C3_nt4v158Ev();
extern void _ZN10S1409C3_nt4v159Ev();
extern void _ZN10S1409C3_nt4v160Ev();
extern void _ZN10S1409C3_nt4v161Ev();
extern void _ZN10S1409C3_nt4v162Ev();
extern void _ZN10S1409C3_nt4v163Ev();
extern void _ZN10S1409C3_nt4v164Ev();
extern void _ZN10S1409C3_nt4v165Ev();
extern void _ZN10S1409C3_nt4v166Ev();
extern void _ZN10S1409C3_nt4v167Ev();
extern void _ZN10S1409C3_nt4v168Ev();
extern void _ZN10S1409C3_nt4v169Ev();
extern void _ZN10S1409C3_nt4v170Ev();
extern void _ZN10S1409C3_nt4v171Ev();
extern void _ZN10S1409C3_nt4v172Ev();
extern void _ZN10S1409C3_nt4v173Ev();
extern void _ZN10S1409C3_nt4v174Ev();
extern void _ZN10S1409C3_nt4v175Ev();
extern void _ZN10S1409C3_nt4v176Ev();
extern void _ZN10S1409C3_nt4v177Ev();
extern void _ZN10S1409C3_nt4v178Ev();
extern void _ZN10S1409C3_nt4v179Ev();
extern void _ZN10S1409C3_nt4v180Ev();
extern void _ZN10S1409C3_nt4v181Ev();
extern void _ZN10S1409C3_nt4v182Ev();
extern void _ZN10S1409C3_nt4v183Ev();
extern void _ZN10S1409C3_nt4v184Ev();
extern void _ZN10S1409C3_nt4v185Ev();
extern void _ZN10S1409C3_nt4v186Ev();
extern void _ZN10S1409C3_nt4v187Ev();
extern void _ZN10S1409C3_nt4v188Ev();
extern void _ZN10S1409C3_nt4v189Ev();
extern void _ZN10S1409C3_nt4v190Ev();
extern void _ZN10S1409C3_nt4v191Ev();
extern void _ZN10S1409C3_nt4v192Ev();
extern void _ZN10S1409C3_nt4v193Ev();
extern void _ZN10S1409C3_nt4v194Ev();
extern void _ZN10S1409C3_nt4v195Ev();
extern void _ZN10S1409C3_nt4v196Ev();
extern void _ZN10S1409C3_nt4v197Ev();
extern void _ZN10S1409C3_nt4v198Ev();
extern void _ZN10S1409C3_nt4v199Ev();
extern void _ZN10S1409C3_nt4v200Ev();
extern void _ZN10S1409C3_nt4v201Ev();
extern void _ZN10S1409C3_nt4v202Ev();
extern void _ZN10S1409C3_nt4v203Ev();
extern void _ZN10S1409C3_nt4v204Ev();
extern void _ZN10S1409C3_nt4v205Ev();
extern void _ZN10S1409C3_nt4v206Ev();
extern void _ZN10S1409C3_nt4v207Ev();
extern void _ZN10S1409C3_nt4v208Ev();
extern void _ZN10S1409C3_nt4v209Ev();
extern void _ZN10S1409C3_nt4v210Ev();
extern void _ZN7S1409C24v211Ev();
extern void _ZN7S1409C24v212Ev();
extern void _ZN7S1409C24v213Ev();
extern void _ZN7S1409C12v1Ev();
extern void _ZN7S1409C12v2Ev();
extern void _ZN7S1409C12v3Ev();
static  VTBL_ENTRY vtc_S1409C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1409C1[0]),
  (VTBL_ENTRY)&_ZN7S1409C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1409C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1409C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1409C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN7S1409C24v211Ev,
  (VTBL_ENTRY)&_ZN7S1409C24v212Ev,
  (VTBL_ENTRY)&_ZN7S1409C24v213Ev,
  (VTBL_ENTRY)&_ZN7S1409C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1409C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1409C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1409C1[];
extern  VTBL_ENTRY _ZTV7S1409C1[];
Class_Descriptor cd_S1409C1 = {  "S1409C1", // class name
  bases_S1409C1, 3,
  &(vtc_S1409C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(696,536), // object size
  NSPAIRA(_ZTI7S1409C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1409C1),217, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C7_nt  {
  void  mf2265c7(); // _ZN10S2265C7_nt8mf2265c7Ev
};
//SIG(-1 S2265C7_nt) C1{ m}


void  S2265C7_nt ::mf2265c7(){}

//skip512 S2265C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C6_nt  {
  void *s2265c6f0;
  int s2265c6f1;
  ::S2265C7_nt s2265c6f2;
  ::S2265C7_nt s2265c6f3;
  void  mf2265c6(); // _ZN10S2265C6_nt8mf2265c6Ev
};
//SIG(-1 S2265C6_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S2265C6_nt ::mf2265c6(){}

//skip512 S2265C6_nt

#else // __cplusplus

Class_Descriptor cd_S2265C6_nt = {  "S2265C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C5_nt  : S2265C6_nt {
};
//SIG(-1 S2265C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S2265C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2265C6_nt;
static Base_Class bases_S2265C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C4_nt  {
  void *s2265c4f0;
  int s2265c4f1;
  ::S2265C5_nt s2265c4f2;
  ::S2265C5_nt s2265c4f3;
  int s2265c4f4;
  virtual  ~S2265C4_nt(); // _ZN10S2265C4_ntD1Ev
  virtual void  v4(); // _ZN10S2265C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2265C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2265C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2265C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2265C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2265C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2265C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2265C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2265C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2265C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2265C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2265C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2265C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2265C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2265C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2265C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2265C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2265C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2265C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2265C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2265C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2265C4_nt3v25Ev
  virtual void  v26(); // _ZN10S2265C4_nt3v26Ev
  S2265C4_nt(); // tgen
};
//SIG(-1 S2265C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S2265C4_nt ::~S2265C4_nt(){ note_dtor("S2265C4_nt", this);}
void  S2265C4_nt ::v4(){vfunc_called(this, "_ZN10S2265C4_nt2v4Ev");}
void  S2265C4_nt ::v5(){vfunc_called(this, "_ZN10S2265C4_nt2v5Ev");}
void  S2265C4_nt ::v6(){vfunc_called(this, "_ZN10S2265C4_nt2v6Ev");}
void  S2265C4_nt ::v7(){vfunc_called(this, "_ZN10S2265C4_nt2v7Ev");}
void  S2265C4_nt ::v8(){vfunc_called(this, "_ZN10S2265C4_nt2v8Ev");}
void  S2265C4_nt ::v9(){vfunc_called(this, "_ZN10S2265C4_nt2v9Ev");}
void  S2265C4_nt ::v10(){vfunc_called(this, "_ZN10S2265C4_nt3v10Ev");}
void  S2265C4_nt ::v11(){vfunc_called(this, "_ZN10S2265C4_nt3v11Ev");}
void  S2265C4_nt ::v12(){vfunc_called(this, "_ZN10S2265C4_nt3v12Ev");}
void  S2265C4_nt ::v13(){vfunc_called(this, "_ZN10S2265C4_nt3v13Ev");}
void  S2265C4_nt ::v14(){vfunc_called(this, "_ZN10S2265C4_nt3v14Ev");}
void  S2265C4_nt ::v15(){vfunc_called(this, "_ZN10S2265C4_nt3v15Ev");}
void  S2265C4_nt ::v16(){vfunc_called(this, "_ZN10S2265C4_nt3v16Ev");}
void  S2265C4_nt ::v17(){vfunc_called(this, "_ZN10S2265C4_nt3v17Ev");}
void  S2265C4_nt ::v18(){vfunc_called(this, "_ZN10S2265C4_nt3v18Ev");}
void  S2265C4_nt ::v19(){vfunc_called(this, "_ZN10S2265C4_nt3v19Ev");}
void  S2265C4_nt ::v20(){vfunc_called(this, "_ZN10S2265C4_nt3v20Ev");}
void  S2265C4_nt ::v21(){vfunc_called(this, "_ZN10S2265C4_nt3v21Ev");}
void  S2265C4_nt ::v22(){vfunc_called(this, "_ZN10S2265C4_nt3v22Ev");}
void  S2265C4_nt ::v23(){vfunc_called(this, "_ZN10S2265C4_nt3v23Ev");}
void  S2265C4_nt ::v24(){vfunc_called(this, "_ZN10S2265C4_nt3v24Ev");}
void  S2265C4_nt ::v25(){vfunc_called(this, "_ZN10S2265C4_nt3v25Ev");}
void  S2265C4_nt ::v26(){vfunc_called(this, "_ZN10S2265C4_nt3v26Ev");}
S2265C4_nt ::S2265C4_nt(){ note_ctor("S2265C4_nt", this);} // tgen

//skip512 S2265C4_nt

#else // __cplusplus

extern void _ZN10S2265C4_ntC1Ev();
extern void _ZN10S2265C4_ntD1Ev();
Name_Map name_map_S2265C4_nt[] = {
  NSPAIR(_ZN10S2265C4_ntC1Ev),
  NSPAIR(_ZN10S2265C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2265C4_nt[];
extern void _ZN10S2265C4_ntD1Ev();
extern void _ZN10S2265C4_ntD0Ev();
extern void _ZN10S2265C4_nt2v4Ev();
extern void _ZN10S2265C4_nt2v5Ev();
extern void _ZN10S2265C4_nt2v6Ev();
extern void _ZN10S2265C4_nt2v7Ev();
extern void _ZN10S2265C4_nt2v8Ev();
extern void _ZN10S2265C4_nt2v9Ev();
extern void _ZN10S2265C4_nt3v10Ev();
extern void _ZN10S2265C4_nt3v11Ev();
extern void _ZN10S2265C4_nt3v12Ev();
extern void _ZN10S2265C4_nt3v13Ev();
extern void _ZN10S2265C4_nt3v14Ev();
extern void _ZN10S2265C4_nt3v15Ev();
extern void _ZN10S2265C4_nt3v16Ev();
extern void _ZN10S2265C4_nt3v17Ev();
extern void _ZN10S2265C4_nt3v18Ev();
extern void _ZN10S2265C4_nt3v19Ev();
extern void _ZN10S2265C4_nt3v20Ev();
extern void _ZN10S2265C4_nt3v21Ev();
extern void _ZN10S2265C4_nt3v22Ev();
extern void _ZN10S2265C4_nt3v23Ev();
extern void _ZN10S2265C4_nt3v24Ev();
extern void _ZN10S2265C4_nt3v25Ev();
extern void _ZN10S2265C4_nt3v26Ev();
static  VTBL_ENTRY vtc_S2265C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2265C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2265C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S2265C4_nt[];
VTBL_ENTRY *P__ZTI10S2265C4_nt = _ZTI10S2265C4_nt; 
extern  VTBL_ENTRY _ZTV10S2265C4_nt[];
Class_Descriptor cd_S2265C4_nt = {  "S2265C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2265C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2265C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2265C4_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C14_nt  {
  __tsi64 s2265c14f0[2];
  void  mf2265c14(); // _ZN11S2265C14_nt9mf2265c14Ev
};
//SIG(-1 S2265C14_nt) C1{ m FL[2]}


void  S2265C14_nt ::mf2265c14(){}

//skip512 S2265C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C13_nt  {
  ::S2265C14_nt s2265c13f0;
  void  mf2265c13(); // _ZN11S2265C13_nt9mf2265c13Ev
};
//SIG(-1 S2265C13_nt) C1{ m FC2{ m FL[2]}}


void  S2265C13_nt ::mf2265c13(){}

//skip512 S2265C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C17_nt  {
  ::S2265C13_nt s2265c17f0;
  void  mf2265c17(); // _ZN11S2265C17_nt9mf2265c17Ev
};
//SIG(-1 S2265C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2265C17_nt ::mf2265c17(){}

//skip512 S2265C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C18_nt  {
  ::S2265C13_nt s2265c18f0;
  ::S2265C13_nt s2265c18f1;
  ::S2265C13_nt s2265c18f2;
  ::S2265C13_nt s2265c18f3;
  void  mf2265c18(); // _ZN11S2265C18_nt9mf2265c18Ev
};
//SIG(-1 S2265C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2265C18_nt ::mf2265c18(){}

//skip512 S2265C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C21  {
  void  mf2265c21(); // _ZN8S2265C219mf2265c21Ev
};
//SIG(-1 S2265C21) C1{ m}


void  S2265C21 ::mf2265c21(){}

static void Test_S2265C21()
{
  {
    init_simple_test("S2265C21");
    S2265C21 lv;
    check2(sizeof(lv), 1, "sizeof(S2265C21)");
    check2(__alignof__(lv), 1, "__alignof__(S2265C21)");
  }
}
static Arrange_To_Call_Me vS2265C21(Test_S2265C21, "S2265C21", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2265C21[];
VTBL_ENTRY *P__ZTI8S2265C21 = _ZTI8S2265C21; 
Class_Descriptor cd_S2265C21 = {  "S2265C21", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2265C21),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C20_nt  {
  void *s2265c20f0;
  int s2265c20f1;
  ::S2265C21 s2265c20f2;
  void  mf2265c20(); // _ZN11S2265C20_nt9mf2265c20Ev
};
//SIG(-1 S2265C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2265C20_nt ::mf2265c20(){}

//skip512 S2265C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C19_nt  {
  ::S2265C20_nt s2265c19f0;
  int s2265c19f1;
  void  mf2265c19(); // _ZN11S2265C19_nt9mf2265c19Ev
};
//SIG(-1 S2265C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2265C19_nt ::mf2265c19(){}

//skip512 S2265C19_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C24  {
  void  mf2265c24(); // _ZN8S2265C249mf2265c24Ev
};
//SIG(-1 S2265C24) C1{ m}


void  S2265C24 ::mf2265c24(){}

static void Test_S2265C24()
{
  {
    init_simple_test("S2265C24");
    S2265C24 lv;
    check2(sizeof(lv), 1, "sizeof(S2265C24)");
    check2(__alignof__(lv), 1, "__alignof__(S2265C24)");
  }
}
static Arrange_To_Call_Me vS2265C24(Test_S2265C24, "S2265C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2265C24[];
VTBL_ENTRY *P__ZTI8S2265C24 = _ZTI8S2265C24; 
Class_Descriptor cd_S2265C24 = {  "S2265C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2265C24),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C22  {
  void *s2265c22f0;
  int s2265c22f1;
  ::S2265C21 s2265c22f2;
  ::S2265C24 s2265c22f3;
  void  mf2265c22(); // _ZN8S2265C229mf2265c22Ev
};
//SIG(-1 S2265C22) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2265C22 ::mf2265c22(){}

static void Test_S2265C22()
{
  {
    init_simple_test("S2265C22");
    S2265C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2265C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2265C22)");
    check_field_offset(lv, s2265c22f0, 0, "S2265C22.s2265c22f0");
    check_field_offset(lv, s2265c22f1, ABISELECT(8,4), "S2265C22.s2265c22f1");
    check_field_offset(lv, s2265c22f2, ABISELECT(12,8), "S2265C22.s2265c22f2");
    check_field_offset(lv, s2265c22f3, ABISELECT(13,9), "S2265C22.s2265c22f3");
  }
}
static Arrange_To_Call_Me vS2265C22(Test_S2265C22, "S2265C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C28  {
  void  mf2265c28(); // _ZN8S2265C289mf2265c28Ev
};
//SIG(-1 S2265C28) C1{ m}


void  S2265C28 ::mf2265c28(){}

static void Test_S2265C28()
{
  {
    init_simple_test("S2265C28");
    S2265C28 lv;
    check2(sizeof(lv), 1, "sizeof(S2265C28)");
    check2(__alignof__(lv), 1, "__alignof__(S2265C28)");
  }
}
static Arrange_To_Call_Me vS2265C28(Test_S2265C28, "S2265C28", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2265C28[];
VTBL_ENTRY *P__ZTI8S2265C28 = _ZTI8S2265C28; 
Class_Descriptor cd_S2265C28 = {  "S2265C28", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2265C28),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C26  {
  void *s2265c26f0;
  int s2265c26f1;
  ::S2265C24 s2265c26f2;
  ::S2265C28 s2265c26f3;
  void  mf2265c26(); // _ZN8S2265C269mf2265c26Ev
};
//SIG(-1 S2265C26) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2265C26 ::mf2265c26(){}

static void Test_S2265C26()
{
  {
    init_simple_test("S2265C26");
    S2265C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2265C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2265C26)");
    check_field_offset(lv, s2265c26f0, 0, "S2265C26.s2265c26f0");
    check_field_offset(lv, s2265c26f1, ABISELECT(8,4), "S2265C26.s2265c26f1");
    check_field_offset(lv, s2265c26f2, ABISELECT(12,8), "S2265C26.s2265c26f2");
    check_field_offset(lv, s2265c26f3, ABISELECT(13,9), "S2265C26.s2265c26f3");
  }
}
static Arrange_To_Call_Me vS2265C26(Test_S2265C26, "S2265C26", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2265C26 = {  "S2265C26", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C25  : S2265C26 {
};
//SIG(-1 S2265C25) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S2265C25()
{
  extern Class_Descriptor cd_S2265C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2265C25, buf);
    S2265C25 &lv = *(new (buf) S2265C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2265C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2265C25)");
    check_base_class_offset(lv, (S2265C26*), 0, "S2265C25");
    test_class_info(&lv, &cd_S2265C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2265C25(Test_S2265C25, "S2265C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2265C26;
static Base_Class bases_S2265C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2265C25 = {  "S2265C25", // class name
  bases_S2265C25, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C29_nt  {
  void *s2265c29f0;
  int s2265c29f1[2];
  ::S2265C28 s2265c29f2;
  void  mf2265c29(); // _ZN11S2265C29_nt9mf2265c29Ev
};
//SIG(-1 S2265C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2265C29_nt ::mf2265c29(){}

//skip512 S2265C29_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C38  {
  void  mf2265c38(); // _ZN8S2265C389mf2265c38Ev
};
//SIG(-1 S2265C38) C1{ m}


void  S2265C38 ::mf2265c38(){}

static void Test_S2265C38()
{
  {
    init_simple_test("S2265C38");
    S2265C38 lv;
    check2(sizeof(lv), 1, "sizeof(S2265C38)");
    check2(__alignof__(lv), 1, "__alignof__(S2265C38)");
  }
}
static Arrange_To_Call_Me vS2265C38(Test_S2265C38, "S2265C38", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2265C38[];
VTBL_ENTRY *P__ZTI8S2265C38 = _ZTI8S2265C38; 
Class_Descriptor cd_S2265C38 = {  "S2265C38", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2265C38),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C37  {
  void *s2265c37f0;
  int s2265c37f1[2];
  ::S2265C38 s2265c37f2;
  void  mf2265c37(); // _ZN8S2265C379mf2265c37Ev
};
//SIG(-1 S2265C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2265C37 ::mf2265c37(){}

static void Test_S2265C37()
{
  {
    init_simple_test("S2265C37");
    S2265C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2265C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2265C37)");
    check_field_offset(lv, s2265c37f0, 0, "S2265C37.s2265c37f0");
    check_field_offset(lv, s2265c37f1, ABISELECT(8,4), "S2265C37.s2265c37f1");
    check_field_offset(lv, s2265c37f2, ABISELECT(16,12), "S2265C37.s2265c37f2");
  }
}
static Arrange_To_Call_Me vS2265C37(Test_S2265C37, "S2265C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C3_nt  : S2265C4_nt {
  ::S2265C13_nt s2265c3f0;
  ::S2265C13_nt s2265c3f1;
  ::S2265C13_nt s2265c3f2;
  ::S2265C13_nt s2265c3f3;
  ::S2265C17_nt s2265c3f4;
  ::S2265C18_nt s2265c3f5;
  ::S2265C18_nt s2265c3f6;
  ::S2265C13_nt s2265c3f7;
  ::S2265C13_nt s2265c3f8;
  ::S2265C13_nt s2265c3f9;
  void *s2265c3f10;
  ::S2265C17_nt s2265c3f11;
  ::S2265C19_nt s2265c3f12;
  int s2265c3f13;
  void *s2265c3f14[7];
  ::S2265C22 s2265c3f15;
  int s2265c3f16:8;
  int s2265c3f17:8;
  int s2265c3f18:16;
  int s2265c3f19:16;
  int s2265c3f20:8;
  int s2265c3f21:8;
  int s2265c3f22:8;
  int s2265c3f23:32;
  int s2265c3f24:8;
  int s2265c3f25:4;
  int s2265c3f26:4;
  int s2265c3f27:4;
  int s2265c3f28:4;
  int s2265c3f29:4;
  int s2265c3f30:4;
  int s2265c3f31:4;
  int s2265c3f32:4;
  int s2265c3f33:4;
  int s2265c3f34:4;
  unsigned char s2265c3f35:1;
  unsigned char s2265c3f36:1;
  unsigned char s2265c3f37:1;
  unsigned char s2265c3f38:1;
  unsigned char s2265c3f39:1;
  unsigned char s2265c3f40:1;
  unsigned char s2265c3f41:1;
  unsigned char s2265c3f42:1;
  unsigned char s2265c3f43:1;
  unsigned char s2265c3f44:1;
  unsigned char s2265c3f45:1;
  unsigned char s2265c3f46:1;
  unsigned char s2265c3f47:1;
  unsigned char s2265c3f48:1;
  unsigned char s2265c3f49:1;
  unsigned char s2265c3f50:1;
  unsigned char s2265c3f51:1;
  unsigned char s2265c3f52:1;
  unsigned char s2265c3f53:1;
  unsigned char s2265c3f54:1;
  unsigned char s2265c3f55:1;
  unsigned char s2265c3f56:1;
  unsigned char s2265c3f57:1;
  unsigned char s2265c3f58:1;
  unsigned char s2265c3f59:1;
  unsigned char s2265c3f60:1;
  unsigned char s2265c3f61:1;
  unsigned char s2265c3f62:1;
  unsigned char s2265c3f63:1;
  unsigned char s2265c3f64:1;
  unsigned char s2265c3f65:1;
  unsigned char s2265c3f66:1;
  unsigned char s2265c3f67:1;
  unsigned char s2265c3f68:1;
  unsigned char s2265c3f69:1;
  unsigned char s2265c3f70:1;
  unsigned char s2265c3f71:1;
  unsigned char s2265c3f72:1;
  unsigned char s2265c3f73:1;
  unsigned char s2265c3f74:1;
  unsigned char s2265c3f75:1;
  int s2265c3f76[7];
  void *s2265c3f77[6];
  int s2265c3f78:8;
  int s2265c3f79:8;
  int s2265c3f80:8;
  int s2265c3f81:8;
  int s2265c3f82:8;
  int s2265c3f83:8;
  ::S2265C25 s2265c3f84;
  void *s2265c3f85[4];
  int s2265c3f86:8;
  int s2265c3f87:8;
  int s2265c3f88:8;
  int s2265c3f89:8;
  int s2265c3f90:8;
  int s2265c3f91:16;
  int s2265c3f92:16;
  int s2265c3f93:16;
  int s2265c3f94:4;
  int s2265c3f95:4;
  int s2265c3f96:4;
  int s2265c3f97:4;
  int s2265c3f98:4;
  int s2265c3f99:4;
  int s2265c3f100:4;
  int s2265c3f101:4;
  int s2265c3f102:4;
  int s2265c3f103:4;
  int s2265c3f104:4;
  int s2265c3f105:4;
  int s2265c3f106:8;
  int s2265c3f107:8;
  int s2265c3f108:8;
  void *s2265c3f109[7];
  ::S2265C29_nt s2265c3f110;
  void *s2265c3f111[2];
  int s2265c3f112:16;
  int s2265c3f113:16;
  ::S2265C25 s2265c3f114;
  ::S2265C29_nt s2265c3f115;
  ::S2265C37 s2265c3f116;
  void *s2265c3f117[2];
  int s2265c3f118:24;
  int s2265c3f119:8;
  void *s2265c3f120;
  virtual  ~S2265C3_nt(); // _ZN10S2265C3_ntD1Ev
  virtual void  v27(); // _ZN10S2265C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2265C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2265C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2265C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2265C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2265C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2265C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2265C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2265C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2265C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2265C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2265C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2265C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2265C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2265C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2265C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2265C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2265C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2265C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2265C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2265C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2265C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2265C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2265C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2265C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2265C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2265C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2265C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2265C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2265C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2265C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2265C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2265C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2265C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2265C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2265C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2265C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2265C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2265C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2265C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2265C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2265C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2265C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2265C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2265C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2265C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2265C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2265C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2265C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2265C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2265C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2265C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2265C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2265C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2265C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2265C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2265C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2265C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2265C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2265C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2265C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2265C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2265C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2265C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2265C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2265C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2265C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2265C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2265C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2265C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2265C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2265C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2265C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2265C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2265C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2265C3_nt4v102Ev
  virtual void  v103(); // _ZN10S2265C3_nt4v103Ev
  virtual void  v104(); // _ZN10S2265C3_nt4v104Ev
  S2265C3_nt(); // tgen
};
//SIG(-1 S2265C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S2265C3_nt ::~S2265C3_nt(){ note_dtor("S2265C3_nt", this);}
void  S2265C3_nt ::v27(){vfunc_called(this, "_ZN10S2265C3_nt3v27Ev");}
void  S2265C3_nt ::v28(){vfunc_called(this, "_ZN10S2265C3_nt3v28Ev");}
void  S2265C3_nt ::v29(){vfunc_called(this, "_ZN10S2265C3_nt3v29Ev");}
void  S2265C3_nt ::v30(){vfunc_called(this, "_ZN10S2265C3_nt3v30Ev");}
void  S2265C3_nt ::v31(){vfunc_called(this, "_ZN10S2265C3_nt3v31Ev");}
void  S2265C3_nt ::v32(){vfunc_called(this, "_ZN10S2265C3_nt3v32Ev");}
void  S2265C3_nt ::v33(){vfunc_called(this, "_ZN10S2265C3_nt3v33Ev");}
void  S2265C3_nt ::v34(){vfunc_called(this, "_ZN10S2265C3_nt3v34Ev");}
void  S2265C3_nt ::v35(){vfunc_called(this, "_ZN10S2265C3_nt3v35Ev");}
void  S2265C3_nt ::v36(){vfunc_called(this, "_ZN10S2265C3_nt3v36Ev");}
void  S2265C3_nt ::v37(){vfunc_called(this, "_ZN10S2265C3_nt3v37Ev");}
void  S2265C3_nt ::v38(){vfunc_called(this, "_ZN10S2265C3_nt3v38Ev");}
void  S2265C3_nt ::v39(){vfunc_called(this, "_ZN10S2265C3_nt3v39Ev");}
void  S2265C3_nt ::v40(){vfunc_called(this, "_ZN10S2265C3_nt3v40Ev");}
void  S2265C3_nt ::v41(){vfunc_called(this, "_ZN10S2265C3_nt3v41Ev");}
void  S2265C3_nt ::v42(){vfunc_called(this, "_ZN10S2265C3_nt3v42Ev");}
void  S2265C3_nt ::v43(){vfunc_called(this, "_ZN10S2265C3_nt3v43Ev");}
void  S2265C3_nt ::v44(){vfunc_called(this, "_ZN10S2265C3_nt3v44Ev");}
void  S2265C3_nt ::v45(){vfunc_called(this, "_ZN10S2265C3_nt3v45Ev");}
void  S2265C3_nt ::v46(){vfunc_called(this, "_ZN10S2265C3_nt3v46Ev");}
void  S2265C3_nt ::v47(){vfunc_called(this, "_ZN10S2265C3_nt3v47Ev");}
void  S2265C3_nt ::v48(){vfunc_called(this, "_ZN10S2265C3_nt3v48Ev");}
void  S2265C3_nt ::v49(){vfunc_called(this, "_ZN10S2265C3_nt3v49Ev");}
void  S2265C3_nt ::v50(){vfunc_called(this, "_ZN10S2265C3_nt3v50Ev");}
void  S2265C3_nt ::v51(){vfunc_called(this, "_ZN10S2265C3_nt3v51Ev");}
void  S2265C3_nt ::v52(){vfunc_called(this, "_ZN10S2265C3_nt3v52Ev");}
void  S2265C3_nt ::v53(){vfunc_called(this, "_ZN10S2265C3_nt3v53Ev");}
void  S2265C3_nt ::v54(){vfunc_called(this, "_ZN10S2265C3_nt3v54Ev");}
void  S2265C3_nt ::v55(){vfunc_called(this, "_ZN10S2265C3_nt3v55Ev");}
void  S2265C3_nt ::v56(){vfunc_called(this, "_ZN10S2265C3_nt3v56Ev");}
void  S2265C3_nt ::v57(){vfunc_called(this, "_ZN10S2265C3_nt3v57Ev");}
void  S2265C3_nt ::v58(){vfunc_called(this, "_ZN10S2265C3_nt3v58Ev");}
void  S2265C3_nt ::v59(){vfunc_called(this, "_ZN10S2265C3_nt3v59Ev");}
void  S2265C3_nt ::v60(){vfunc_called(this, "_ZN10S2265C3_nt3v60Ev");}
void  S2265C3_nt ::v61(){vfunc_called(this, "_ZN10S2265C3_nt3v61Ev");}
void  S2265C3_nt ::v62(){vfunc_called(this, "_ZN10S2265C3_nt3v62Ev");}
void  S2265C3_nt ::v63(){vfunc_called(this, "_ZN10S2265C3_nt3v63Ev");}
void  S2265C3_nt ::v64(){vfunc_called(this, "_ZN10S2265C3_nt3v64Ev");}
void  S2265C3_nt ::v65(){vfunc_called(this, "_ZN10S2265C3_nt3v65Ev");}
void  S2265C3_nt ::v66(){vfunc_called(this, "_ZN10S2265C3_nt3v66Ev");}
void  S2265C3_nt ::v67(){vfunc_called(this, "_ZN10S2265C3_nt3v67Ev");}
void  S2265C3_nt ::v68(){vfunc_called(this, "_ZN10S2265C3_nt3v68Ev");}
void  S2265C3_nt ::v69(){vfunc_called(this, "_ZN10S2265C3_nt3v69Ev");}
void  S2265C3_nt ::v70(){vfunc_called(this, "_ZN10S2265C3_nt3v70Ev");}
void  S2265C3_nt ::v71(){vfunc_called(this, "_ZN10S2265C3_nt3v71Ev");}
void  S2265C3_nt ::v72(){vfunc_called(this, "_ZN10S2265C3_nt3v72Ev");}
void  S2265C3_nt ::v73(){vfunc_called(this, "_ZN10S2265C3_nt3v73Ev");}
void  S2265C3_nt ::v74(){vfunc_called(this, "_ZN10S2265C3_nt3v74Ev");}
void  S2265C3_nt ::v75(){vfunc_called(this, "_ZN10S2265C3_nt3v75Ev");}
void  S2265C3_nt ::v76(){vfunc_called(this, "_ZN10S2265C3_nt3v76Ev");}
void  S2265C3_nt ::v77(){vfunc_called(this, "_ZN10S2265C3_nt3v77Ev");}
void  S2265C3_nt ::v78(){vfunc_called(this, "_ZN10S2265C3_nt3v78Ev");}
void  S2265C3_nt ::v79(){vfunc_called(this, "_ZN10S2265C3_nt3v79Ev");}
void  S2265C3_nt ::v80(){vfunc_called(this, "_ZN10S2265C3_nt3v80Ev");}
void  S2265C3_nt ::v81(){vfunc_called(this, "_ZN10S2265C3_nt3v81Ev");}
void  S2265C3_nt ::v82(){vfunc_called(this, "_ZN10S2265C3_nt3v82Ev");}
void  S2265C3_nt ::v83(){vfunc_called(this, "_ZN10S2265C3_nt3v83Ev");}
void  S2265C3_nt ::v84(){vfunc_called(this, "_ZN10S2265C3_nt3v84Ev");}
void  S2265C3_nt ::v85(){vfunc_called(this, "_ZN10S2265C3_nt3v85Ev");}
void  S2265C3_nt ::v86(){vfunc_called(this, "_ZN10S2265C3_nt3v86Ev");}
void  S2265C3_nt ::v87(){vfunc_called(this, "_ZN10S2265C3_nt3v87Ev");}
void  S2265C3_nt ::v88(){vfunc_called(this, "_ZN10S2265C3_nt3v88Ev");}
void  S2265C3_nt ::v89(){vfunc_called(this, "_ZN10S2265C3_nt3v89Ev");}
void  S2265C3_nt ::v90(){vfunc_called(this, "_ZN10S2265C3_nt3v90Ev");}
void  S2265C3_nt ::v91(){vfunc_called(this, "_ZN10S2265C3_nt3v91Ev");}
void  S2265C3_nt ::v92(){vfunc_called(this, "_ZN10S2265C3_nt3v92Ev");}
void  S2265C3_nt ::v93(){vfunc_called(this, "_ZN10S2265C3_nt3v93Ev");}
void  S2265C3_nt ::v94(){vfunc_called(this, "_ZN10S2265C3_nt3v94Ev");}
void  S2265C3_nt ::v95(){vfunc_called(this, "_ZN10S2265C3_nt3v95Ev");}
void  S2265C3_nt ::v96(){vfunc_called(this, "_ZN10S2265C3_nt3v96Ev");}
void  S2265C3_nt ::v97(){vfunc_called(this, "_ZN10S2265C3_nt3v97Ev");}
void  S2265C3_nt ::v98(){vfunc_called(this, "_ZN10S2265C3_nt3v98Ev");}
void  S2265C3_nt ::v99(){vfunc_called(this, "_ZN10S2265C3_nt3v99Ev");}
void  S2265C3_nt ::v100(){vfunc_called(this, "_ZN10S2265C3_nt4v100Ev");}
void  S2265C3_nt ::v101(){vfunc_called(this, "_ZN10S2265C3_nt4v101Ev");}
void  S2265C3_nt ::v102(){vfunc_called(this, "_ZN10S2265C3_nt4v102Ev");}
void  S2265C3_nt ::v103(){vfunc_called(this, "_ZN10S2265C3_nt4v103Ev");}
void  S2265C3_nt ::v104(){vfunc_called(this, "_ZN10S2265C3_nt4v104Ev");}
S2265C3_nt ::S2265C3_nt(){ note_ctor("S2265C3_nt", this);} // tgen

//skip512 S2265C3_nt

#else // __cplusplus

extern void _ZN10S2265C3_ntC1Ev();
extern void _ZN10S2265C3_ntD1Ev();
Name_Map name_map_S2265C3_nt[] = {
  NSPAIR(_ZN10S2265C3_ntC1Ev),
  NSPAIR(_ZN10S2265C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C4_nt;
extern VTBL_ENTRY _ZTI10S2265C4_nt[];
extern  VTBL_ENTRY _ZTV10S2265C4_nt[];
static Base_Class bases_S2265C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2265C3_nt[];
extern void _ZN10S2265C3_ntD1Ev();
extern void _ZN10S2265C3_ntD0Ev();
extern void _ZN10S2265C4_nt2v4Ev();
extern void _ZN10S2265C4_nt2v5Ev();
extern void _ZN10S2265C4_nt2v6Ev();
extern void _ZN10S2265C4_nt2v7Ev();
extern void _ZN10S2265C4_nt2v8Ev();
extern void _ZN10S2265C4_nt2v9Ev();
extern void _ZN10S2265C4_nt3v10Ev();
extern void _ZN10S2265C4_nt3v11Ev();
extern void _ZN10S2265C4_nt3v12Ev();
extern void _ZN10S2265C4_nt3v13Ev();
extern void _ZN10S2265C4_nt3v14Ev();
extern void _ZN10S2265C4_nt3v15Ev();
extern void _ZN10S2265C4_nt3v16Ev();
extern void _ZN10S2265C4_nt3v17Ev();
extern void _ZN10S2265C4_nt3v18Ev();
extern void _ZN10S2265C4_nt3v19Ev();
extern void _ZN10S2265C4_nt3v20Ev();
extern void _ZN10S2265C4_nt3v21Ev();
extern void _ZN10S2265C4_nt3v22Ev();
extern void _ZN10S2265C4_nt3v23Ev();
extern void _ZN10S2265C4_nt3v24Ev();
extern void _ZN10S2265C4_nt3v25Ev();
extern void _ZN10S2265C4_nt3v26Ev();
extern void _ZN10S2265C3_nt3v27Ev();
extern void _ZN10S2265C3_nt3v28Ev();
extern void _ZN10S2265C3_nt3v29Ev();
extern void _ZN10S2265C3_nt3v30Ev();
extern void _ZN10S2265C3_nt3v31Ev();
extern void _ZN10S2265C3_nt3v32Ev();
extern void _ZN10S2265C3_nt3v33Ev();
extern void _ZN10S2265C3_nt3v34Ev();
extern void _ZN10S2265C3_nt3v35Ev();
extern void _ZN10S2265C3_nt3v36Ev();
extern void _ZN10S2265C3_nt3v37Ev();
extern void _ZN10S2265C3_nt3v38Ev();
extern void _ZN10S2265C3_nt3v39Ev();
extern void _ZN10S2265C3_nt3v40Ev();
extern void _ZN10S2265C3_nt3v41Ev();
extern void _ZN10S2265C3_nt3v42Ev();
extern void _ZN10S2265C3_nt3v43Ev();
extern void _ZN10S2265C3_nt3v44Ev();
extern void _ZN10S2265C3_nt3v45Ev();
extern void _ZN10S2265C3_nt3v46Ev();
extern void _ZN10S2265C3_nt3v47Ev();
extern void _ZN10S2265C3_nt3v48Ev();
extern void _ZN10S2265C3_nt3v49Ev();
extern void _ZN10S2265C3_nt3v50Ev();
extern void _ZN10S2265C3_nt3v51Ev();
extern void _ZN10S2265C3_nt3v52Ev();
extern void _ZN10S2265C3_nt3v53Ev();
extern void _ZN10S2265C3_nt3v54Ev();
extern void _ZN10S2265C3_nt3v55Ev();
extern void _ZN10S2265C3_nt3v56Ev();
extern void _ZN10S2265C3_nt3v57Ev();
extern void _ZN10S2265C3_nt3v58Ev();
extern void _ZN10S2265C3_nt3v59Ev();
extern void _ZN10S2265C3_nt3v60Ev();
extern void _ZN10S2265C3_nt3v61Ev();
extern void _ZN10S2265C3_nt3v62Ev();
extern void _ZN10S2265C3_nt3v63Ev();
extern void _ZN10S2265C3_nt3v64Ev();
extern void _ZN10S2265C3_nt3v65Ev();
extern void _ZN10S2265C3_nt3v66Ev();
extern void _ZN10S2265C3_nt3v67Ev();
extern void _ZN10S2265C3_nt3v68Ev();
extern void _ZN10S2265C3_nt3v69Ev();
extern void _ZN10S2265C3_nt3v70Ev();
extern void _ZN10S2265C3_nt3v71Ev();
extern void _ZN10S2265C3_nt3v72Ev();
extern void _ZN10S2265C3_nt3v73Ev();
extern void _ZN10S2265C3_nt3v74Ev();
extern void _ZN10S2265C3_nt3v75Ev();
extern void _ZN10S2265C3_nt3v76Ev();
extern void _ZN10S2265C3_nt3v77Ev();
extern void _ZN10S2265C3_nt3v78Ev();
extern void _ZN10S2265C3_nt3v79Ev();
extern void _ZN10S2265C3_nt3v80Ev();
extern void _ZN10S2265C3_nt3v81Ev();
extern void _ZN10S2265C3_nt3v82Ev();
extern void _ZN10S2265C3_nt3v83Ev();
extern void _ZN10S2265C3_nt3v84Ev();
extern void _ZN10S2265C3_nt3v85Ev();
extern void _ZN10S2265C3_nt3v86Ev();
extern void _ZN10S2265C3_nt3v87Ev();
extern void _ZN10S2265C3_nt3v88Ev();
extern void _ZN10S2265C3_nt3v89Ev();
extern void _ZN10S2265C3_nt3v90Ev();
extern void _ZN10S2265C3_nt3v91Ev();
extern void _ZN10S2265C3_nt3v92Ev();
extern void _ZN10S2265C3_nt3v93Ev();
extern void _ZN10S2265C3_nt3v94Ev();
extern void _ZN10S2265C3_nt3v95Ev();
extern void _ZN10S2265C3_nt3v96Ev();
extern void _ZN10S2265C3_nt3v97Ev();
extern void _ZN10S2265C3_nt3v98Ev();
extern void _ZN10S2265C3_nt3v99Ev();
extern void _ZN10S2265C3_nt4v100Ev();
extern void _ZN10S2265C3_nt4v101Ev();
extern void _ZN10S2265C3_nt4v102Ev();
extern void _ZN10S2265C3_nt4v103Ev();
extern void _ZN10S2265C3_nt4v104Ev();
static  VTBL_ENTRY vtc_S2265C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2265C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2265C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v104Ev,
};
extern VTBL_ENTRY _ZTI10S2265C3_nt[];
VTBL_ENTRY *P__ZTI10S2265C3_nt = _ZTI10S2265C3_nt; 
extern  VTBL_ENTRY _ZTV10S2265C3_nt[];
Class_Descriptor cd_S2265C3_nt = {  "S2265C3_nt", // class name
  bases_S2265C3_nt, 1,
  &(vtc_S2265C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2265C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2265C3_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C2_nt  : S2265C3_nt {
  void *s2265c2f0;
  virtual  ~S2265C2_nt(); // _ZN10S2265C2_ntD1Ev
  virtual void  v105(); // _ZN10S2265C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2265C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2265C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2265C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2265C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2265C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2265C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2265C2_nt4v112Ev
  virtual void  v113(); // _ZN10S2265C2_nt4v113Ev
  virtual void  v114(); // _ZN10S2265C2_nt4v114Ev
  S2265C2_nt(); // tgen
};
//SIG(-1 S2265C2_nt) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S2265C2_nt ::~S2265C2_nt(){ note_dtor("S2265C2_nt", this);}
void  S2265C2_nt ::v105(){vfunc_called(this, "_ZN10S2265C2_nt4v105Ev");}
void  S2265C2_nt ::v106(){vfunc_called(this, "_ZN10S2265C2_nt4v106Ev");}
void  S2265C2_nt ::v107(){vfunc_called(this, "_ZN10S2265C2_nt4v107Ev");}
void  S2265C2_nt ::v108(){vfunc_called(this, "_ZN10S2265C2_nt4v108Ev");}
void  S2265C2_nt ::v109(){vfunc_called(this, "_ZN10S2265C2_nt4v109Ev");}
void  S2265C2_nt ::v110(){vfunc_called(this, "_ZN10S2265C2_nt4v110Ev");}
void  S2265C2_nt ::v111(){vfunc_called(this, "_ZN10S2265C2_nt4v111Ev");}
void  S2265C2_nt ::v112(){vfunc_called(this, "_ZN10S2265C2_nt4v112Ev");}
void  S2265C2_nt ::v113(){vfunc_called(this, "_ZN10S2265C2_nt4v113Ev");}
void  S2265C2_nt ::v114(){vfunc_called(this, "_ZN10S2265C2_nt4v114Ev");}
S2265C2_nt ::S2265C2_nt(){ note_ctor("S2265C2_nt", this);} // tgen

//skip512 S2265C2_nt

#else // __cplusplus

extern void _ZN10S2265C2_ntC1Ev();
extern void _ZN10S2265C2_ntD1Ev();
Name_Map name_map_S2265C2_nt[] = {
  NSPAIR(_ZN10S2265C2_ntC1Ev),
  NSPAIR(_ZN10S2265C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C4_nt;
extern VTBL_ENTRY _ZTI10S2265C4_nt[];
extern  VTBL_ENTRY _ZTV10S2265C4_nt[];
extern Class_Descriptor cd_S2265C3_nt;
extern VTBL_ENTRY _ZTI10S2265C3_nt[];
extern  VTBL_ENTRY _ZTV10S2265C3_nt[];
static Base_Class bases_S2265C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2265C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2265C2_nt[];
extern void _ZN10S2265C2_ntD1Ev();
extern void _ZN10S2265C2_ntD0Ev();
extern void _ZN10S2265C4_nt2v4Ev();
extern void _ZN10S2265C4_nt2v5Ev();
extern void _ZN10S2265C4_nt2v6Ev();
extern void _ZN10S2265C4_nt2v7Ev();
extern void _ZN10S2265C4_nt2v8Ev();
extern void _ZN10S2265C4_nt2v9Ev();
extern void _ZN10S2265C4_nt3v10Ev();
extern void _ZN10S2265C4_nt3v11Ev();
extern void _ZN10S2265C4_nt3v12Ev();
extern void _ZN10S2265C4_nt3v13Ev();
extern void _ZN10S2265C4_nt3v14Ev();
extern void _ZN10S2265C4_nt3v15Ev();
extern void _ZN10S2265C4_nt3v16Ev();
extern void _ZN10S2265C4_nt3v17Ev();
extern void _ZN10S2265C4_nt3v18Ev();
extern void _ZN10S2265C4_nt3v19Ev();
extern void _ZN10S2265C4_nt3v20Ev();
extern void _ZN10S2265C4_nt3v21Ev();
extern void _ZN10S2265C4_nt3v22Ev();
extern void _ZN10S2265C4_nt3v23Ev();
extern void _ZN10S2265C4_nt3v24Ev();
extern void _ZN10S2265C4_nt3v25Ev();
extern void _ZN10S2265C4_nt3v26Ev();
extern void _ZN10S2265C3_nt3v27Ev();
extern void _ZN10S2265C3_nt3v28Ev();
extern void _ZN10S2265C3_nt3v29Ev();
extern void _ZN10S2265C3_nt3v30Ev();
extern void _ZN10S2265C3_nt3v31Ev();
extern void _ZN10S2265C3_nt3v32Ev();
extern void _ZN10S2265C3_nt3v33Ev();
extern void _ZN10S2265C3_nt3v34Ev();
extern void _ZN10S2265C3_nt3v35Ev();
extern void _ZN10S2265C3_nt3v36Ev();
extern void _ZN10S2265C3_nt3v37Ev();
extern void _ZN10S2265C3_nt3v38Ev();
extern void _ZN10S2265C3_nt3v39Ev();
extern void _ZN10S2265C3_nt3v40Ev();
extern void _ZN10S2265C3_nt3v41Ev();
extern void _ZN10S2265C3_nt3v42Ev();
extern void _ZN10S2265C3_nt3v43Ev();
extern void _ZN10S2265C3_nt3v44Ev();
extern void _ZN10S2265C3_nt3v45Ev();
extern void _ZN10S2265C3_nt3v46Ev();
extern void _ZN10S2265C3_nt3v47Ev();
extern void _ZN10S2265C3_nt3v48Ev();
extern void _ZN10S2265C3_nt3v49Ev();
extern void _ZN10S2265C3_nt3v50Ev();
extern void _ZN10S2265C3_nt3v51Ev();
extern void _ZN10S2265C3_nt3v52Ev();
extern void _ZN10S2265C3_nt3v53Ev();
extern void _ZN10S2265C3_nt3v54Ev();
extern void _ZN10S2265C3_nt3v55Ev();
extern void _ZN10S2265C3_nt3v56Ev();
extern void _ZN10S2265C3_nt3v57Ev();
extern void _ZN10S2265C3_nt3v58Ev();
extern void _ZN10S2265C3_nt3v59Ev();
extern void _ZN10S2265C3_nt3v60Ev();
extern void _ZN10S2265C3_nt3v61Ev();
extern void _ZN10S2265C3_nt3v62Ev();
extern void _ZN10S2265C3_nt3v63Ev();
extern void _ZN10S2265C3_nt3v64Ev();
extern void _ZN10S2265C3_nt3v65Ev();
extern void _ZN10S2265C3_nt3v66Ev();
extern void _ZN10S2265C3_nt3v67Ev();
extern void _ZN10S2265C3_nt3v68Ev();
extern void _ZN10S2265C3_nt3v69Ev();
extern void _ZN10S2265C3_nt3v70Ev();
extern void _ZN10S2265C3_nt3v71Ev();
extern void _ZN10S2265C3_nt3v72Ev();
extern void _ZN10S2265C3_nt3v73Ev();
extern void _ZN10S2265C3_nt3v74Ev();
extern void _ZN10S2265C3_nt3v75Ev();
extern void _ZN10S2265C3_nt3v76Ev();
extern void _ZN10S2265C3_nt3v77Ev();
extern void _ZN10S2265C3_nt3v78Ev();
extern void _ZN10S2265C3_nt3v79Ev();
extern void _ZN10S2265C3_nt3v80Ev();
extern void _ZN10S2265C3_nt3v81Ev();
extern void _ZN10S2265C3_nt3v82Ev();
extern void _ZN10S2265C3_nt3v83Ev();
extern void _ZN10S2265C3_nt3v84Ev();
extern void _ZN10S2265C3_nt3v85Ev();
extern void _ZN10S2265C3_nt3v86Ev();
extern void _ZN10S2265C3_nt3v87Ev();
extern void _ZN10S2265C3_nt3v88Ev();
extern void _ZN10S2265C3_nt3v89Ev();
extern void _ZN10S2265C3_nt3v90Ev();
extern void _ZN10S2265C3_nt3v91Ev();
extern void _ZN10S2265C3_nt3v92Ev();
extern void _ZN10S2265C3_nt3v93Ev();
extern void _ZN10S2265C3_nt3v94Ev();
extern void _ZN10S2265C3_nt3v95Ev();
extern void _ZN10S2265C3_nt3v96Ev();
extern void _ZN10S2265C3_nt3v97Ev();
extern void _ZN10S2265C3_nt3v98Ev();
extern void _ZN10S2265C3_nt3v99Ev();
extern void _ZN10S2265C3_nt4v100Ev();
extern void _ZN10S2265C3_nt4v101Ev();
extern void _ZN10S2265C3_nt4v102Ev();
extern void _ZN10S2265C3_nt4v103Ev();
extern void _ZN10S2265C3_nt4v104Ev();
extern void _ZN10S2265C2_nt4v105Ev();
extern void _ZN10S2265C2_nt4v106Ev();
extern void _ZN10S2265C2_nt4v107Ev();
extern void _ZN10S2265C2_nt4v108Ev();
extern void _ZN10S2265C2_nt4v109Ev();
extern void _ZN10S2265C2_nt4v110Ev();
extern void _ZN10S2265C2_nt4v111Ev();
extern void _ZN10S2265C2_nt4v112Ev();
extern void _ZN10S2265C2_nt4v113Ev();
extern void _ZN10S2265C2_nt4v114Ev();
static  VTBL_ENTRY vtc_S2265C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2265C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2265C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v114Ev,
};
extern VTBL_ENTRY _ZTI10S2265C2_nt[];
VTBL_ENTRY *P__ZTI10S2265C2_nt = _ZTI10S2265C2_nt; 
extern  VTBL_ENTRY _ZTV10S2265C2_nt[];
Class_Descriptor cd_S2265C2_nt = {  "S2265C2_nt", // class name
  bases_S2265C2_nt, 2,
  &(vtc_S2265C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2265C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2265C2_nt),115, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2265C1  : S2265C2_nt {
  int s2265c1f0;
  virtual  ~S2265C1(); // _ZN7S2265C1D1Ev
  virtual void  v1(); // _ZN7S2265C12v1Ev
  virtual void  v2(); // _ZN7S2265C12v2Ev
  virtual void  v3(); // _ZN7S2265C12v3Ev
  S2265C1(); // tgen
};
//SIG(1 S2265C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 Fi} vd v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} Fi Fp[7] FC15{ m Fp Fi FC14 FC16{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC16 FC19{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC19} Fp[2] Fi:16 Fi:16 FC17 FC20 FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fp} vd v1 v2 v3 Fi}


 S2265C1 ::~S2265C1(){ note_dtor("S2265C1", this);}
void  S2265C1 ::v1(){vfunc_called(this, "_ZN7S2265C12v1Ev");}
void  S2265C1 ::v2(){vfunc_called(this, "_ZN7S2265C12v2Ev");}
void  S2265C1 ::v3(){vfunc_called(this, "_ZN7S2265C12v3Ev");}
S2265C1 ::S2265C1(){ note_ctor("S2265C1", this);} // tgen

static void Test_S2265C1()
{
  extern Class_Descriptor cd_S2265C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(107,161)];
    init_test(&cd_S2265C1, buf);
    S2265C1 *dp, &lv = *(dp=new (buf) S2265C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,640), "sizeof(S2265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2265C1)");
    check_base_class_offset(lv, (S2265C4_nt*)(S2265C3_nt*)(S2265C2_nt*), 0, "S2265C1");
    check_base_class_offset(lv, (S2265C3_nt*)(S2265C2_nt*), 0, "S2265C1");
    check_base_class_offset(lv, (S2265C2_nt*), 0, "S2265C1");
    check_field_offset(lv, s2265c1f0, ABISELECT(840,636), "S2265C1.s2265c1f0");
    test_class_info(&lv, &cd_S2265C1);
    dp->~S2265C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2265C1(Test_S2265C1, "S2265C1", ABISELECT(848,640));

#else // __cplusplus

extern void _ZN7S2265C1C1Ev();
extern void _ZN7S2265C1D1Ev();
Name_Map name_map_S2265C1[] = {
  NSPAIR(_ZN7S2265C1C1Ev),
  NSPAIR(_ZN7S2265C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C4_nt;
extern VTBL_ENTRY _ZTI10S2265C4_nt[];
extern  VTBL_ENTRY _ZTV10S2265C4_nt[];
extern Class_Descriptor cd_S2265C3_nt;
extern VTBL_ENTRY _ZTI10S2265C3_nt[];
extern  VTBL_ENTRY _ZTV10S2265C3_nt[];
extern Class_Descriptor cd_S2265C2_nt;
extern VTBL_ENTRY _ZTI10S2265C2_nt[];
extern  VTBL_ENTRY _ZTV10S2265C2_nt[];
static Base_Class bases_S2265C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2265C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2265C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2265C1[];
extern void _ZN7S2265C1D1Ev();
extern void _ZN7S2265C1D0Ev();
extern void _ZN10S2265C4_nt2v4Ev();
extern void _ZN10S2265C4_nt2v5Ev();
extern void _ZN10S2265C4_nt2v6Ev();
extern void _ZN10S2265C4_nt2v7Ev();
extern void _ZN10S2265C4_nt2v8Ev();
extern void _ZN10S2265C4_nt2v9Ev();
extern void _ZN10S2265C4_nt3v10Ev();
extern void _ZN10S2265C4_nt3v11Ev();
extern void _ZN10S2265C4_nt3v12Ev();
extern void _ZN10S2265C4_nt3v13Ev();
extern void _ZN10S2265C4_nt3v14Ev();
extern void _ZN10S2265C4_nt3v15Ev();
extern void _ZN10S2265C4_nt3v16Ev();
extern void _ZN10S2265C4_nt3v17Ev();
extern void _ZN10S2265C4_nt3v18Ev();
extern void _ZN10S2265C4_nt3v19Ev();
extern void _ZN10S2265C4_nt3v20Ev();
extern void _ZN10S2265C4_nt3v21Ev();
extern void _ZN10S2265C4_nt3v22Ev();
extern void _ZN10S2265C4_nt3v23Ev();
extern void _ZN10S2265C4_nt3v24Ev();
extern void _ZN10S2265C4_nt3v25Ev();
extern void _ZN10S2265C4_nt3v26Ev();
extern void _ZN10S2265C3_nt3v27Ev();
extern void _ZN10S2265C3_nt3v28Ev();
extern void _ZN10S2265C3_nt3v29Ev();
extern void _ZN10S2265C3_nt3v30Ev();
extern void _ZN10S2265C3_nt3v31Ev();
extern void _ZN10S2265C3_nt3v32Ev();
extern void _ZN10S2265C3_nt3v33Ev();
extern void _ZN10S2265C3_nt3v34Ev();
extern void _ZN10S2265C3_nt3v35Ev();
extern void _ZN10S2265C3_nt3v36Ev();
extern void _ZN10S2265C3_nt3v37Ev();
extern void _ZN10S2265C3_nt3v38Ev();
extern void _ZN10S2265C3_nt3v39Ev();
extern void _ZN10S2265C3_nt3v40Ev();
extern void _ZN10S2265C3_nt3v41Ev();
extern void _ZN10S2265C3_nt3v42Ev();
extern void _ZN10S2265C3_nt3v43Ev();
extern void _ZN10S2265C3_nt3v44Ev();
extern void _ZN10S2265C3_nt3v45Ev();
extern void _ZN10S2265C3_nt3v46Ev();
extern void _ZN10S2265C3_nt3v47Ev();
extern void _ZN10S2265C3_nt3v48Ev();
extern void _ZN10S2265C3_nt3v49Ev();
extern void _ZN10S2265C3_nt3v50Ev();
extern void _ZN10S2265C3_nt3v51Ev();
extern void _ZN10S2265C3_nt3v52Ev();
extern void _ZN10S2265C3_nt3v53Ev();
extern void _ZN10S2265C3_nt3v54Ev();
extern void _ZN10S2265C3_nt3v55Ev();
extern void _ZN10S2265C3_nt3v56Ev();
extern void _ZN10S2265C3_nt3v57Ev();
extern void _ZN10S2265C3_nt3v58Ev();
extern void _ZN10S2265C3_nt3v59Ev();
extern void _ZN10S2265C3_nt3v60Ev();
extern void _ZN10S2265C3_nt3v61Ev();
extern void _ZN10S2265C3_nt3v62Ev();
extern void _ZN10S2265C3_nt3v63Ev();
extern void _ZN10S2265C3_nt3v64Ev();
extern void _ZN10S2265C3_nt3v65Ev();
extern void _ZN10S2265C3_nt3v66Ev();
extern void _ZN10S2265C3_nt3v67Ev();
extern void _ZN10S2265C3_nt3v68Ev();
extern void _ZN10S2265C3_nt3v69Ev();
extern void _ZN10S2265C3_nt3v70Ev();
extern void _ZN10S2265C3_nt3v71Ev();
extern void _ZN10S2265C3_nt3v72Ev();
extern void _ZN10S2265C3_nt3v73Ev();
extern void _ZN10S2265C3_nt3v74Ev();
extern void _ZN10S2265C3_nt3v75Ev();
extern void _ZN10S2265C3_nt3v76Ev();
extern void _ZN10S2265C3_nt3v77Ev();
extern void _ZN10S2265C3_nt3v78Ev();
extern void _ZN10S2265C3_nt3v79Ev();
extern void _ZN10S2265C3_nt3v80Ev();
extern void _ZN10S2265C3_nt3v81Ev();
extern void _ZN10S2265C3_nt3v82Ev();
extern void _ZN10S2265C3_nt3v83Ev();
extern void _ZN10S2265C3_nt3v84Ev();
extern void _ZN10S2265C3_nt3v85Ev();
extern void _ZN10S2265C3_nt3v86Ev();
extern void _ZN10S2265C3_nt3v87Ev();
extern void _ZN10S2265C3_nt3v88Ev();
extern void _ZN10S2265C3_nt3v89Ev();
extern void _ZN10S2265C3_nt3v90Ev();
extern void _ZN10S2265C3_nt3v91Ev();
extern void _ZN10S2265C3_nt3v92Ev();
extern void _ZN10S2265C3_nt3v93Ev();
extern void _ZN10S2265C3_nt3v94Ev();
extern void _ZN10S2265C3_nt3v95Ev();
extern void _ZN10S2265C3_nt3v96Ev();
extern void _ZN10S2265C3_nt3v97Ev();
extern void _ZN10S2265C3_nt3v98Ev();
extern void _ZN10S2265C3_nt3v99Ev();
extern void _ZN10S2265C3_nt4v100Ev();
extern void _ZN10S2265C3_nt4v101Ev();
extern void _ZN10S2265C3_nt4v102Ev();
extern void _ZN10S2265C3_nt4v103Ev();
extern void _ZN10S2265C3_nt4v104Ev();
extern void _ZN10S2265C2_nt4v105Ev();
extern void _ZN10S2265C2_nt4v106Ev();
extern void _ZN10S2265C2_nt4v107Ev();
extern void _ZN10S2265C2_nt4v108Ev();
extern void _ZN10S2265C2_nt4v109Ev();
extern void _ZN10S2265C2_nt4v110Ev();
extern void _ZN10S2265C2_nt4v111Ev();
extern void _ZN10S2265C2_nt4v112Ev();
extern void _ZN10S2265C2_nt4v113Ev();
extern void _ZN10S2265C2_nt4v114Ev();
extern void _ZN7S2265C12v1Ev();
extern void _ZN7S2265C12v2Ev();
extern void _ZN7S2265C12v3Ev();
static  VTBL_ENTRY vtc_S2265C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2265C1[0]),
  (VTBL_ENTRY)&_ZN7S2265C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2265C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2265C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2265C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2265C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN7S2265C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2265C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2265C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2265C1[];
extern  VTBL_ENTRY _ZTV7S2265C1[];
Class_Descriptor cd_S2265C1 = {  "S2265C1", // class name
  bases_S2265C1, 3,
  &(vtc_S2265C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(848,640), // object size
  NSPAIRA(_ZTI7S2265C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2265C1),118, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C3  {
  char s5217c3f0[12];
  void *s5217c3f1[3];
  int s5217c3f2;
  virtual  ~S5217C3(); // _ZN7S5217C3D1Ev
  virtual void  v5(); // _ZN7S5217C32v5Ev
  S5217C3(); // tgen
};
//SIG(-1 S5217C3) C1{ vd v1 Fc[12] Fp[3] Fi}


 S5217C3 ::~S5217C3(){ note_dtor("S5217C3", this);}
void  S5217C3 ::v5(){vfunc_called(this, "_ZN7S5217C32v5Ev");}
S5217C3 ::S5217C3(){ note_ctor("S5217C3", this);} // tgen

static void Test_S5217C3()
{
  extern Class_Descriptor cd_S5217C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S5217C3, buf);
    S5217C3 *dp, &lv = *(dp=new (buf) S5217C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S5217C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C3)");
    check_field_offset(lv, s5217c3f0, ABISELECT(8,4), "S5217C3.s5217c3f0");
    check_field_offset(lv, s5217c3f1, ABISELECT(24,16), "S5217C3.s5217c3f1");
    check_field_offset(lv, s5217c3f2, ABISELECT(48,28), "S5217C3.s5217c3f2");
    test_class_info(&lv, &cd_S5217C3);
    dp->~S5217C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C3(Test_S5217C3, "S5217C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S5217C3C1Ev();
extern void _ZN7S5217C3D1Ev();
Name_Map name_map_S5217C3[] = {
  NSPAIR(_ZN7S5217C3C1Ev),
  NSPAIR(_ZN7S5217C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5217C3[];
extern void _ZN7S5217C3D1Ev();
extern void _ZN7S5217C3D0Ev();
extern void _ZN7S5217C32v5Ev();
static  VTBL_ENTRY vtc_S5217C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5217C3[0]),
  (VTBL_ENTRY)&_ZN7S5217C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5217C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5217C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S5217C3[];
extern  VTBL_ENTRY _ZTV7S5217C3[];
Class_Descriptor cd_S5217C3 = {  "S5217C3", // class name
  0,0,//no base classes
  &(vtc_S5217C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S5217C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5217C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C7_nt  {
};
//SIG(-1 S5217C7_nt) C1{}



//skip512 S5217C7_nt

#else // __cplusplus

Class_Descriptor cd_S5217C7_nt = {  "S5217C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C6_nt  : S5217C7_nt {
};
//SIG(-1 S5217C6_nt) C1{ BC2{}}



//skip512 S5217C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
static Base_Class bases_S5217C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C6_nt = {  "S5217C6_nt", // class name
  bases_S5217C6_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C9  {
};
//SIG(-1 S5217C9) C1{}



static void Test_S5217C9()
{
  {
    init_simple_test("S5217C9");
    S5217C9 lv;
    check2(sizeof(lv), 1, "sizeof(S5217C9)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C9)");
  }
}
static Arrange_To_Call_Me vS5217C9(Test_S5217C9, "S5217C9", 1);

#else // __cplusplus

Class_Descriptor cd_S5217C9 = {  "S5217C9", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C8  : S5217C9 {
};
//SIG(-1 S5217C8) C1{ BC2{}}



static void Test_S5217C8()
{
  extern Class_Descriptor cd_S5217C8;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C8, buf);
    S5217C8 &lv = *(new (buf) S5217C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C8)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C8)");
    check_base_class_offset(lv, (S5217C9*), 0, "S5217C8");
    test_class_info(&lv, &cd_S5217C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C8(Test_S5217C8, "S5217C8", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C9;
static Base_Class bases_S5217C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C8 = {  "S5217C8", // class name
  bases_S5217C8, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C5_nt  : S5217C6_nt {
  ::S5217C8 s5217c5f0;
};
//SIG(-1 S5217C5_nt) C1{ BC2{ BC3{}} FC4{ BC5{}}}



//skip512 S5217C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C6_nt;
static Base_Class bases_S5217C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C5_nt = {  "S5217C5_nt", // class name
  bases_S5217C5_nt, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S5217C10_nt  {
  char s5217c10f0[16];
  void *s5217c10f1;
};
//SIG(1 S5217C10_nt) U1{ Fc[16] Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S5217C4_nt  : S5217C5_nt {
  ::S5217C10_nt s5217c4f0;
  int s5217c4f1;
  int s5217c4f2;
};
//SIG(-1 S5217C4_nt) C1{ BC2{ BC3{ BC4{}} FC5{ BC6{}}} FU7{ Fc[16] Fp} Fi Fi}



//skip512 S5217C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C6_nt;
extern Class_Descriptor cd_S5217C5_nt;
static Base_Class bases_S5217C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5217C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C2  : S5217C3 {
  char s5217c2f0[12];
  int s5217c2f1;
  ::S5217C4_nt s5217c2f2;
  virtual  ~S5217C2(); // _ZN7S5217C2D1Ev
  virtual void  v6(); // _ZN7S5217C22v6Ev
  S5217C2(); // tgen
};
//SIG(-1 S5217C2) C1{ BC2{ vd v2 Fc[12] Fp[3] Fi} vd v1 Fc[12] Fi FC3{ BC4{ BC5{ BC6{}} FC7{ BC8{}}} FU9{ Fc[16] Fp} Fi Fi}}


 S5217C2 ::~S5217C2(){ note_dtor("S5217C2", this);}
void  S5217C2 ::v6(){vfunc_called(this, "_ZN7S5217C22v6Ev");}
S5217C2 ::S5217C2(){ note_ctor("S5217C2", this);} // tgen

static void Test_S5217C2()
{
  extern Class_Descriptor cd_S5217C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S5217C2, buf);
    S5217C2 *dp, &lv = *(dp=new (buf) S5217C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S5217C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C2)");
    check_base_class_offset(lv, (S5217C3*), 0, "S5217C2");
    check_field_offset(lv, s5217c2f0, ABISELECT(52,32), "S5217C2.s5217c2f0");
    check_field_offset(lv, s5217c2f1, ABISELECT(64,44), "S5217C2.s5217c2f1");
    check_field_offset(lv, s5217c2f2, ABISELECT(72,48), "S5217C2.s5217c2f2");
    test_class_info(&lv, &cd_S5217C2);
    dp->~S5217C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C2(Test_S5217C2, "S5217C2", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S5217C2C1Ev();
extern void _ZN7S5217C2D1Ev();
Name_Map name_map_S5217C2[] = {
  NSPAIR(_ZN7S5217C2C1Ev),
  NSPAIR(_ZN7S5217C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C3;
extern VTBL_ENTRY _ZTI7S5217C3[];
extern  VTBL_ENTRY _ZTV7S5217C3[];
static Base_Class bases_S5217C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5217C2[];
extern void _ZN7S5217C2D1Ev();
extern void _ZN7S5217C2D0Ev();
extern void _ZN7S5217C32v5Ev();
extern void _ZN7S5217C22v6Ev();
static  VTBL_ENTRY vtc_S5217C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5217C2[0]),
  (VTBL_ENTRY)&_ZN7S5217C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5217C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5217C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5217C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S5217C2[];
extern  VTBL_ENTRY _ZTV7S5217C2[];
Class_Descriptor cd_S5217C2 = {  "S5217C2", // class name
  bases_S5217C2, 1,
  &(vtc_S5217C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S5217C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5217C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C11_nt  {
  virtual  ~S5217C11_nt(); // _ZN11S5217C11_ntD1Ev
  virtual void  v7(); // _ZN11S5217C11_nt2v7Ev
  S5217C11_nt(); // tgen
};
//SIG(-1 S5217C11_nt) C1{ vd v1}


 S5217C11_nt ::~S5217C11_nt(){ note_dtor("S5217C11_nt", this);}
void  S5217C11_nt ::v7(){vfunc_called(this, "_ZN11S5217C11_nt2v7Ev");}
S5217C11_nt ::S5217C11_nt(){ note_ctor("S5217C11_nt", this);} // tgen

//skip512 S5217C11_nt

#else // __cplusplus

extern void _ZN11S5217C11_ntC1Ev();
extern void _ZN11S5217C11_ntD1Ev();
Name_Map name_map_S5217C11_nt[] = {
  NSPAIR(_ZN11S5217C11_ntC1Ev),
  NSPAIR(_ZN11S5217C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S5217C11_nt[];
extern void _ZN11S5217C11_ntD1Ev();
extern void _ZN11S5217C11_ntD0Ev();
extern void _ZN11S5217C11_nt2v7Ev();
static  VTBL_ENTRY vtc_S5217C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S5217C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S5217C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S5217C11_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S5217C11_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI11S5217C11_nt[];
VTBL_ENTRY *P__ZTI11S5217C11_nt = _ZTI11S5217C11_nt; 
extern  VTBL_ENTRY _ZTV11S5217C11_nt[];
Class_Descriptor cd_S5217C11_nt = {  "S5217C11_nt", // class name
  0,0,//no base classes
  &(vtc_S5217C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S5217C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S5217C11_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C12_nt  {
  virtual  ~S5217C12_nt(); // _ZN11S5217C12_ntD1Ev
  virtual void  v8(); // _ZN11S5217C12_nt2v8Ev
  virtual void  v9(); // _ZN11S5217C12_nt2v9Ev
  virtual void  v10(); // _ZN11S5217C12_nt3v10Ev
  virtual void  v11(); // _ZN11S5217C12_nt3v11Ev
  virtual void  v12(); // _ZN11S5217C12_nt3v12Ev
  S5217C12_nt(); // tgen
};
//SIG(-1 S5217C12_nt) C1{ vd v1 v2 v3 v4 v5}


 S5217C12_nt ::~S5217C12_nt(){ note_dtor("S5217C12_nt", this);}
void  S5217C12_nt ::v8(){vfunc_called(this, "_ZN11S5217C12_nt2v8Ev");}
void  S5217C12_nt ::v9(){vfunc_called(this, "_ZN11S5217C12_nt2v9Ev");}
void  S5217C12_nt ::v10(){vfunc_called(this, "_ZN11S5217C12_nt3v10Ev");}
void  S5217C12_nt ::v11(){vfunc_called(this, "_ZN11S5217C12_nt3v11Ev");}
void  S5217C12_nt ::v12(){vfunc_called(this, "_ZN11S5217C12_nt3v12Ev");}
S5217C12_nt ::S5217C12_nt(){ note_ctor("S5217C12_nt", this);} // tgen

//skip512 S5217C12_nt

#else // __cplusplus

extern void _ZN11S5217C12_ntC1Ev();
extern void _ZN11S5217C12_ntD1Ev();
Name_Map name_map_S5217C12_nt[] = {
  NSPAIR(_ZN11S5217C12_ntC1Ev),
  NSPAIR(_ZN11S5217C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S5217C12_nt[];
extern void _ZN11S5217C12_ntD1Ev();
extern void _ZN11S5217C12_ntD0Ev();
extern void _ZN11S5217C12_nt2v8Ev();
extern void _ZN11S5217C12_nt2v9Ev();
extern void _ZN11S5217C12_nt3v10Ev();
extern void _ZN11S5217C12_nt3v11Ev();
extern void _ZN11S5217C12_nt3v12Ev();
static  VTBL_ENTRY vtc_S5217C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S5217C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S5217C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI11S5217C12_nt[];
VTBL_ENTRY *P__ZTI11S5217C12_nt = _ZTI11S5217C12_nt; 
extern  VTBL_ENTRY _ZTV11S5217C12_nt[];
Class_Descriptor cd_S5217C12_nt = {  "S5217C12_nt", // class name
  0,0,//no base classes
  &(vtc_S5217C12_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S5217C12_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S5217C12_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C15_nt  {
  char s5217c15f0;
  char s5217c15f1[15];
  void  mf5217c15(); // _ZN11S5217C15_nt9mf5217c15Ev
};
//SIG(-1 S5217C15_nt) C1{ m Fc[16]}


void  S5217C15_nt ::mf5217c15(){}

//skip512 S5217C15_nt

#else // __cplusplus

Class_Descriptor cd_S5217C15_nt = {  "S5217C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C14_nt  : S5217C15_nt {
};
//SIG(-1 S5217C14_nt) C1{ BC2{ m Fc[16]}}



//skip512 S5217C14_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C15_nt;
static Base_Class bases_S5217C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C13  {
  ::S5217C14_nt s5217c13f0;
  int s5217c13f1;
  int s5217c13f2;
  int s5217c13f3;
  int s5217c13f4;
};
//SIG(1 S5217C13) C1{ FC2{ BC3{ m Fc[16]}} Fi[4]}



static void Test_S5217C13()
{
  {
    init_simple_test("S5217C13");
    S5217C13 lv;
    check2(sizeof(lv), 32, "sizeof(S5217C13)");
    check2(__alignof__(lv), 4, "__alignof__(S5217C13)");
    check_field_offset(lv, s5217c13f0, 0, "S5217C13.s5217c13f0");
    check_field_offset(lv, s5217c13f1, 16, "S5217C13.s5217c13f1");
    check_field_offset(lv, s5217c13f2, 20, "S5217C13.s5217c13f2");
    check_field_offset(lv, s5217c13f3, 24, "S5217C13.s5217c13f3");
    check_field_offset(lv, s5217c13f4, 28, "S5217C13.s5217c13f4");
  }
}
static Arrange_To_Call_Me vS5217C13(Test_S5217C13, "S5217C13", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C17_nt  : S5217C7_nt {
  ::S5217C8 s5217c17f0;
};
//SIG(-1 S5217C17_nt) C1{ BC2{} FC3{ BC4{}}}



//skip512 S5217C17_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
static Base_Class bases_S5217C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C17_nt = {  "S5217C17_nt", // class name
  bases_S5217C17_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C16_nt  : S5217C17_nt {
  void *s5217c16f0;
  void *s5217c16f1;
  void *s5217c16f2;
};
//SIG(-1 S5217C16_nt) C1{ BC2{ BC3{} FC4{ BC5{}}} Fp[3]}



//skip512 S5217C16_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C17_nt;
static Base_Class bases_S5217C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C17_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C31  {
};
//SIG(-1 S5217C31) C1{}



static void Test_S5217C31()
{
  {
    init_simple_test("S5217C31");
    S5217C31 lv;
    check2(sizeof(lv), 1, "sizeof(S5217C31)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C31)");
  }
}
static Arrange_To_Call_Me vS5217C31(Test_S5217C31, "S5217C31", 1);

#else // __cplusplus

Class_Descriptor cd_S5217C31 = {  "S5217C31", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C30  : S5217C31 {
};
//SIG(-1 S5217C30) C1{ BC2{}}



static void Test_S5217C30()
{
  extern Class_Descriptor cd_S5217C30;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C30, buf);
    S5217C30 &lv = *(new (buf) S5217C30());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C30)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C30)");
    check_base_class_offset(lv, (S5217C31*), 0, "S5217C30");
    test_class_info(&lv, &cd_S5217C30);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C30(Test_S5217C30, "S5217C30", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C31;
static Base_Class bases_S5217C30[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C31,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C30 = {  "S5217C30", // class name
  bases_S5217C30, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C29  : S5217C7_nt {
  ::S5217C30 s5217c29f0;
};
//SIG(-1 S5217C29) C1{ BC2{} FC3{ BC4{}}}



static void Test_S5217C29()
{
  extern Class_Descriptor cd_S5217C29;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C29, buf);
    S5217C29 &lv = *(new (buf) S5217C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C29)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C29)");
    check_base_class_offset(lv, (S5217C7_nt*), 0, "S5217C29");
    check_field_offset(lv, s5217c29f0, 0, "S5217C29.s5217c29f0");
    test_class_info(&lv, &cd_S5217C29);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C29(Test_S5217C29, "S5217C29", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
static Base_Class bases_S5217C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C29 = {  "S5217C29", // class name
  bases_S5217C29, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C28_nt  : S5217C29 {
  ::S5217C30 s5217c28f0;
};
//SIG(-1 S5217C28_nt) C1{ BC2{ BC3{} FC4{ BC5{}}} FC4}



//skip512 S5217C28_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C29;
static Base_Class bases_S5217C28_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C28_nt = {  "S5217C28_nt", // class name
  bases_S5217C28_nt, 2,
  0, // no vftv
  0, //no vtt
  2, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C35  {
};
//SIG(-1 S5217C35) C1{}



static void Test_S5217C35()
{
  {
    init_simple_test("S5217C35");
    S5217C35 lv;
    check2(sizeof(lv), 1, "sizeof(S5217C35)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C35)");
  }
}
static Arrange_To_Call_Me vS5217C35(Test_S5217C35, "S5217C35", 1);

#else // __cplusplus

Class_Descriptor cd_S5217C35 = {  "S5217C35", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C34  : S5217C35 {
};
//SIG(-1 S5217C34) C1{ BC2{}}



static void Test_S5217C34()
{
  extern Class_Descriptor cd_S5217C34;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C34, buf);
    S5217C34 &lv = *(new (buf) S5217C34());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C34)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C34)");
    check_base_class_offset(lv, (S5217C35*), 0, "S5217C34");
    test_class_info(&lv, &cd_S5217C34);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C34(Test_S5217C34, "S5217C34", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C35;
static Base_Class bases_S5217C34[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C35,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C34 = {  "S5217C34", // class name
  bases_S5217C34, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C27_nt  : S5217C28_nt {
  ::S5217C34 s5217c27f0;
};
//SIG(-1 S5217C27_nt) C1{ BC2{ BC3{ BC4{} FC5{ BC6{}}} FC5} FC7{ BC8{}}}



//skip512 S5217C27_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C29;
extern Class_Descriptor cd_S5217C28_nt;
static Base_Class bases_S5217C27_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5217C28_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C27_nt = {  "S5217C27_nt", // class name
  bases_S5217C27_nt, 3,
  0, // no vftv
  0, //no vtt
  3, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C26_nt  : S5217C27_nt {
  ::S5217C34 s5217c26f0;
};
//SIG(-1 S5217C26_nt) C1{ BC2{ BC3{ BC4{ BC5{} FC6{ BC7{}}} FC6} FC8{ BC9{}}} FC8}



//skip512 S5217C26_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C29;
extern Class_Descriptor cd_S5217C28_nt;
extern Class_Descriptor cd_S5217C27_nt;
static Base_Class bases_S5217C26_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5217C28_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C27_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C26_nt = {  "S5217C26_nt", // class name
  bases_S5217C26_nt, 4,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C25_nt  : S5217C26_nt {
  void *s5217c25f0;
  int s5217c25f1;
};
//SIG(-1 S5217C25_nt) C1{ BC2{ BC3{ BC4{ BC5{ BC6{} FC7{ BC8{}}} FC7} FC9{ BC10{}}} FC9} Fp Fi}



//skip512 S5217C25_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C29;
extern Class_Descriptor cd_S5217C28_nt;
extern Class_Descriptor cd_S5217C27_nt;
extern Class_Descriptor cd_S5217C26_nt;
static Base_Class bases_S5217C25_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5217C28_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C27_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5217C26_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C25_nt = {  "S5217C25_nt", // class name
  bases_S5217C25_nt, 5,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C24_nt  : S5217C25_nt {
};
//SIG(-1 S5217C24_nt) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{} FC8{ BC9{}}} FC8} FC10{ BC11{}}} FC10} Fp Fi}}



//skip512 S5217C24_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C29;
extern Class_Descriptor cd_S5217C28_nt;
extern Class_Descriptor cd_S5217C27_nt;
extern Class_Descriptor cd_S5217C26_nt;
extern Class_Descriptor cd_S5217C25_nt;
static Base_Class bases_S5217C24_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S5217C28_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C27_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S5217C26_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C39_nt  {
  __tsi64 s5217c39f0;
  void  mf5217c39(); // _ZN11S5217C39_nt9mf5217c39Ev
};
//SIG(-1 S5217C39_nt) C1{ m FL}


void  S5217C39_nt ::mf5217c39(){}

//skip512 S5217C39_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C38  {
  void *s5217c38f0;
  char s5217c38f1;
  int s5217c38f2;
  ::S5217C39_nt s5217c38f3;
};
//SIG(1 S5217C38) C1{ Fp Fc Fi FC2{ m FL}}



static void Test_S5217C38()
{
  {
    init_simple_test("S5217C38");
    S5217C38 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5217C38)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C38)");
    check_field_offset(lv, s5217c38f0, 0, "S5217C38.s5217c38f0");
    check_field_offset(lv, s5217c38f1, ABISELECT(8,4), "S5217C38.s5217c38f1");
    check_field_offset(lv, s5217c38f2, ABISELECT(12,8), "S5217C38.s5217c38f2");
    check_field_offset(lv, s5217c38f3, ABISELECT(16,12), "S5217C38.s5217c38f3");
  }
}
static Arrange_To_Call_Me vS5217C38(Test_S5217C38, "S5217C38", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C40  {
  void *s5217c40f0;
  int s5217c40f1;
  int s5217c40f2;
  void  mf5217c40(); // _ZN8S5217C409mf5217c40Ev
};
//SIG(-1 S5217C40) C1{ m Fp Fi[2]}


void  S5217C40 ::mf5217c40(){}

static void Test_S5217C40()
{
  {
    init_simple_test("S5217C40");
    S5217C40 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5217C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C40)");
    check_field_offset(lv, s5217c40f0, 0, "S5217C40.s5217c40f0");
    check_field_offset(lv, s5217c40f1, ABISELECT(8,4), "S5217C40.s5217c40f1");
    check_field_offset(lv, s5217c40f2, ABISELECT(12,8), "S5217C40.s5217c40f2");
  }
}
static Arrange_To_Call_Me vS5217C40(Test_S5217C40, "S5217C40", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C45  {
};
//SIG(-1 S5217C45) C1{}



static void Test_S5217C45()
{
  {
    init_simple_test("S5217C45");
    S5217C45 lv;
    check2(sizeof(lv), 1, "sizeof(S5217C45)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C45)");
  }
}
static Arrange_To_Call_Me vS5217C45(Test_S5217C45, "S5217C45", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5217C45[];
VTBL_ENTRY *P__ZTI8S5217C45 = _ZTI8S5217C45; 
Class_Descriptor cd_S5217C45 = {  "S5217C45", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5217C45),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C44  : S5217C45 {
};
//SIG(-1 S5217C44) C1{ BC2{}}



static void Test_S5217C44()
{
  extern Class_Descriptor cd_S5217C44;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C44, buf);
    S5217C44 &lv = *(new (buf) S5217C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C44)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C44)");
    check_base_class_offset(lv, (S5217C45*), 0, "S5217C44");
    test_class_info(&lv, &cd_S5217C44);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C44(Test_S5217C44, "S5217C44", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C45;
extern VTBL_ENTRY _ZTI8S5217C45[];
static Base_Class bases_S5217C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C45,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C44 = {  "S5217C44", // class name
  bases_S5217C44, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C43  : S5217C7_nt {
  ::S5217C44 s5217c43f0;
};
//SIG(-1 S5217C43) C1{ BC2{} FC3{ BC4{}}}



static void Test_S5217C43()
{
  extern Class_Descriptor cd_S5217C43;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C43, buf);
    S5217C43 &lv = *(new (buf) S5217C43());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C43)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C43)");
    check_base_class_offset(lv, (S5217C7_nt*), 0, "S5217C43");
    check_field_offset(lv, s5217c43f0, 0, "S5217C43.s5217c43f0");
    test_class_info(&lv, &cd_S5217C43);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C43(Test_S5217C43, "S5217C43", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
static Base_Class bases_S5217C43[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C43 = {  "S5217C43", // class name
  bases_S5217C43, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C42  : S5217C43 {
  void *s5217c42f0;
  void *s5217c42f1;
  void *s5217c42f2;
};
//SIG(-1 S5217C42) C1{ BC2{ BC3{} FC4{ BC5{}}} Fp[3]}



static void Test_S5217C42()
{
  extern Class_Descriptor cd_S5217C42;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5217C42, buf);
    S5217C42 &lv = *(new (buf) S5217C42());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5217C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C42)");
    check_base_class_offset(lv, (S5217C7_nt*)(S5217C43*), 0, "S5217C42");
    check_base_class_offset(lv, (S5217C43*), 0, "S5217C42");
    check_field_offset(lv, s5217c42f0, ABISELECT(8,4), "S5217C42.s5217c42f0");
    check_field_offset(lv, s5217c42f1, ABISELECT(16,8), "S5217C42.s5217c42f1");
    check_field_offset(lv, s5217c42f2, ABISELECT(24,12), "S5217C42.s5217c42f2");
    test_class_info(&lv, &cd_S5217C42);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C42(Test_S5217C42, "S5217C42", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C43;
static Base_Class bases_S5217C42[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C43,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C42 = {  "S5217C42", // class name
  bases_S5217C42, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C51  {
  char s5217c51f0;
  char s5217c51f1[15];
  void  mf5217c51(); // _ZN8S5217C519mf5217c51Ev
};
//SIG(-1 S5217C51) C1{ m Fc[16]}


void  S5217C51 ::mf5217c51(){}

static void Test_S5217C51()
{
  {
    init_simple_test("S5217C51");
    S5217C51 lv;
    check2(sizeof(lv), 16, "sizeof(S5217C51)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C51)");
    check_field_offset(lv, s5217c51f0, 0, "S5217C51.s5217c51f0");
    check_field_offset(lv, s5217c51f1, 1, "S5217C51.s5217c51f1");
  }
}
static Arrange_To_Call_Me vS5217C51(Test_S5217C51, "S5217C51", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C50  {
  ::S5217C51 s5217c50f0;
  ::S5217C51 s5217c50f1;
};
//SIG(1 S5217C50) C1{ FC2{ m Fc[16]} FC2}



static void Test_S5217C50()
{
  {
    init_simple_test("S5217C50");
    S5217C50 lv;
    check2(sizeof(lv), 32, "sizeof(S5217C50)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C50)");
    check_field_offset(lv, s5217c50f0, 0, "S5217C50.s5217c50f0");
    check_field_offset(lv, s5217c50f1, 16, "S5217C50.s5217c50f1");
  }
}
static Arrange_To_Call_Me vS5217C50(Test_S5217C50, "S5217C50", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C53  : S5217C7_nt {
  ::S5217C44 s5217c53f0;
};
//SIG(-1 S5217C53) C1{ BC2{} FC3{ BC4{}}}



static void Test_S5217C53()
{
  extern Class_Descriptor cd_S5217C53;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S5217C53, buf);
    S5217C53 &lv = *(new (buf) S5217C53());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S5217C53)");
    check2(__alignof__(lv), 1, "__alignof__(S5217C53)");
    check_base_class_offset(lv, (S5217C7_nt*), 0, "S5217C53");
    check_field_offset(lv, s5217c53f0, 0, "S5217C53.s5217c53f0");
    test_class_info(&lv, &cd_S5217C53);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C53(Test_S5217C53, "S5217C53", 1);

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
static Base_Class bases_S5217C53[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C53 = {  "S5217C53", // class name
  bases_S5217C53, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C52  : S5217C53 {
  void *s5217c52f0;
  void *s5217c52f1;
  void *s5217c52f2;
};
//SIG(-1 S5217C52) C1{ BC2{ BC3{} FC4{ BC5{}}} Fp[3]}



static void Test_S5217C52()
{
  extern Class_Descriptor cd_S5217C52;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5217C52, buf);
    S5217C52 &lv = *(new (buf) S5217C52());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5217C52)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C52)");
    check_base_class_offset(lv, (S5217C7_nt*)(S5217C53*), 0, "S5217C52");
    check_base_class_offset(lv, (S5217C53*), 0, "S5217C52");
    check_field_offset(lv, s5217c52f0, ABISELECT(8,4), "S5217C52.s5217c52f0");
    check_field_offset(lv, s5217c52f1, ABISELECT(16,8), "S5217C52.s5217c52f1");
    check_field_offset(lv, s5217c52f2, ABISELECT(24,12), "S5217C52.s5217c52f2");
    test_class_info(&lv, &cd_S5217C52);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C52(Test_S5217C52, "S5217C52", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C7_nt;
extern Class_Descriptor cd_S5217C53;
static Base_Class bases_S5217C52[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C53,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5217C52 = {  "S5217C52", // class name
  bases_S5217C52, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C60_nt  {
  void *s5217c60f0;
  void  mf5217c60(); // _ZN11S5217C60_nt9mf5217c60Ev
};
//SIG(-1 S5217C60_nt) C1{ m Fp}


void  S5217C60_nt ::mf5217c60(){}

//skip512 S5217C60_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S5217C60_nt[];
VTBL_ENTRY *P__ZTI11S5217C60_nt = _ZTI11S5217C60_nt; 
Class_Descriptor cd_S5217C60_nt = {  "S5217C60_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S5217C60_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C62  {
  int s5217c62f0;
  int s5217c62f1;
  int s5217c62f2;
  int s5217c62f3;
  int s5217c62f4;
  int s5217c62f5;
  int s5217c62f6;
  char s5217c62f7;
  char s5217c62f8;
  char s5217c62f9;
  int s5217c62f10;
  void  mf5217c62(); // _ZN8S5217C629mf5217c62Ev
};
//SIG(-1 S5217C62) C1{ m Fi[7] Fc[3] Fi}


void  S5217C62 ::mf5217c62(){}

static void Test_S5217C62()
{
  {
    init_simple_test("S5217C62");
    S5217C62 lv;
    check2(sizeof(lv), 36, "sizeof(S5217C62)");
    check2(__alignof__(lv), 4, "__alignof__(S5217C62)");
    check_field_offset(lv, s5217c62f0, 0, "S5217C62.s5217c62f0");
    check_field_offset(lv, s5217c62f1, 4, "S5217C62.s5217c62f1");
    check_field_offset(lv, s5217c62f2, 8, "S5217C62.s5217c62f2");
    check_field_offset(lv, s5217c62f3, 12, "S5217C62.s5217c62f3");
    check_field_offset(lv, s5217c62f4, 16, "S5217C62.s5217c62f4");
    check_field_offset(lv, s5217c62f5, 20, "S5217C62.s5217c62f5");
    check_field_offset(lv, s5217c62f6, 24, "S5217C62.s5217c62f6");
    check_field_offset(lv, s5217c62f7, 28, "S5217C62.s5217c62f7");
    check_field_offset(lv, s5217c62f8, 29, "S5217C62.s5217c62f8");
    check_field_offset(lv, s5217c62f9, 30, "S5217C62.s5217c62f9");
    check_field_offset(lv, s5217c62f10, 32, "S5217C62.s5217c62f10");
  }
}
static Arrange_To_Call_Me vS5217C62(Test_S5217C62, "S5217C62", 36);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C61  {
  ::S5217C62 s5217c61f0;
  char s5217c61f1;
  void  mf5217c61(); // _ZN8S5217C619mf5217c61Ev
};
//SIG(1 S5217C61) C1{ m FC2{ m Fi[7] Fc[3] Fi} Fc}


void  S5217C61 ::mf5217c61(){}

static void Test_S5217C61()
{
  {
    init_simple_test("S5217C61");
    S5217C61 lv;
    check2(sizeof(lv), 40, "sizeof(S5217C61)");
    check2(__alignof__(lv), 4, "__alignof__(S5217C61)");
    check_field_offset(lv, s5217c61f0, 0, "S5217C61.s5217c61f0");
    check_field_offset(lv, s5217c61f1, 36, "S5217C61.s5217c61f1");
  }
}
static Arrange_To_Call_Me vS5217C61(Test_S5217C61, "S5217C61", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C64_nt  {
  int s5217c64f0;
  int s5217c64f1;
  int s5217c64f2;
  int s5217c64f3;
  int s5217c64f4;
  char s5217c64f5;
  int s5217c64f6;
  int s5217c64f7;
  void  mf5217c64(); // _ZN11S5217C64_nt9mf5217c64Ev
};
//SIG(-1 S5217C64_nt) C1{ m Fi[5] Fc Fi[2]}


void  S5217C64_nt ::mf5217c64(){}

//skip512 S5217C64_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C63  {
  char s5217c63f0;
  char s5217c63f1;
  int s5217c63f2;
  int s5217c63f3;
  int s5217c63f4;
  int s5217c63f5;
  ::S5217C39_nt s5217c63f6;
  int s5217c63f7;
  int s5217c63f8;
  int s5217c63f9;
  int s5217c63f10;
  int s5217c63f11;
  int s5217c63f12;
  ::S5217C64_nt s5217c63f13;
  void  mf5217c63(); // _ZN8S5217C639mf5217c63Ev
};
//SIG(-1 S5217C63) C1{ m Fc[2] Fi[4] FC2{ m FL} Fi[6] FC3{ m Fi[5] Fc Fi[2]}}


void  S5217C63 ::mf5217c63(){}

static void Test_S5217C63()
{
  {
    init_simple_test("S5217C63");
    S5217C63 lv;
    check2(sizeof(lv), ABISELECT(88,84), "sizeof(S5217C63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C63)");
    check_field_offset(lv, s5217c63f0, 0, "S5217C63.s5217c63f0");
    check_field_offset(lv, s5217c63f1, 1, "S5217C63.s5217c63f1");
    check_field_offset(lv, s5217c63f2, 4, "S5217C63.s5217c63f2");
    check_field_offset(lv, s5217c63f3, 8, "S5217C63.s5217c63f3");
    check_field_offset(lv, s5217c63f4, 12, "S5217C63.s5217c63f4");
    check_field_offset(lv, s5217c63f5, 16, "S5217C63.s5217c63f5");
    check_field_offset(lv, s5217c63f6, ABISELECT(24,20), "S5217C63.s5217c63f6");
    check_field_offset(lv, s5217c63f7, ABISELECT(32,28), "S5217C63.s5217c63f7");
    check_field_offset(lv, s5217c63f8, ABISELECT(36,32), "S5217C63.s5217c63f8");
    check_field_offset(lv, s5217c63f9, ABISELECT(40,36), "S5217C63.s5217c63f9");
    check_field_offset(lv, s5217c63f10, ABISELECT(44,40), "S5217C63.s5217c63f10");
    check_field_offset(lv, s5217c63f11, ABISELECT(48,44), "S5217C63.s5217c63f11");
    check_field_offset(lv, s5217c63f12, ABISELECT(52,48), "S5217C63.s5217c63f12");
    check_field_offset(lv, s5217c63f13, ABISELECT(56,52), "S5217C63.s5217c63f13");
  }
}
static Arrange_To_Call_Me vS5217C63(Test_S5217C63, "S5217C63", ABISELECT(88,84));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C65  {
  ::S5217C14_nt s5217c65f0;
  ::S5217C14_nt s5217c65f1;
  ::S5217C14_nt s5217c65f2;
  ::S5217C14_nt s5217c65f3;
  int s5217c65f4;
  int s5217c65f5;
  int s5217c65f6;
  int s5217c65f7;
  int s5217c65f8;
  int s5217c65f9;
  int s5217c65f10;
  char s5217c65f11;
  char s5217c65f12[3];
  void  mf5217c65(); // _ZN8S5217C659mf5217c65Ev
};
//SIG(-1 S5217C65) C1{ m FC2{ BC3{ m Fc[16]}} FC2 FC2 FC2 Fi[7] Fc[4]}


void  S5217C65 ::mf5217c65(){}

static void Test_S5217C65()
{
  {
    init_simple_test("S5217C65");
    S5217C65 lv;
    check2(sizeof(lv), 96, "sizeof(S5217C65)");
    check2(__alignof__(lv), 4, "__alignof__(S5217C65)");
    check_field_offset(lv, s5217c65f0, 0, "S5217C65.s5217c65f0");
    check_field_offset(lv, s5217c65f1, 16, "S5217C65.s5217c65f1");
    check_field_offset(lv, s5217c65f2, 32, "S5217C65.s5217c65f2");
    check_field_offset(lv, s5217c65f3, 48, "S5217C65.s5217c65f3");
    check_field_offset(lv, s5217c65f4, 64, "S5217C65.s5217c65f4");
    check_field_offset(lv, s5217c65f5, 68, "S5217C65.s5217c65f5");
    check_field_offset(lv, s5217c65f6, 72, "S5217C65.s5217c65f6");
    check_field_offset(lv, s5217c65f7, 76, "S5217C65.s5217c65f7");
    check_field_offset(lv, s5217c65f8, 80, "S5217C65.s5217c65f8");
    check_field_offset(lv, s5217c65f9, 84, "S5217C65.s5217c65f9");
    check_field_offset(lv, s5217c65f10, 88, "S5217C65.s5217c65f10");
    check_field_offset(lv, s5217c65f11, 92, "S5217C65.s5217c65f11");
    check_field_offset(lv, s5217c65f12, 93, "S5217C65.s5217c65f12");
  }
}
static Arrange_To_Call_Me vS5217C65(Test_S5217C65, "S5217C65", 96);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5217C1  : S5217C2 , S5217C11_nt , S5217C12_nt {
  char s5217c1f0[12];
  ::S5217C13 s5217c1f1[4];
  char s5217c1f2;
  char s5217c1f3;
  char s5217c1f4;
  char s5217c1f5;
  int s5217c1f6;
  ::S5217C4_nt s5217c1f7;
  char s5217c1f8;
  char s5217c1f9;
  char s5217c1f10;
  char s5217c1f11;
  int s5217c1f12;
  int s5217c1f13;
  int s5217c1f14;
  int s5217c1f15;
  char s5217c1f16[6];
  char s5217c1f17[6];
  char s5217c1f18;
  void *s5217c1f19;
  char s5217c1f20;
  char s5217c1f21;
  char s5217c1f22;
  ::S5217C16_nt s5217c1f23;
  ::S5217C16_nt s5217c1f24;
  ::S5217C24_nt s5217c1f25;
  ::S5217C38 s5217c1f26[4];
  int s5217c1f27[4];
  int s5217c1f28;
  ::S5217C40 s5217c1f29;
  int s5217c1f30;
  ::S5217C40 s5217c1f31;
  ::S5217C42 s5217c1f32;
  ::S5217C42 s5217c1f33;
  int s5217c1f34;
  int s5217c1f35;
  int s5217c1f36;
  int s5217c1f37;
  int s5217c1f38;
  char s5217c1f39;
  int s5217c1f40;
  ::S5217C50 s5217c1f41[10];
  int s5217c1f42;
  int s5217c1f43;
  int s5217c1f44[4];
  ::S5217C52 s5217c1f45;
  ::S5217C52 s5217c1f46;
  ::S5217C60_nt s5217c1f47;
  void *s5217c1f48;
  void *s5217c1f49;
  int s5217c1f50;
  int s5217c1f51;
  int s5217c1f52;
  ::S5217C39_nt s5217c1f53;
  int s5217c1f54;
  int s5217c1f55;
  int s5217c1f56;
  ::S5217C61 s5217c1f57[2];
  int s5217c1f58;
  ::S5217C63 s5217c1f59;
  int s5217c1f60;
  char s5217c1f61;
  int s5217c1f62;
  ::S5217C65 s5217c1f63;
  int s5217c1f64;
  virtual  ~S5217C1(); // _ZN7S5217C1D1Ev
  virtual void  v1(); // _ZN7S5217C12v1Ev
  virtual void  v2(); // _ZN7S5217C12v2Ev
  virtual void  v3(); // _ZN7S5217C12v3Ev
  virtual void  v4(); // _ZN7S5217C12v4Ev
  S5217C1(); // tgen
};
//SIG(1 S5217C1) C1{ BC2{ BC3{ vd v5 Fc[12] Fp[3] Fi} vd v6 Fc[12] Fi FC4{ BC5{ BC6{ BC7{}} FC8{ BC9{}}} FU10{ Fc[16] Fp} Fi Fi}} BC11{ vd v7} BC12{ vd v8 v9 v10 v11 v12} vd v1 v2 v3 v4 Fc[12] FC13{ FC14{ BC15{ m Fc Fc[15]}} Fi Fi Fi Fi}[4] Fc Fc Fc Fc Fi FC4 Fc Fc Fc Fc Fi Fi Fi Fi Fc[6] Fc[6] Fc Fp Fc Fc Fc FC16{ BC17{ BC7 FC8} Fp Fp Fp} FC16 FC18{ BC19{ BC20{ BC21{ BC22{ BC23{ BC7 FC24{ BC25{}}} FC24} FC26{ BC27{}}} FC26} Fp Fi}} FC28{ Fp Fc Fi FC29{ m FL}}[4] Fi[4] Fi FC30{ m Fp Fi Fi} Fi FC30 FC31{ BC32{ BC7 FC33{ BC34{}}} Fp Fp Fp} FC31 Fi Fi Fi Fi Fi Fc Fi FC35{ FC36{ m Fc Fc[15]} FC36}[10] Fi Fi Fi[4] FC37{ BC38{ BC7 FC33} Fp Fp Fp} FC37 FC39{ m Fp} Fp Fp Fi Fi Fi FC29 Fi Fi Fi FC40{ m FC41{ m Fi Fi Fi Fi Fi Fi Fi Fc Fc Fc Fi} Fc}[2] Fi FC42{ m Fc Fc Fi Fi Fi Fi FC29 Fi Fi Fi Fi Fi Fi FC43{ m Fi Fi Fi Fi Fi Fc Fi Fi}} Fi Fc Fi FC44{ m FC14 FC14 FC14 FC14 Fi Fi Fi Fi Fi Fi Fi Fc Fc[3]} Fi}


 S5217C1 ::~S5217C1(){ note_dtor("S5217C1", this);}
void  S5217C1 ::v1(){vfunc_called(this, "_ZN7S5217C12v1Ev");}
void  S5217C1 ::v2(){vfunc_called(this, "_ZN7S5217C12v2Ev");}
void  S5217C1 ::v3(){vfunc_called(this, "_ZN7S5217C12v3Ev");}
void  S5217C1 ::v4(){vfunc_called(this, "_ZN7S5217C12v4Ev");}
S5217C1 ::S5217C1(){ note_ctor("S5217C1", this);} // tgen

static void Test_S5217C1()
{
  extern Class_Descriptor cd_S5217C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(183,310)];
    init_test(&cd_S5217C1, buf);
    S5217C1 *dp, &lv = *(dp=new (buf) S5217C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1456,1236), "sizeof(S5217C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5217C1)");
    check_base_class_offset(lv, (S5217C3*)(S5217C2*), 0, "S5217C1");
    check_base_class_offset(lv, (S5217C2*), 0, "S5217C1");
    check_base_class_offset(lv, (S5217C11_nt*), ABISELECT(104,76), "S5217C1");
    check_base_class_offset(lv, (S5217C12_nt*), ABISELECT(112,80), "S5217C1");
    check_field_offset(lv, s5217c1f0, ABISELECT(120,84), "S5217C1.s5217c1f0");
    check_field_offset(lv, s5217c1f1, ABISELECT(132,96), "S5217C1.s5217c1f1");
    check_field_offset(lv, s5217c1f2, ABISELECT(260,224), "S5217C1.s5217c1f2");
    check_field_offset(lv, s5217c1f3, ABISELECT(261,225), "S5217C1.s5217c1f3");
    check_field_offset(lv, s5217c1f4, ABISELECT(262,226), "S5217C1.s5217c1f4");
    check_field_offset(lv, s5217c1f5, ABISELECT(263,227), "S5217C1.s5217c1f5");
    check_field_offset(lv, s5217c1f6, ABISELECT(264,228), "S5217C1.s5217c1f6");
    check_field_offset(lv, s5217c1f7, ABISELECT(272,232), "S5217C1.s5217c1f7");
    check_field_offset(lv, s5217c1f8, ABISELECT(304,260), "S5217C1.s5217c1f8");
    check_field_offset(lv, s5217c1f9, ABISELECT(305,261), "S5217C1.s5217c1f9");
    check_field_offset(lv, s5217c1f10, ABISELECT(306,262), "S5217C1.s5217c1f10");
    check_field_offset(lv, s5217c1f11, ABISELECT(307,263), "S5217C1.s5217c1f11");
    check_field_offset(lv, s5217c1f12, ABISELECT(308,264), "S5217C1.s5217c1f12");
    check_field_offset(lv, s5217c1f13, ABISELECT(312,268), "S5217C1.s5217c1f13");
    check_field_offset(lv, s5217c1f14, ABISELECT(316,272), "S5217C1.s5217c1f14");
    check_field_offset(lv, s5217c1f15, ABISELECT(320,276), "S5217C1.s5217c1f15");
    check_field_offset(lv, s5217c1f16, ABISELECT(324,280), "S5217C1.s5217c1f16");
    check_field_offset(lv, s5217c1f17, ABISELECT(330,286), "S5217C1.s5217c1f17");
    check_field_offset(lv, s5217c1f18, ABISELECT(336,292), "S5217C1.s5217c1f18");
    check_field_offset(lv, s5217c1f19, ABISELECT(344,296), "S5217C1.s5217c1f19");
    check_field_offset(lv, s5217c1f20, ABISELECT(352,300), "S5217C1.s5217c1f20");
    check_field_offset(lv, s5217c1f21, ABISELECT(353,301), "S5217C1.s5217c1f21");
    check_field_offset(lv, s5217c1f22, ABISELECT(354,302), "S5217C1.s5217c1f22");
    check_field_offset(lv, s5217c1f23, ABISELECT(360,304), "S5217C1.s5217c1f23");
    check_field_offset(lv, s5217c1f24, ABISELECT(392,320), "S5217C1.s5217c1f24");
    check_field_offset(lv, s5217c1f25, ABISELECT(424,336), "S5217C1.s5217c1f25");
    check_field_offset(lv, s5217c1f26, ABISELECT(448,348), "S5217C1.s5217c1f26");
    check_field_offset(lv, s5217c1f27, ABISELECT(544,428), "S5217C1.s5217c1f27");
    check_field_offset(lv, s5217c1f28, ABISELECT(560,444), "S5217C1.s5217c1f28");
    check_field_offset(lv, s5217c1f29, ABISELECT(568,448), "S5217C1.s5217c1f29");
    check_field_offset(lv, s5217c1f30, ABISELECT(584,460), "S5217C1.s5217c1f30");
    check_field_offset(lv, s5217c1f31, ABISELECT(592,464), "S5217C1.s5217c1f31");
    check_field_offset(lv, s5217c1f32, ABISELECT(608,476), "S5217C1.s5217c1f32");
    check_field_offset(lv, s5217c1f33, ABISELECT(640,492), "S5217C1.s5217c1f33");
    check_field_offset(lv, s5217c1f34, ABISELECT(672,508), "S5217C1.s5217c1f34");
    check_field_offset(lv, s5217c1f35, ABISELECT(676,512), "S5217C1.s5217c1f35");
    check_field_offset(lv, s5217c1f36, ABISELECT(680,516), "S5217C1.s5217c1f36");
    check_field_offset(lv, s5217c1f37, ABISELECT(684,520), "S5217C1.s5217c1f37");
    check_field_offset(lv, s5217c1f38, ABISELECT(688,524), "S5217C1.s5217c1f38");
    check_field_offset(lv, s5217c1f39, ABISELECT(692,528), "S5217C1.s5217c1f39");
    check_field_offset(lv, s5217c1f40, ABISELECT(696,532), "S5217C1.s5217c1f40");
    check_field_offset(lv, s5217c1f41, ABISELECT(700,536), "S5217C1.s5217c1f41");
    check_field_offset(lv, s5217c1f42, ABISELECT(1020,856), "S5217C1.s5217c1f42");
    check_field_offset(lv, s5217c1f43, ABISELECT(1024,860), "S5217C1.s5217c1f43");
    check_field_offset(lv, s5217c1f44, ABISELECT(1028,864), "S5217C1.s5217c1f44");
    check_field_offset(lv, s5217c1f45, ABISELECT(1048,880), "S5217C1.s5217c1f45");
    check_field_offset(lv, s5217c1f46, ABISELECT(1080,896), "S5217C1.s5217c1f46");
    check_field_offset(lv, s5217c1f47, ABISELECT(1112,912), "S5217C1.s5217c1f47");
    check_field_offset(lv, s5217c1f48, ABISELECT(1120,916), "S5217C1.s5217c1f48");
    check_field_offset(lv, s5217c1f49, ABISELECT(1128,920), "S5217C1.s5217c1f49");
    check_field_offset(lv, s5217c1f50, ABISELECT(1136,924), "S5217C1.s5217c1f50");
    check_field_offset(lv, s5217c1f51, ABISELECT(1140,928), "S5217C1.s5217c1f51");
    check_field_offset(lv, s5217c1f52, ABISELECT(1144,932), "S5217C1.s5217c1f52");
    check_field_offset(lv, s5217c1f53, ABISELECT(1152,936), "S5217C1.s5217c1f53");
    check_field_offset(lv, s5217c1f54, ABISELECT(1160,944), "S5217C1.s5217c1f54");
    check_field_offset(lv, s5217c1f55, ABISELECT(1164,948), "S5217C1.s5217c1f55");
    check_field_offset(lv, s5217c1f56, ABISELECT(1168,952), "S5217C1.s5217c1f56");
    check_field_offset(lv, s5217c1f57, ABISELECT(1172,956), "S5217C1.s5217c1f57");
    check_field_offset(lv, s5217c1f58, ABISELECT(1252,1036), "S5217C1.s5217c1f58");
    check_field_offset(lv, s5217c1f59, ABISELECT(1256,1040), "S5217C1.s5217c1f59");
    check_field_offset(lv, s5217c1f60, ABISELECT(1344,1124), "S5217C1.s5217c1f60");
    check_field_offset(lv, s5217c1f61, ABISELECT(1348,1128), "S5217C1.s5217c1f61");
    check_field_offset(lv, s5217c1f62, ABISELECT(1352,1132), "S5217C1.s5217c1f62");
    check_field_offset(lv, s5217c1f63, ABISELECT(1356,1136), "S5217C1.s5217c1f63");
    check_field_offset(lv, s5217c1f64, ABISELECT(1452,1232), "S5217C1.s5217c1f64");
    test_class_info(&lv, &cd_S5217C1);
    dp->~S5217C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5217C1(Test_S5217C1, "S5217C1", ABISELECT(1456,1236));

#else // __cplusplus

extern void _ZN7S5217C1C1Ev();
extern void _ZN7S5217C1D1Ev();
Name_Map name_map_S5217C1[] = {
  NSPAIR(_ZN7S5217C1C1Ev),
  NSPAIR(_ZN7S5217C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C3;
extern VTBL_ENTRY _ZTI7S5217C3[];
extern  VTBL_ENTRY _ZTV7S5217C3[];
extern Class_Descriptor cd_S5217C2;
extern VTBL_ENTRY _ZTI7S5217C2[];
extern  VTBL_ENTRY _ZTV7S5217C2[];
extern Class_Descriptor cd_S5217C11_nt;
extern VTBL_ENTRY _ZTI11S5217C11_nt[];
extern  VTBL_ENTRY _ZTV11S5217C11_nt[];
extern Class_Descriptor cd_S5217C12_nt;
extern VTBL_ENTRY _ZTI11S5217C12_nt[];
extern  VTBL_ENTRY _ZTV11S5217C12_nt[];
static Base_Class bases_S5217C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5217C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C11_nt,    ABISELECT(104,76), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C12_nt,    ABISELECT(112,80), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5217C1[];
extern void _ZN7S5217C1D1Ev();
extern void _ZN7S5217C1D0Ev();
extern void _ZN7S5217C32v5Ev();
extern void _ZN7S5217C22v6Ev();
extern void _ZN7S5217C12v1Ev();
extern void _ZN7S5217C12v2Ev();
extern void _ZN7S5217C12v3Ev();
extern void _ZN7S5217C12v4Ev();
extern void ABISELECT(_ZThn104_N7S5217C1D1Ev,_ZThn76_N7S5217C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S5217C1D0Ev,_ZThn76_N7S5217C1D0Ev)();
extern void _ZN11S5217C11_nt2v7Ev();
extern void ABISELECT(_ZThn112_N7S5217C1D1Ev,_ZThn80_N7S5217C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S5217C1D0Ev,_ZThn80_N7S5217C1D0Ev)();
extern void _ZN11S5217C12_nt2v8Ev();
extern void _ZN11S5217C12_nt2v9Ev();
extern void _ZN11S5217C12_nt3v10Ev();
extern void _ZN11S5217C12_nt3v11Ev();
extern void _ZN11S5217C12_nt3v12Ev();
static  VTBL_ENTRY vtc_S5217C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5217C1[0]),
  (VTBL_ENTRY)&_ZN7S5217C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5217C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5217C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5217C22v6Ev,
  (VTBL_ENTRY)&_ZN7S5217C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5217C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5217C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5217C12v4Ev,
  ABISELECT(-104,-76),
  (VTBL_ENTRY)&(_ZTI7S5217C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S5217C1D1Ev,_ZThn76_N7S5217C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S5217C1D0Ev,_ZThn76_N7S5217C1D0Ev),
  (VTBL_ENTRY)&_ZN11S5217C11_nt2v7Ev,
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S5217C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5217C1D1Ev,_ZThn80_N7S5217C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S5217C1D0Ev,_ZThn80_N7S5217C1D0Ev),
  (VTBL_ENTRY)&_ZN11S5217C12_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S5217C12_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI7S5217C1[];
extern  VTBL_ENTRY _ZTV7S5217C1[];
Class_Descriptor cd_S5217C1 = {  "S5217C1", // class name
  bases_S5217C1, 4,
  &(vtc_S5217C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1456,1236), // object size
  NSPAIRA(_ZTI7S5217C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5217C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C7  {
  int s74c7f0;
  __tsi64 s74c7f1;
  void *s74c7f2[4];
  int s74c7f3[2];
  void *s74c7f4;
  ::S1409C5_nt s74c7f5;
  void *s74c7f6[2];
  virtual  ~S74C7(); // _ZN5S74C7D1Ev
  virtual void  v4(); // _ZN5S74C72v4Ev
  virtual void  v5(); // _ZN5S74C72v5Ev
  virtual void  v6(); // _ZN5S74C72v6Ev
  virtual void  v7(); // _ZN5S74C72v7Ev
  virtual void  v8(); // _ZN5S74C72v8Ev
  virtual void  v9(); // _ZN5S74C72v9Ev
  virtual void  v10(); // _ZN5S74C73v10Ev
  virtual void  v11(); // _ZN5S74C73v11Ev
  virtual void  v12(); // _ZN5S74C73v12Ev
  virtual void  v13(); // _ZN5S74C73v13Ev
  virtual void  v14(); // _ZN5S74C73v14Ev
  virtual void  v15(); // _ZN5S74C73v15Ev
  virtual void  v16(); // _ZN5S74C73v16Ev
  virtual void  v17(); // _ZN5S74C73v17Ev
  virtual void  v18(); // _ZN5S74C73v18Ev
  virtual void  v19(); // _ZN5S74C73v19Ev
  virtual void  v20(); // _ZN5S74C73v20Ev
  virtual void  v21(); // _ZN5S74C73v21Ev
  virtual void  v22(); // _ZN5S74C73v22Ev
  virtual void  v23(); // _ZN5S74C73v23Ev
  virtual void  v24(); // _ZN5S74C73v24Ev
  virtual void  v25(); // _ZN5S74C73v25Ev
  virtual void  v26(); // _ZN5S74C73v26Ev
  virtual void  v27(); // _ZN5S74C73v27Ev
  virtual void  v28(); // _ZN5S74C73v28Ev
  virtual void  v29(); // _ZN5S74C73v29Ev
  virtual void  v30(); // _ZN5S74C73v30Ev
  virtual void  v31(); // _ZN5S74C73v31Ev
  virtual void  v32(); // _ZN5S74C73v32Ev
  virtual void  v33(); // _ZN5S74C73v33Ev
  virtual void  v34(); // _ZN5S74C73v34Ev
  virtual void  v35(); // _ZN5S74C73v35Ev
  virtual void  v36(); // _ZN5S74C73v36Ev
  virtual void  v37(); // _ZN5S74C73v37Ev
  virtual void  v38(); // _ZN5S74C73v38Ev
  virtual void  v39(); // _ZN5S74C73v39Ev
  virtual void  v40(); // _ZN5S74C73v40Ev
  virtual void  v41(); // _ZN5S74C73v41Ev
  virtual void  v42(); // _ZN5S74C73v42Ev
  virtual void  v43(); // _ZN5S74C73v43Ev
  virtual void  v44(); // _ZN5S74C73v44Ev
  virtual void  v45(); // _ZN5S74C73v45Ev
  virtual void  v46(); // _ZN5S74C73v46Ev
  virtual void  v47(); // _ZN5S74C73v47Ev
  virtual void  v48(); // _ZN5S74C73v48Ev
  virtual void  v49(); // _ZN5S74C73v49Ev
  virtual void  v50(); // _ZN5S74C73v50Ev
  virtual void  v51(); // _ZN5S74C73v51Ev
  virtual void  v52(); // _ZN5S74C73v52Ev
  virtual void  v53(); // _ZN5S74C73v53Ev
  virtual void  v54(); // _ZN5S74C73v54Ev
  virtual void  v55(); // _ZN5S74C73v55Ev
  virtual void  v56(); // _ZN5S74C73v56Ev
  virtual void  v57(); // _ZN5S74C73v57Ev
  virtual void  v58(); // _ZN5S74C73v58Ev
  virtual void  v59(); // _ZN5S74C73v59Ev
  virtual void  v60(); // _ZN5S74C73v60Ev
  virtual void  v61(); // _ZN5S74C73v61Ev
  virtual void  v62(); // _ZN5S74C73v62Ev
  virtual void  v63(); // _ZN5S74C73v63Ev
  virtual void  v64(); // _ZN5S74C73v64Ev
  virtual void  v65(); // _ZN5S74C73v65Ev
  virtual void  v66(); // _ZN5S74C73v66Ev
  virtual void  v67(); // _ZN5S74C73v67Ev
  S74C7(); // tgen
};
//SIG(-1 S74C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S74C7 ::~S74C7(){ note_dtor("S74C7", this);}
void  S74C7 ::v4(){vfunc_called(this, "_ZN5S74C72v4Ev");}
void  S74C7 ::v5(){vfunc_called(this, "_ZN5S74C72v5Ev");}
void  S74C7 ::v6(){vfunc_called(this, "_ZN5S74C72v6Ev");}
void  S74C7 ::v7(){vfunc_called(this, "_ZN5S74C72v7Ev");}
void  S74C7 ::v8(){vfunc_called(this, "_ZN5S74C72v8Ev");}
void  S74C7 ::v9(){vfunc_called(this, "_ZN5S74C72v9Ev");}
void  S74C7 ::v10(){vfunc_called(this, "_ZN5S74C73v10Ev");}
void  S74C7 ::v11(){vfunc_called(this, "_ZN5S74C73v11Ev");}
void  S74C7 ::v12(){vfunc_called(this, "_ZN5S74C73v12Ev");}
void  S74C7 ::v13(){vfunc_called(this, "_ZN5S74C73v13Ev");}
void  S74C7 ::v14(){vfunc_called(this, "_ZN5S74C73v14Ev");}
void  S74C7 ::v15(){vfunc_called(this, "_ZN5S74C73v15Ev");}
void  S74C7 ::v16(){vfunc_called(this, "_ZN5S74C73v16Ev");}
void  S74C7 ::v17(){vfunc_called(this, "_ZN5S74C73v17Ev");}
void  S74C7 ::v18(){vfunc_called(this, "_ZN5S74C73v18Ev");}
void  S74C7 ::v19(){vfunc_called(this, "_ZN5S74C73v19Ev");}
void  S74C7 ::v20(){vfunc_called(this, "_ZN5S74C73v20Ev");}
void  S74C7 ::v21(){vfunc_called(this, "_ZN5S74C73v21Ev");}
void  S74C7 ::v22(){vfunc_called(this, "_ZN5S74C73v22Ev");}
void  S74C7 ::v23(){vfunc_called(this, "_ZN5S74C73v23Ev");}
void  S74C7 ::v24(){vfunc_called(this, "_ZN5S74C73v24Ev");}
void  S74C7 ::v25(){vfunc_called(this, "_ZN5S74C73v25Ev");}
void  S74C7 ::v26(){vfunc_called(this, "_ZN5S74C73v26Ev");}
void  S74C7 ::v27(){vfunc_called(this, "_ZN5S74C73v27Ev");}
void  S74C7 ::v28(){vfunc_called(this, "_ZN5S74C73v28Ev");}
void  S74C7 ::v29(){vfunc_called(this, "_ZN5S74C73v29Ev");}
void  S74C7 ::v30(){vfunc_called(this, "_ZN5S74C73v30Ev");}
void  S74C7 ::v31(){vfunc_called(this, "_ZN5S74C73v31Ev");}
void  S74C7 ::v32(){vfunc_called(this, "_ZN5S74C73v32Ev");}
void  S74C7 ::v33(){vfunc_called(this, "_ZN5S74C73v33Ev");}
void  S74C7 ::v34(){vfunc_called(this, "_ZN5S74C73v34Ev");}
void  S74C7 ::v35(){vfunc_called(this, "_ZN5S74C73v35Ev");}
void  S74C7 ::v36(){vfunc_called(this, "_ZN5S74C73v36Ev");}
void  S74C7 ::v37(){vfunc_called(this, "_ZN5S74C73v37Ev");}
void  S74C7 ::v38(){vfunc_called(this, "_ZN5S74C73v38Ev");}
void  S74C7 ::v39(){vfunc_called(this, "_ZN5S74C73v39Ev");}
void  S74C7 ::v40(){vfunc_called(this, "_ZN5S74C73v40Ev");}
void  S74C7 ::v41(){vfunc_called(this, "_ZN5S74C73v41Ev");}
void  S74C7 ::v42(){vfunc_called(this, "_ZN5S74C73v42Ev");}
void  S74C7 ::v43(){vfunc_called(this, "_ZN5S74C73v43Ev");}
void  S74C7 ::v44(){vfunc_called(this, "_ZN5S74C73v44Ev");}
void  S74C7 ::v45(){vfunc_called(this, "_ZN5S74C73v45Ev");}
void  S74C7 ::v46(){vfunc_called(this, "_ZN5S74C73v46Ev");}
void  S74C7 ::v47(){vfunc_called(this, "_ZN5S74C73v47Ev");}
void  S74C7 ::v48(){vfunc_called(this, "_ZN5S74C73v48Ev");}
void  S74C7 ::v49(){vfunc_called(this, "_ZN5S74C73v49Ev");}
void  S74C7 ::v50(){vfunc_called(this, "_ZN5S74C73v50Ev");}
void  S74C7 ::v51(){vfunc_called(this, "_ZN5S74C73v51Ev");}
void  S74C7 ::v52(){vfunc_called(this, "_ZN5S74C73v52Ev");}
void  S74C7 ::v53(){vfunc_called(this, "_ZN5S74C73v53Ev");}
void  S74C7 ::v54(){vfunc_called(this, "_ZN5S74C73v54Ev");}
void  S74C7 ::v55(){vfunc_called(this, "_ZN5S74C73v55Ev");}
void  S74C7 ::v56(){vfunc_called(this, "_ZN5S74C73v56Ev");}
void  S74C7 ::v57(){vfunc_called(this, "_ZN5S74C73v57Ev");}
void  S74C7 ::v58(){vfunc_called(this, "_ZN5S74C73v58Ev");}
void  S74C7 ::v59(){vfunc_called(this, "_ZN5S74C73v59Ev");}
void  S74C7 ::v60(){vfunc_called(this, "_ZN5S74C73v60Ev");}
void  S74C7 ::v61(){vfunc_called(this, "_ZN5S74C73v61Ev");}
void  S74C7 ::v62(){vfunc_called(this, "_ZN5S74C73v62Ev");}
void  S74C7 ::v63(){vfunc_called(this, "_ZN5S74C73v63Ev");}
void  S74C7 ::v64(){vfunc_called(this, "_ZN5S74C73v64Ev");}
void  S74C7 ::v65(){vfunc_called(this, "_ZN5S74C73v65Ev");}
void  S74C7 ::v66(){vfunc_called(this, "_ZN5S74C73v66Ev");}
void  S74C7 ::v67(){vfunc_called(this, "_ZN5S74C73v67Ev");}
S74C7 ::S74C7(){ note_ctor("S74C7", this);} // tgen

static void Test_S74C7()
{
  extern Class_Descriptor cd_S74C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S74C7, buf);
    S74C7 *dp, &lv = *(dp=new (buf) S74C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S74C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S74C7)");
    check_field_offset(lv, s74c7f0, ABISELECT(8,4), "S74C7.s74c7f0");
    check_field_offset(lv, s74c7f1, ABISELECT(16,8), "S74C7.s74c7f1");
    check_field_offset(lv, s74c7f2, ABISELECT(24,16), "S74C7.s74c7f2");
    check_field_offset(lv, s74c7f3, ABISELECT(56,32), "S74C7.s74c7f3");
    check_field_offset(lv, s74c7f4, ABISELECT(64,40), "S74C7.s74c7f4");
    check_field_offset(lv, s74c7f5, ABISELECT(72,44), "S74C7.s74c7f5");
    check_field_offset(lv, s74c7f6, ABISELECT(80,52), "S74C7.s74c7f6");
    test_class_info(&lv, &cd_S74C7);
    dp->~S74C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS74C7(Test_S74C7, "S74C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S74C7C1Ev();
extern void _ZN5S74C7D1Ev();
Name_Map name_map_S74C7[] = {
  NSPAIR(_ZN5S74C7C1Ev),
  NSPAIR(_ZN5S74C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S74C7[];
extern void _ZN5S74C7D1Ev();
extern void _ZN5S74C7D0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
static  VTBL_ENTRY vtc_S74C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S74C7[0]),
  (VTBL_ENTRY)&_ZN5S74C7D1Ev,
  (VTBL_ENTRY)&_ZN5S74C7D0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
};
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
Class_Descriptor cd_S74C7 = {  "S74C7", // class name
  0,0,//no base classes
  &(vtc_S74C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S74C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S74C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C11  : S1409C8_nt {
};
//SIG(-1 S74C11) C1{ BC2{ m Fp Fi[2]}}



static void Test_S74C11()
{
  extern Class_Descriptor cd_S74C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S74C11, buf);
    S74C11 &lv = *(new (buf) S74C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S74C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S74C11)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S74C11");
    test_class_info(&lv, &cd_S74C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS74C11(Test_S74C11, "S74C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S74C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S74C11 = {  "S74C11", // class name
  bases_S74C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C10  : S74C11 {
};
//SIG(-1 S74C10) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S74C10()
{
  extern Class_Descriptor cd_S74C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S74C10, buf);
    S74C10 &lv = *(new (buf) S74C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S74C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S74C10)");
    check_base_class_offset(lv, (S1409C8_nt*)(S74C11*), 0, "S74C10");
    check_base_class_offset(lv, (S74C11*), 0, "S74C10");
    test_class_info(&lv, &cd_S74C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS74C10(Test_S74C10, "S74C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S74C11;
static Base_Class bases_S74C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S74C10 = {  "S74C10", // class name
  bases_S74C10, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C9_nt  : S74C10 {
};
//SIG(-1 S74C9_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S74C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S74C11;
extern Class_Descriptor cd_S74C10;
static Base_Class bases_S74C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S74C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C6_nt  : S74C7 {
  int s74c6f0[2];
  void *s74c6f1;
  int s74c6f2[2];
  ::S74C9_nt s74c6f3;
  ::S74C9_nt s74c6f4;
  ::S2265C38 s74c6f5;
  ::S74C9_nt s74c6f6;
  unsigned int s74c6f7:1;
  unsigned int s74c6f8:1;
  unsigned int s74c6f9:1;
  unsigned int s74c6f10:1;
  unsigned int s74c6f11:1;
  int s74c6f12[2];
  virtual  ~S74C6_nt(); // _ZN8S74C6_ntD1Ev
  virtual void  v68(); // _ZN8S74C6_nt3v68Ev
  virtual void  v69(); // _ZN8S74C6_nt3v69Ev
  virtual void  v70(); // _ZN8S74C6_nt3v70Ev
  virtual void  v71(); // _ZN8S74C6_nt3v71Ev
  virtual void  v72(); // _ZN8S74C6_nt3v72Ev
  virtual void  v73(); // _ZN8S74C6_nt3v73Ev
  virtual void  v74(); // _ZN8S74C6_nt3v74Ev
  virtual void  v75(); // _ZN8S74C6_nt3v75Ev
  virtual void  v76(); // _ZN8S74C6_nt3v76Ev
  virtual void  v77(); // _ZN8S74C6_nt3v77Ev
  virtual void  v78(); // _ZN8S74C6_nt3v78Ev
  virtual void  v79(); // _ZN8S74C6_nt3v79Ev
  virtual void  v80(); // _ZN8S74C6_nt3v80Ev
  virtual void  v81(); // _ZN8S74C6_nt3v81Ev
  virtual void  v82(); // _ZN8S74C6_nt3v82Ev
  virtual void  v83(); // _ZN8S74C6_nt3v83Ev
  virtual void  v84(); // _ZN8S74C6_nt3v84Ev
  virtual void  v85(); // _ZN8S74C6_nt3v85Ev
  virtual void  v86(); // _ZN8S74C6_nt3v86Ev
  virtual void  v87(); // _ZN8S74C6_nt3v87Ev
  virtual void  v88(); // _ZN8S74C6_nt3v88Ev
  virtual void  v89(); // _ZN8S74C6_nt3v89Ev
  S74C6_nt(); // tgen
};
//SIG(-1 S74C6_nt) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S74C6_nt ::~S74C6_nt(){ note_dtor("S74C6_nt", this);}
void  S74C6_nt ::v68(){vfunc_called(this, "_ZN8S74C6_nt3v68Ev");}
void  S74C6_nt ::v69(){vfunc_called(this, "_ZN8S74C6_nt3v69Ev");}
void  S74C6_nt ::v70(){vfunc_called(this, "_ZN8S74C6_nt3v70Ev");}
void  S74C6_nt ::v71(){vfunc_called(this, "_ZN8S74C6_nt3v71Ev");}
void  S74C6_nt ::v72(){vfunc_called(this, "_ZN8S74C6_nt3v72Ev");}
void  S74C6_nt ::v73(){vfunc_called(this, "_ZN8S74C6_nt3v73Ev");}
void  S74C6_nt ::v74(){vfunc_called(this, "_ZN8S74C6_nt3v74Ev");}
void  S74C6_nt ::v75(){vfunc_called(this, "_ZN8S74C6_nt3v75Ev");}
void  S74C6_nt ::v76(){vfunc_called(this, "_ZN8S74C6_nt3v76Ev");}
void  S74C6_nt ::v77(){vfunc_called(this, "_ZN8S74C6_nt3v77Ev");}
void  S74C6_nt ::v78(){vfunc_called(this, "_ZN8S74C6_nt3v78Ev");}
void  S74C6_nt ::v79(){vfunc_called(this, "_ZN8S74C6_nt3v79Ev");}
void  S74C6_nt ::v80(){vfunc_called(this, "_ZN8S74C6_nt3v80Ev");}
void  S74C6_nt ::v81(){vfunc_called(this, "_ZN8S74C6_nt3v81Ev");}
void  S74C6_nt ::v82(){vfunc_called(this, "_ZN8S74C6_nt3v82Ev");}
void  S74C6_nt ::v83(){vfunc_called(this, "_ZN8S74C6_nt3v83Ev");}
void  S74C6_nt ::v84(){vfunc_called(this, "_ZN8S74C6_nt3v84Ev");}
void  S74C6_nt ::v85(){vfunc_called(this, "_ZN8S74C6_nt3v85Ev");}
void  S74C6_nt ::v86(){vfunc_called(this, "_ZN8S74C6_nt3v86Ev");}
void  S74C6_nt ::v87(){vfunc_called(this, "_ZN8S74C6_nt3v87Ev");}
void  S74C6_nt ::v88(){vfunc_called(this, "_ZN8S74C6_nt3v88Ev");}
void  S74C6_nt ::v89(){vfunc_called(this, "_ZN8S74C6_nt3v89Ev");}
S74C6_nt ::S74C6_nt(){ note_ctor("S74C6_nt", this);} // tgen

//skip512 S74C6_nt

#else // __cplusplus

extern void _ZN8S74C6_ntC1Ev();
extern void _ZN8S74C6_ntD1Ev();
Name_Map name_map_S74C6_nt[] = {
  NSPAIR(_ZN8S74C6_ntC1Ev),
  NSPAIR(_ZN8S74C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S74C7;
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
static Base_Class bases_S74C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S74C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S74C6_nt[];
extern void _ZN8S74C6_ntD1Ev();
extern void _ZN8S74C6_ntD0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
extern void _ZN8S74C6_nt3v68Ev();
extern void _ZN8S74C6_nt3v69Ev();
extern void _ZN8S74C6_nt3v70Ev();
extern void _ZN8S74C6_nt3v71Ev();
extern void _ZN8S74C6_nt3v72Ev();
extern void _ZN8S74C6_nt3v73Ev();
extern void _ZN8S74C6_nt3v74Ev();
extern void _ZN8S74C6_nt3v75Ev();
extern void _ZN8S74C6_nt3v76Ev();
extern void _ZN8S74C6_nt3v77Ev();
extern void _ZN8S74C6_nt3v78Ev();
extern void _ZN8S74C6_nt3v79Ev();
extern void _ZN8S74C6_nt3v80Ev();
extern void _ZN8S74C6_nt3v81Ev();
extern void _ZN8S74C6_nt3v82Ev();
extern void _ZN8S74C6_nt3v83Ev();
extern void _ZN8S74C6_nt3v84Ev();
extern void _ZN8S74C6_nt3v85Ev();
extern void _ZN8S74C6_nt3v86Ev();
extern void _ZN8S74C6_nt3v87Ev();
extern void _ZN8S74C6_nt3v88Ev();
extern void _ZN8S74C6_nt3v89Ev();
static  VTBL_ENTRY vtc_S74C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S74C6_nt[0]),
  (VTBL_ENTRY)&_ZN8S74C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S74C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI8S74C6_nt[];
VTBL_ENTRY *P__ZTI8S74C6_nt = _ZTI8S74C6_nt; 
extern  VTBL_ENTRY _ZTV8S74C6_nt[];
Class_Descriptor cd_S74C6_nt = {  "S74C6_nt", // class name
  bases_S74C6_nt, 1,
  &(vtc_S74C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI8S74C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S74C6_nt),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C5_nt  : S74C6_nt {
  unsigned int s74c5f0:1;
  unsigned int s74c5f1:1;
  unsigned int s74c5f2:1;
  ::S1409C30 s74c5f3;
  ::S1409C26 s74c5f4;
  ::S1409C22 s74c5f5;
  ::S1409C18 s74c5f6;
  int s74c5f7[3];
  virtual  ~S74C5_nt(); // _ZN8S74C5_ntD1Ev
  virtual void  v90(); // _ZN8S74C5_nt3v90Ev
  virtual void  v91(); // _ZN8S74C5_nt3v91Ev
  virtual void  v92(); // _ZN8S74C5_nt3v92Ev
  virtual void  v93(); // _ZN8S74C5_nt3v93Ev
  virtual void  v94(); // _ZN8S74C5_nt3v94Ev
  virtual void  v95(); // _ZN8S74C5_nt3v95Ev
  virtual void  v96(); // _ZN8S74C5_nt3v96Ev
  virtual void  v97(); // _ZN8S74C5_nt3v97Ev
  virtual void  v98(); // _ZN8S74C5_nt3v98Ev
  virtual void  v99(); // _ZN8S74C5_nt3v99Ev
  virtual void  v100(); // _ZN8S74C5_nt4v100Ev
  virtual void  v101(); // _ZN8S74C5_nt4v101Ev
  virtual void  v102(); // _ZN8S74C5_nt4v102Ev
  virtual void  v103(); // _ZN8S74C5_nt4v103Ev
  virtual void  v104(); // _ZN8S74C5_nt4v104Ev
  virtual void  v105(); // _ZN8S74C5_nt4v105Ev
  virtual void  v106(); // _ZN8S74C5_nt4v106Ev
  virtual void  v107(); // _ZN8S74C5_nt4v107Ev
  virtual void  v108(); // _ZN8S74C5_nt4v108Ev
  virtual void  v109(); // _ZN8S74C5_nt4v109Ev
  S74C5_nt(); // tgen
};
//SIG(-1 S74C5_nt) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S74C5_nt ::~S74C5_nt(){ note_dtor("S74C5_nt", this);}
void  S74C5_nt ::v90(){vfunc_called(this, "_ZN8S74C5_nt3v90Ev");}
void  S74C5_nt ::v91(){vfunc_called(this, "_ZN8S74C5_nt3v91Ev");}
void  S74C5_nt ::v92(){vfunc_called(this, "_ZN8S74C5_nt3v92Ev");}
void  S74C5_nt ::v93(){vfunc_called(this, "_ZN8S74C5_nt3v93Ev");}
void  S74C5_nt ::v94(){vfunc_called(this, "_ZN8S74C5_nt3v94Ev");}
void  S74C5_nt ::v95(){vfunc_called(this, "_ZN8S74C5_nt3v95Ev");}
void  S74C5_nt ::v96(){vfunc_called(this, "_ZN8S74C5_nt3v96Ev");}
void  S74C5_nt ::v97(){vfunc_called(this, "_ZN8S74C5_nt3v97Ev");}
void  S74C5_nt ::v98(){vfunc_called(this, "_ZN8S74C5_nt3v98Ev");}
void  S74C5_nt ::v99(){vfunc_called(this, "_ZN8S74C5_nt3v99Ev");}
void  S74C5_nt ::v100(){vfunc_called(this, "_ZN8S74C5_nt4v100Ev");}
void  S74C5_nt ::v101(){vfunc_called(this, "_ZN8S74C5_nt4v101Ev");}
void  S74C5_nt ::v102(){vfunc_called(this, "_ZN8S74C5_nt4v102Ev");}
void  S74C5_nt ::v103(){vfunc_called(this, "_ZN8S74C5_nt4v103Ev");}
void  S74C5_nt ::v104(){vfunc_called(this, "_ZN8S74C5_nt4v104Ev");}
void  S74C5_nt ::v105(){vfunc_called(this, "_ZN8S74C5_nt4v105Ev");}
void  S74C5_nt ::v106(){vfunc_called(this, "_ZN8S74C5_nt4v106Ev");}
void  S74C5_nt ::v107(){vfunc_called(this, "_ZN8S74C5_nt4v107Ev");}
void  S74C5_nt ::v108(){vfunc_called(this, "_ZN8S74C5_nt4v108Ev");}
void  S74C5_nt ::v109(){vfunc_called(this, "_ZN8S74C5_nt4v109Ev");}
S74C5_nt ::S74C5_nt(){ note_ctor("S74C5_nt", this);} // tgen

//skip512 S74C5_nt

#else // __cplusplus

extern void _ZN8S74C5_ntC1Ev();
extern void _ZN8S74C5_ntD1Ev();
Name_Map name_map_S74C5_nt[] = {
  NSPAIR(_ZN8S74C5_ntC1Ev),
  NSPAIR(_ZN8S74C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S74C7;
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
extern Class_Descriptor cd_S74C6_nt;
extern VTBL_ENTRY _ZTI8S74C6_nt[];
extern  VTBL_ENTRY _ZTV8S74C6_nt[];
static Base_Class bases_S74C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S74C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S74C5_nt[];
extern void _ZN8S74C5_ntD1Ev();
extern void _ZN8S74C5_ntD0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
extern void _ZN8S74C6_nt3v68Ev();
extern void _ZN8S74C6_nt3v69Ev();
extern void _ZN8S74C6_nt3v70Ev();
extern void _ZN8S74C6_nt3v71Ev();
extern void _ZN8S74C6_nt3v72Ev();
extern void _ZN8S74C6_nt3v73Ev();
extern void _ZN8S74C6_nt3v74Ev();
extern void _ZN8S74C6_nt3v75Ev();
extern void _ZN8S74C6_nt3v76Ev();
extern void _ZN8S74C6_nt3v77Ev();
extern void _ZN8S74C6_nt3v78Ev();
extern void _ZN8S74C6_nt3v79Ev();
extern void _ZN8S74C6_nt3v80Ev();
extern void _ZN8S74C6_nt3v81Ev();
extern void _ZN8S74C6_nt3v82Ev();
extern void _ZN8S74C6_nt3v83Ev();
extern void _ZN8S74C6_nt3v84Ev();
extern void _ZN8S74C6_nt3v85Ev();
extern void _ZN8S74C6_nt3v86Ev();
extern void _ZN8S74C6_nt3v87Ev();
extern void _ZN8S74C6_nt3v88Ev();
extern void _ZN8S74C6_nt3v89Ev();
extern void _ZN8S74C5_nt3v90Ev();
extern void _ZN8S74C5_nt3v91Ev();
extern void _ZN8S74C5_nt3v92Ev();
extern void _ZN8S74C5_nt3v93Ev();
extern void _ZN8S74C5_nt3v94Ev();
extern void _ZN8S74C5_nt3v95Ev();
extern void _ZN8S74C5_nt3v96Ev();
extern void _ZN8S74C5_nt3v97Ev();
extern void _ZN8S74C5_nt3v98Ev();
extern void _ZN8S74C5_nt3v99Ev();
extern void _ZN8S74C5_nt4v100Ev();
extern void _ZN8S74C5_nt4v101Ev();
extern void _ZN8S74C5_nt4v102Ev();
extern void _ZN8S74C5_nt4v103Ev();
extern void _ZN8S74C5_nt4v104Ev();
extern void _ZN8S74C5_nt4v105Ev();
extern void _ZN8S74C5_nt4v106Ev();
extern void _ZN8S74C5_nt4v107Ev();
extern void _ZN8S74C5_nt4v108Ev();
extern void _ZN8S74C5_nt4v109Ev();
static  VTBL_ENTRY vtc_S74C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S74C5_nt[0]),
  (VTBL_ENTRY)&_ZN8S74C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S74C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v109Ev,
};
extern VTBL_ENTRY _ZTI8S74C5_nt[];
VTBL_ENTRY *P__ZTI8S74C5_nt = _ZTI8S74C5_nt; 
extern  VTBL_ENTRY _ZTV8S74C5_nt[];
Class_Descriptor cd_S74C5_nt = {  "S74C5_nt", // class name
  bases_S74C5_nt, 2,
  &(vtc_S74C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI8S74C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S74C5_nt),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C4_nt  : S74C5_nt {
  ::S1409C5_nt s74c4f0;
  unsigned int s74c4f1:1;
  ::S1409C12 s74c4f2;
  virtual  ~S74C4_nt(); // _ZN8S74C4_ntD1Ev
  virtual void  v110(); // _ZN8S74C4_nt4v110Ev
  virtual void  v111(); // _ZN8S74C4_nt4v111Ev
  virtual void  v112(); // _ZN8S74C4_nt4v112Ev
  virtual void  v113(); // _ZN8S74C4_nt4v113Ev
  S74C4_nt(); // tgen
};
//SIG(-1 S74C4_nt) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S74C4_nt ::~S74C4_nt(){ note_dtor("S74C4_nt", this);}
void  S74C4_nt ::v110(){vfunc_called(this, "_ZN8S74C4_nt4v110Ev");}
void  S74C4_nt ::v111(){vfunc_called(this, "_ZN8S74C4_nt4v111Ev");}
void  S74C4_nt ::v112(){vfunc_called(this, "_ZN8S74C4_nt4v112Ev");}
void  S74C4_nt ::v113(){vfunc_called(this, "_ZN8S74C4_nt4v113Ev");}
S74C4_nt ::S74C4_nt(){ note_ctor("S74C4_nt", this);} // tgen

//skip512 S74C4_nt

#else // __cplusplus

extern void _ZN8S74C4_ntC1Ev();
extern void _ZN8S74C4_ntD1Ev();
Name_Map name_map_S74C4_nt[] = {
  NSPAIR(_ZN8S74C4_ntC1Ev),
  NSPAIR(_ZN8S74C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S74C7;
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
extern Class_Descriptor cd_S74C6_nt;
extern VTBL_ENTRY _ZTI8S74C6_nt[];
extern  VTBL_ENTRY _ZTV8S74C6_nt[];
extern Class_Descriptor cd_S74C5_nt;
extern VTBL_ENTRY _ZTI8S74C5_nt[];
extern  VTBL_ENTRY _ZTV8S74C5_nt[];
static Base_Class bases_S74C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S74C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S74C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S74C4_nt[];
extern void _ZN8S74C4_ntD1Ev();
extern void _ZN8S74C4_ntD0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
extern void _ZN8S74C6_nt3v68Ev();
extern void _ZN8S74C6_nt3v69Ev();
extern void _ZN8S74C6_nt3v70Ev();
extern void _ZN8S74C6_nt3v71Ev();
extern void _ZN8S74C6_nt3v72Ev();
extern void _ZN8S74C6_nt3v73Ev();
extern void _ZN8S74C6_nt3v74Ev();
extern void _ZN8S74C6_nt3v75Ev();
extern void _ZN8S74C6_nt3v76Ev();
extern void _ZN8S74C6_nt3v77Ev();
extern void _ZN8S74C6_nt3v78Ev();
extern void _ZN8S74C6_nt3v79Ev();
extern void _ZN8S74C6_nt3v80Ev();
extern void _ZN8S74C6_nt3v81Ev();
extern void _ZN8S74C6_nt3v82Ev();
extern void _ZN8S74C6_nt3v83Ev();
extern void _ZN8S74C6_nt3v84Ev();
extern void _ZN8S74C6_nt3v85Ev();
extern void _ZN8S74C6_nt3v86Ev();
extern void _ZN8S74C6_nt3v87Ev();
extern void _ZN8S74C6_nt3v88Ev();
extern void _ZN8S74C6_nt3v89Ev();
extern void _ZN8S74C5_nt3v90Ev();
extern void _ZN8S74C5_nt3v91Ev();
extern void _ZN8S74C5_nt3v92Ev();
extern void _ZN8S74C5_nt3v93Ev();
extern void _ZN8S74C5_nt3v94Ev();
extern void _ZN8S74C5_nt3v95Ev();
extern void _ZN8S74C5_nt3v96Ev();
extern void _ZN8S74C5_nt3v97Ev();
extern void _ZN8S74C5_nt3v98Ev();
extern void _ZN8S74C5_nt3v99Ev();
extern void _ZN8S74C5_nt4v100Ev();
extern void _ZN8S74C5_nt4v101Ev();
extern void _ZN8S74C5_nt4v102Ev();
extern void _ZN8S74C5_nt4v103Ev();
extern void _ZN8S74C5_nt4v104Ev();
extern void _ZN8S74C5_nt4v105Ev();
extern void _ZN8S74C5_nt4v106Ev();
extern void _ZN8S74C5_nt4v107Ev();
extern void _ZN8S74C5_nt4v108Ev();
extern void _ZN8S74C5_nt4v109Ev();
extern void _ZN8S74C4_nt4v110Ev();
extern void _ZN8S74C4_nt4v111Ev();
extern void _ZN8S74C4_nt4v112Ev();
extern void _ZN8S74C4_nt4v113Ev();
static  VTBL_ENTRY vtc_S74C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S74C4_nt[0]),
  (VTBL_ENTRY)&_ZN8S74C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S74C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI8S74C4_nt[];
VTBL_ENTRY *P__ZTI8S74C4_nt = _ZTI8S74C4_nt; 
extern  VTBL_ENTRY _ZTV8S74C4_nt[];
Class_Descriptor cd_S74C4_nt = {  "S74C4_nt", // class name
  bases_S74C4_nt, 3,
  &(vtc_S74C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI8S74C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S74C4_nt),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C3_nt  : S74C4_nt {
  int s74c3f0;
  unsigned int s74c3f1:1;
  virtual  ~S74C3_nt(); // _ZN8S74C3_ntD1Ev
  virtual void  v114(); // _ZN8S74C3_nt4v114Ev
  virtual void  v115(); // _ZN8S74C3_nt4v115Ev
  virtual void  v116(); // _ZN8S74C3_nt4v116Ev
  virtual void  v117(); // _ZN8S74C3_nt4v117Ev
  virtual void  v118(); // _ZN8S74C3_nt4v118Ev
  virtual void  v119(); // _ZN8S74C3_nt4v119Ev
  virtual void  v120(); // _ZN8S74C3_nt4v120Ev
  virtual void  v121(); // _ZN8S74C3_nt4v121Ev
  S74C3_nt(); // tgen
};
//SIG(-1 S74C3_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S74C3_nt ::~S74C3_nt(){ note_dtor("S74C3_nt", this);}
void  S74C3_nt ::v114(){vfunc_called(this, "_ZN8S74C3_nt4v114Ev");}
void  S74C3_nt ::v115(){vfunc_called(this, "_ZN8S74C3_nt4v115Ev");}
void  S74C3_nt ::v116(){vfunc_called(this, "_ZN8S74C3_nt4v116Ev");}
void  S74C3_nt ::v117(){vfunc_called(this, "_ZN8S74C3_nt4v117Ev");}
void  S74C3_nt ::v118(){vfunc_called(this, "_ZN8S74C3_nt4v118Ev");}
void  S74C3_nt ::v119(){vfunc_called(this, "_ZN8S74C3_nt4v119Ev");}
void  S74C3_nt ::v120(){vfunc_called(this, "_ZN8S74C3_nt4v120Ev");}
void  S74C3_nt ::v121(){vfunc_called(this, "_ZN8S74C3_nt4v121Ev");}
S74C3_nt ::S74C3_nt(){ note_ctor("S74C3_nt", this);} // tgen

//skip512 S74C3_nt

#else // __cplusplus

extern void _ZN8S74C3_ntC1Ev();
extern void _ZN8S74C3_ntD1Ev();
Name_Map name_map_S74C3_nt[] = {
  NSPAIR(_ZN8S74C3_ntC1Ev),
  NSPAIR(_ZN8S74C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S74C7;
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
extern Class_Descriptor cd_S74C6_nt;
extern VTBL_ENTRY _ZTI8S74C6_nt[];
extern  VTBL_ENTRY _ZTV8S74C6_nt[];
extern Class_Descriptor cd_S74C5_nt;
extern VTBL_ENTRY _ZTI8S74C5_nt[];
extern  VTBL_ENTRY _ZTV8S74C5_nt[];
extern Class_Descriptor cd_S74C4_nt;
extern VTBL_ENTRY _ZTI8S74C4_nt[];
extern  VTBL_ENTRY _ZTV8S74C4_nt[];
static Base_Class bases_S74C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S74C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S74C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S74C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S74C3_nt[];
extern void _ZN8S74C3_ntD1Ev();
extern void _ZN8S74C3_ntD0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
extern void _ZN8S74C6_nt3v68Ev();
extern void _ZN8S74C6_nt3v69Ev();
extern void _ZN8S74C6_nt3v70Ev();
extern void _ZN8S74C6_nt3v71Ev();
extern void _ZN8S74C6_nt3v72Ev();
extern void _ZN8S74C6_nt3v73Ev();
extern void _ZN8S74C6_nt3v74Ev();
extern void _ZN8S74C6_nt3v75Ev();
extern void _ZN8S74C6_nt3v76Ev();
extern void _ZN8S74C6_nt3v77Ev();
extern void _ZN8S74C6_nt3v78Ev();
extern void _ZN8S74C6_nt3v79Ev();
extern void _ZN8S74C6_nt3v80Ev();
extern void _ZN8S74C6_nt3v81Ev();
extern void _ZN8S74C6_nt3v82Ev();
extern void _ZN8S74C6_nt3v83Ev();
extern void _ZN8S74C6_nt3v84Ev();
extern void _ZN8S74C6_nt3v85Ev();
extern void _ZN8S74C6_nt3v86Ev();
extern void _ZN8S74C6_nt3v87Ev();
extern void _ZN8S74C6_nt3v88Ev();
extern void _ZN8S74C6_nt3v89Ev();
extern void _ZN8S74C5_nt3v90Ev();
extern void _ZN8S74C5_nt3v91Ev();
extern void _ZN8S74C5_nt3v92Ev();
extern void _ZN8S74C5_nt3v93Ev();
extern void _ZN8S74C5_nt3v94Ev();
extern void _ZN8S74C5_nt3v95Ev();
extern void _ZN8S74C5_nt3v96Ev();
extern void _ZN8S74C5_nt3v97Ev();
extern void _ZN8S74C5_nt3v98Ev();
extern void _ZN8S74C5_nt3v99Ev();
extern void _ZN8S74C5_nt4v100Ev();
extern void _ZN8S74C5_nt4v101Ev();
extern void _ZN8S74C5_nt4v102Ev();
extern void _ZN8S74C5_nt4v103Ev();
extern void _ZN8S74C5_nt4v104Ev();
extern void _ZN8S74C5_nt4v105Ev();
extern void _ZN8S74C5_nt4v106Ev();
extern void _ZN8S74C5_nt4v107Ev();
extern void _ZN8S74C5_nt4v108Ev();
extern void _ZN8S74C5_nt4v109Ev();
extern void _ZN8S74C4_nt4v110Ev();
extern void _ZN8S74C4_nt4v111Ev();
extern void _ZN8S74C4_nt4v112Ev();
extern void _ZN8S74C4_nt4v113Ev();
extern void _ZN8S74C3_nt4v114Ev();
extern void _ZN8S74C3_nt4v115Ev();
extern void _ZN8S74C3_nt4v116Ev();
extern void _ZN8S74C3_nt4v117Ev();
extern void _ZN8S74C3_nt4v118Ev();
extern void _ZN8S74C3_nt4v119Ev();
extern void _ZN8S74C3_nt4v120Ev();
extern void _ZN8S74C3_nt4v121Ev();
static  VTBL_ENTRY vtc_S74C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S74C3_nt[0]),
  (VTBL_ENTRY)&_ZN8S74C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S74C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v121Ev,
};
extern VTBL_ENTRY _ZTI8S74C3_nt[];
VTBL_ENTRY *P__ZTI8S74C3_nt = _ZTI8S74C3_nt; 
extern  VTBL_ENTRY _ZTV8S74C3_nt[];
Class_Descriptor cd_S74C3_nt = {  "S74C3_nt", // class name
  bases_S74C3_nt, 4,
  &(vtc_S74C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI8S74C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S74C3_nt),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C2  : S74C3_nt {
  void *s74c2f0[2];
  unsigned int s74c2f1:1;
  virtual  ~S74C2(); // _ZN5S74C2D1Ev
  virtual void  v122(); // _ZN5S74C24v122Ev
  virtual void  v123(); // _ZN5S74C24v123Ev
  S74C2(); // tgen
};
//SIG(-1 S74C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fp[2] Fi:1}


 S74C2 ::~S74C2(){ note_dtor("S74C2", this);}
void  S74C2 ::v122(){vfunc_called(this, "_ZN5S74C24v122Ev");}
void  S74C2 ::v123(){vfunc_called(this, "_ZN5S74C24v123Ev");}
S74C2 ::S74C2(){ note_ctor("S74C2", this);} // tgen

static void Test_S74C2()
{
  extern Class_Descriptor cd_S74C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,61)];
    init_test(&cd_S74C2, buf);
    S74C2 *dp, &lv = *(dp=new (buf) S74C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,240), "sizeof(S74C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S74C2)");
    check_base_class_offset(lv, (S74C7*)(S74C6_nt*)(S74C5_nt*)(S74C4_nt*)(S74C3_nt*), 0, "S74C2");
    check_base_class_offset(lv, (S74C6_nt*)(S74C5_nt*)(S74C4_nt*)(S74C3_nt*), 0, "S74C2");
    check_base_class_offset(lv, (S74C5_nt*)(S74C4_nt*)(S74C3_nt*), 0, "S74C2");
    check_base_class_offset(lv, (S74C4_nt*)(S74C3_nt*), 0, "S74C2");
    check_base_class_offset(lv, (S74C3_nt*), 0, "S74C2");
    check_field_offset(lv, s74c2f0, ABISELECT(304,228), "S74C2.s74c2f0");
    set_bf_and_test(lv, s74c2f1, ABISELECT(320,236), 0, 1, 1, "S74C2");
    test_class_info(&lv, &cd_S74C2);
    dp->~S74C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS74C2(Test_S74C2, "S74C2", ABISELECT(328,240));

#else // __cplusplus

extern void _ZN5S74C2C1Ev();
extern void _ZN5S74C2D1Ev();
Name_Map name_map_S74C2[] = {
  NSPAIR(_ZN5S74C2C1Ev),
  NSPAIR(_ZN5S74C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S74C7;
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
extern Class_Descriptor cd_S74C6_nt;
extern VTBL_ENTRY _ZTI8S74C6_nt[];
extern  VTBL_ENTRY _ZTV8S74C6_nt[];
extern Class_Descriptor cd_S74C5_nt;
extern VTBL_ENTRY _ZTI8S74C5_nt[];
extern  VTBL_ENTRY _ZTV8S74C5_nt[];
extern Class_Descriptor cd_S74C4_nt;
extern VTBL_ENTRY _ZTI8S74C4_nt[];
extern  VTBL_ENTRY _ZTV8S74C4_nt[];
extern Class_Descriptor cd_S74C3_nt;
extern VTBL_ENTRY _ZTI8S74C3_nt[];
extern  VTBL_ENTRY _ZTV8S74C3_nt[];
static Base_Class bases_S74C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S74C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S74C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S74C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S74C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S74C2[];
extern void _ZN5S74C2D1Ev();
extern void _ZN5S74C2D0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
extern void _ZN8S74C6_nt3v68Ev();
extern void _ZN8S74C6_nt3v69Ev();
extern void _ZN8S74C6_nt3v70Ev();
extern void _ZN8S74C6_nt3v71Ev();
extern void _ZN8S74C6_nt3v72Ev();
extern void _ZN8S74C6_nt3v73Ev();
extern void _ZN8S74C6_nt3v74Ev();
extern void _ZN8S74C6_nt3v75Ev();
extern void _ZN8S74C6_nt3v76Ev();
extern void _ZN8S74C6_nt3v77Ev();
extern void _ZN8S74C6_nt3v78Ev();
extern void _ZN8S74C6_nt3v79Ev();
extern void _ZN8S74C6_nt3v80Ev();
extern void _ZN8S74C6_nt3v81Ev();
extern void _ZN8S74C6_nt3v82Ev();
extern void _ZN8S74C6_nt3v83Ev();
extern void _ZN8S74C6_nt3v84Ev();
extern void _ZN8S74C6_nt3v85Ev();
extern void _ZN8S74C6_nt3v86Ev();
extern void _ZN8S74C6_nt3v87Ev();
extern void _ZN8S74C6_nt3v88Ev();
extern void _ZN8S74C6_nt3v89Ev();
extern void _ZN8S74C5_nt3v90Ev();
extern void _ZN8S74C5_nt3v91Ev();
extern void _ZN8S74C5_nt3v92Ev();
extern void _ZN8S74C5_nt3v93Ev();
extern void _ZN8S74C5_nt3v94Ev();
extern void _ZN8S74C5_nt3v95Ev();
extern void _ZN8S74C5_nt3v96Ev();
extern void _ZN8S74C5_nt3v97Ev();
extern void _ZN8S74C5_nt3v98Ev();
extern void _ZN8S74C5_nt3v99Ev();
extern void _ZN8S74C5_nt4v100Ev();
extern void _ZN8S74C5_nt4v101Ev();
extern void _ZN8S74C5_nt4v102Ev();
extern void _ZN8S74C5_nt4v103Ev();
extern void _ZN8S74C5_nt4v104Ev();
extern void _ZN8S74C5_nt4v105Ev();
extern void _ZN8S74C5_nt4v106Ev();
extern void _ZN8S74C5_nt4v107Ev();
extern void _ZN8S74C5_nt4v108Ev();
extern void _ZN8S74C5_nt4v109Ev();
extern void _ZN8S74C4_nt4v110Ev();
extern void _ZN8S74C4_nt4v111Ev();
extern void _ZN8S74C4_nt4v112Ev();
extern void _ZN8S74C4_nt4v113Ev();
extern void _ZN8S74C3_nt4v114Ev();
extern void _ZN8S74C3_nt4v115Ev();
extern void _ZN8S74C3_nt4v116Ev();
extern void _ZN8S74C3_nt4v117Ev();
extern void _ZN8S74C3_nt4v118Ev();
extern void _ZN8S74C3_nt4v119Ev();
extern void _ZN8S74C3_nt4v120Ev();
extern void _ZN8S74C3_nt4v121Ev();
extern void _ZN5S74C24v122Ev();
extern void _ZN5S74C24v123Ev();
static  VTBL_ENTRY vtc_S74C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S74C2[0]),
  (VTBL_ENTRY)&_ZN5S74C2D1Ev,
  (VTBL_ENTRY)&_ZN5S74C2D0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN5S74C24v122Ev,
  (VTBL_ENTRY)&_ZN5S74C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S74C2[];
extern  VTBL_ENTRY _ZTV5S74C2[];
Class_Descriptor cd_S74C2 = {  "S74C2", // class name
  bases_S74C2, 5,
  &(vtc_S74C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,240), // object size
  NSPAIRA(_ZTI5S74C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S74C2),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S74C1  : S74C2 {
  virtual  ~S74C1(); // _ZN5S74C1D1Ev
  virtual void  v1(); // _ZN5S74C12v1Ev
  virtual void  v2(); // _ZN5S74C12v2Ev
  virtual void  v3(); // _ZN5S74C12v3Ev
  S74C1(); // tgen
};
//SIG(1 S74C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v110 v111 v112 v113 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fp[2] Fi:1} vd v1 v2 v3}


 S74C1 ::~S74C1(){ note_dtor("S74C1", this);}
void  S74C1 ::v1(){vfunc_called(this, "_ZN5S74C12v1Ev");}
void  S74C1 ::v2(){vfunc_called(this, "_ZN5S74C12v2Ev");}
void  S74C1 ::v3(){vfunc_called(this, "_ZN5S74C12v3Ev");}
S74C1 ::S74C1(){ note_ctor("S74C1", this);} // tgen

static void Test_S74C1()
{
  extern Class_Descriptor cd_S74C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,61)];
    init_test(&cd_S74C1, buf);
    S74C1 *dp, &lv = *(dp=new (buf) S74C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,240), "sizeof(S74C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S74C1)");
    check_base_class_offset(lv, (S74C7*)(S74C6_nt*)(S74C5_nt*)(S74C4_nt*)(S74C3_nt*)(S74C2*), 0, "S74C1");
    check_base_class_offset(lv, (S74C6_nt*)(S74C5_nt*)(S74C4_nt*)(S74C3_nt*)(S74C2*), 0, "S74C1");
    check_base_class_offset(lv, (S74C5_nt*)(S74C4_nt*)(S74C3_nt*)(S74C2*), 0, "S74C1");
    check_base_class_offset(lv, (S74C4_nt*)(S74C3_nt*)(S74C2*), 0, "S74C1");
    check_base_class_offset(lv, (S74C3_nt*)(S74C2*), 0, "S74C1");
    check_base_class_offset(lv, (S74C2*), 0, "S74C1");
    test_class_info(&lv, &cd_S74C1);
    dp->~S74C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS74C1(Test_S74C1, "S74C1", ABISELECT(328,240));

#else // __cplusplus

extern void _ZN5S74C1C1Ev();
extern void _ZN5S74C1D1Ev();
Name_Map name_map_S74C1[] = {
  NSPAIR(_ZN5S74C1C1Ev),
  NSPAIR(_ZN5S74C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S74C7;
extern VTBL_ENTRY _ZTI5S74C7[];
extern  VTBL_ENTRY _ZTV5S74C7[];
extern Class_Descriptor cd_S74C6_nt;
extern VTBL_ENTRY _ZTI8S74C6_nt[];
extern  VTBL_ENTRY _ZTV8S74C6_nt[];
extern Class_Descriptor cd_S74C5_nt;
extern VTBL_ENTRY _ZTI8S74C5_nt[];
extern  VTBL_ENTRY _ZTV8S74C5_nt[];
extern Class_Descriptor cd_S74C4_nt;
extern VTBL_ENTRY _ZTI8S74C4_nt[];
extern  VTBL_ENTRY _ZTV8S74C4_nt[];
extern Class_Descriptor cd_S74C3_nt;
extern VTBL_ENTRY _ZTI8S74C3_nt[];
extern  VTBL_ENTRY _ZTV8S74C3_nt[];
extern Class_Descriptor cd_S74C2;
extern VTBL_ENTRY _ZTI5S74C2[];
extern  VTBL_ENTRY _ZTV5S74C2[];
static Base_Class bases_S74C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S74C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S74C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S74C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S74C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S74C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S74C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S74C1[];
extern void _ZN5S74C1D1Ev();
extern void _ZN5S74C1D0Ev();
extern void _ZN5S74C72v4Ev();
extern void _ZN5S74C72v5Ev();
extern void _ZN5S74C72v6Ev();
extern void _ZN5S74C72v7Ev();
extern void _ZN5S74C72v8Ev();
extern void _ZN5S74C72v9Ev();
extern void _ZN5S74C73v10Ev();
extern void _ZN5S74C73v11Ev();
extern void _ZN5S74C73v12Ev();
extern void _ZN5S74C73v13Ev();
extern void _ZN5S74C73v14Ev();
extern void _ZN5S74C73v15Ev();
extern void _ZN5S74C73v16Ev();
extern void _ZN5S74C73v17Ev();
extern void _ZN5S74C73v18Ev();
extern void _ZN5S74C73v19Ev();
extern void _ZN5S74C73v20Ev();
extern void _ZN5S74C73v21Ev();
extern void _ZN5S74C73v22Ev();
extern void _ZN5S74C73v23Ev();
extern void _ZN5S74C73v24Ev();
extern void _ZN5S74C73v25Ev();
extern void _ZN5S74C73v26Ev();
extern void _ZN5S74C73v27Ev();
extern void _ZN5S74C73v28Ev();
extern void _ZN5S74C73v29Ev();
extern void _ZN5S74C73v30Ev();
extern void _ZN5S74C73v31Ev();
extern void _ZN5S74C73v32Ev();
extern void _ZN5S74C73v33Ev();
extern void _ZN5S74C73v34Ev();
extern void _ZN5S74C73v35Ev();
extern void _ZN5S74C73v36Ev();
extern void _ZN5S74C73v37Ev();
extern void _ZN5S74C73v38Ev();
extern void _ZN5S74C73v39Ev();
extern void _ZN5S74C73v40Ev();
extern void _ZN5S74C73v41Ev();
extern void _ZN5S74C73v42Ev();
extern void _ZN5S74C73v43Ev();
extern void _ZN5S74C73v44Ev();
extern void _ZN5S74C73v45Ev();
extern void _ZN5S74C73v46Ev();
extern void _ZN5S74C73v47Ev();
extern void _ZN5S74C73v48Ev();
extern void _ZN5S74C73v49Ev();
extern void _ZN5S74C73v50Ev();
extern void _ZN5S74C73v51Ev();
extern void _ZN5S74C73v52Ev();
extern void _ZN5S74C73v53Ev();
extern void _ZN5S74C73v54Ev();
extern void _ZN5S74C73v55Ev();
extern void _ZN5S74C73v56Ev();
extern void _ZN5S74C73v57Ev();
extern void _ZN5S74C73v58Ev();
extern void _ZN5S74C73v59Ev();
extern void _ZN5S74C73v60Ev();
extern void _ZN5S74C73v61Ev();
extern void _ZN5S74C73v62Ev();
extern void _ZN5S74C73v63Ev();
extern void _ZN5S74C73v64Ev();
extern void _ZN5S74C73v65Ev();
extern void _ZN5S74C73v66Ev();
extern void _ZN5S74C73v67Ev();
extern void _ZN8S74C6_nt3v68Ev();
extern void _ZN8S74C6_nt3v69Ev();
extern void _ZN8S74C6_nt3v70Ev();
extern void _ZN8S74C6_nt3v71Ev();
extern void _ZN8S74C6_nt3v72Ev();
extern void _ZN8S74C6_nt3v73Ev();
extern void _ZN8S74C6_nt3v74Ev();
extern void _ZN8S74C6_nt3v75Ev();
extern void _ZN8S74C6_nt3v76Ev();
extern void _ZN8S74C6_nt3v77Ev();
extern void _ZN8S74C6_nt3v78Ev();
extern void _ZN8S74C6_nt3v79Ev();
extern void _ZN8S74C6_nt3v80Ev();
extern void _ZN8S74C6_nt3v81Ev();
extern void _ZN8S74C6_nt3v82Ev();
extern void _ZN8S74C6_nt3v83Ev();
extern void _ZN8S74C6_nt3v84Ev();
extern void _ZN8S74C6_nt3v85Ev();
extern void _ZN8S74C6_nt3v86Ev();
extern void _ZN8S74C6_nt3v87Ev();
extern void _ZN8S74C6_nt3v88Ev();
extern void _ZN8S74C6_nt3v89Ev();
extern void _ZN8S74C5_nt3v90Ev();
extern void _ZN8S74C5_nt3v91Ev();
extern void _ZN8S74C5_nt3v92Ev();
extern void _ZN8S74C5_nt3v93Ev();
extern void _ZN8S74C5_nt3v94Ev();
extern void _ZN8S74C5_nt3v95Ev();
extern void _ZN8S74C5_nt3v96Ev();
extern void _ZN8S74C5_nt3v97Ev();
extern void _ZN8S74C5_nt3v98Ev();
extern void _ZN8S74C5_nt3v99Ev();
extern void _ZN8S74C5_nt4v100Ev();
extern void _ZN8S74C5_nt4v101Ev();
extern void _ZN8S74C5_nt4v102Ev();
extern void _ZN8S74C5_nt4v103Ev();
extern void _ZN8S74C5_nt4v104Ev();
extern void _ZN8S74C5_nt4v105Ev();
extern void _ZN8S74C5_nt4v106Ev();
extern void _ZN8S74C5_nt4v107Ev();
extern void _ZN8S74C5_nt4v108Ev();
extern void _ZN8S74C5_nt4v109Ev();
extern void _ZN8S74C4_nt4v110Ev();
extern void _ZN8S74C4_nt4v111Ev();
extern void _ZN8S74C4_nt4v112Ev();
extern void _ZN8S74C4_nt4v113Ev();
extern void _ZN8S74C3_nt4v114Ev();
extern void _ZN8S74C3_nt4v115Ev();
extern void _ZN8S74C3_nt4v116Ev();
extern void _ZN8S74C3_nt4v117Ev();
extern void _ZN8S74C3_nt4v118Ev();
extern void _ZN8S74C3_nt4v119Ev();
extern void _ZN8S74C3_nt4v120Ev();
extern void _ZN8S74C3_nt4v121Ev();
extern void _ZN5S74C24v122Ev();
extern void _ZN5S74C24v123Ev();
extern void _ZN5S74C12v1Ev();
extern void _ZN5S74C12v2Ev();
extern void _ZN5S74C12v3Ev();
static  VTBL_ENTRY vtc_S74C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S74C1[0]),
  (VTBL_ENTRY)&_ZN5S74C1D1Ev,
  (VTBL_ENTRY)&_ZN5S74C1D0Ev,
  (VTBL_ENTRY)&_ZN5S74C72v4Ev,
  (VTBL_ENTRY)&_ZN5S74C72v5Ev,
  (VTBL_ENTRY)&_ZN5S74C72v6Ev,
  (VTBL_ENTRY)&_ZN5S74C72v7Ev,
  (VTBL_ENTRY)&_ZN5S74C72v8Ev,
  (VTBL_ENTRY)&_ZN5S74C72v9Ev,
  (VTBL_ENTRY)&_ZN5S74C73v10Ev,
  (VTBL_ENTRY)&_ZN5S74C73v11Ev,
  (VTBL_ENTRY)&_ZN5S74C73v12Ev,
  (VTBL_ENTRY)&_ZN5S74C73v13Ev,
  (VTBL_ENTRY)&_ZN5S74C73v14Ev,
  (VTBL_ENTRY)&_ZN5S74C73v15Ev,
  (VTBL_ENTRY)&_ZN5S74C73v16Ev,
  (VTBL_ENTRY)&_ZN5S74C73v17Ev,
  (VTBL_ENTRY)&_ZN5S74C73v18Ev,
  (VTBL_ENTRY)&_ZN5S74C73v19Ev,
  (VTBL_ENTRY)&_ZN5S74C73v20Ev,
  (VTBL_ENTRY)&_ZN5S74C73v21Ev,
  (VTBL_ENTRY)&_ZN5S74C73v22Ev,
  (VTBL_ENTRY)&_ZN5S74C73v23Ev,
  (VTBL_ENTRY)&_ZN5S74C73v24Ev,
  (VTBL_ENTRY)&_ZN5S74C73v25Ev,
  (VTBL_ENTRY)&_ZN5S74C73v26Ev,
  (VTBL_ENTRY)&_ZN5S74C73v27Ev,
  (VTBL_ENTRY)&_ZN5S74C73v28Ev,
  (VTBL_ENTRY)&_ZN5S74C73v29Ev,
  (VTBL_ENTRY)&_ZN5S74C73v30Ev,
  (VTBL_ENTRY)&_ZN5S74C73v31Ev,
  (VTBL_ENTRY)&_ZN5S74C73v32Ev,
  (VTBL_ENTRY)&_ZN5S74C73v33Ev,
  (VTBL_ENTRY)&_ZN5S74C73v34Ev,
  (VTBL_ENTRY)&_ZN5S74C73v35Ev,
  (VTBL_ENTRY)&_ZN5S74C73v36Ev,
  (VTBL_ENTRY)&_ZN5S74C73v37Ev,
  (VTBL_ENTRY)&_ZN5S74C73v38Ev,
  (VTBL_ENTRY)&_ZN5S74C73v39Ev,
  (VTBL_ENTRY)&_ZN5S74C73v40Ev,
  (VTBL_ENTRY)&_ZN5S74C73v41Ev,
  (VTBL_ENTRY)&_ZN5S74C73v42Ev,
  (VTBL_ENTRY)&_ZN5S74C73v43Ev,
  (VTBL_ENTRY)&_ZN5S74C73v44Ev,
  (VTBL_ENTRY)&_ZN5S74C73v45Ev,
  (VTBL_ENTRY)&_ZN5S74C73v46Ev,
  (VTBL_ENTRY)&_ZN5S74C73v47Ev,
  (VTBL_ENTRY)&_ZN5S74C73v48Ev,
  (VTBL_ENTRY)&_ZN5S74C73v49Ev,
  (VTBL_ENTRY)&_ZN5S74C73v50Ev,
  (VTBL_ENTRY)&_ZN5S74C73v51Ev,
  (VTBL_ENTRY)&_ZN5S74C73v52Ev,
  (VTBL_ENTRY)&_ZN5S74C73v53Ev,
  (VTBL_ENTRY)&_ZN5S74C73v54Ev,
  (VTBL_ENTRY)&_ZN5S74C73v55Ev,
  (VTBL_ENTRY)&_ZN5S74C73v56Ev,
  (VTBL_ENTRY)&_ZN5S74C73v57Ev,
  (VTBL_ENTRY)&_ZN5S74C73v58Ev,
  (VTBL_ENTRY)&_ZN5S74C73v59Ev,
  (VTBL_ENTRY)&_ZN5S74C73v60Ev,
  (VTBL_ENTRY)&_ZN5S74C73v61Ev,
  (VTBL_ENTRY)&_ZN5S74C73v62Ev,
  (VTBL_ENTRY)&_ZN5S74C73v63Ev,
  (VTBL_ENTRY)&_ZN5S74C73v64Ev,
  (VTBL_ENTRY)&_ZN5S74C73v65Ev,
  (VTBL_ENTRY)&_ZN5S74C73v66Ev,
  (VTBL_ENTRY)&_ZN5S74C73v67Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v81Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v82Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v83Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v84Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v85Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v86Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v87Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v88Ev,
  (VTBL_ENTRY)&_ZN8S74C6_nt3v89Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v93Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v94Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v95Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v96Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v97Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v98Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt3v99Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v100Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v101Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v102Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v103Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v104Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v105Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v106Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v107Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v108Ev,
  (VTBL_ENTRY)&_ZN8S74C5_nt4v109Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN8S74C4_nt4v113Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN8S74C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN5S74C24v122Ev,
  (VTBL_ENTRY)&_ZN5S74C24v123Ev,
  (VTBL_ENTRY)&_ZN5S74C12v1Ev,
  (VTBL_ENTRY)&_ZN5S74C12v2Ev,
  (VTBL_ENTRY)&_ZN5S74C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S74C1[];
extern  VTBL_ENTRY _ZTV5S74C1[];
Class_Descriptor cd_S74C1 = {  "S74C1", // class name
  bases_S74C1, 6,
  &(vtc_S74C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,240), // object size
  NSPAIRA(_ZTI5S74C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S74C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S206C6  {
  int s206c6f0;
  __tsi64 s206c6f1;
  void *s206c6f2[4];
  int s206c6f3[2];
  void *s206c6f4;
  ::S1409C5_nt s206c6f5;
  void *s206c6f6[2];
  virtual  ~S206C6(); // _ZN6S206C6D1Ev
  virtual void  v4(); // _ZN6S206C62v4Ev
  virtual void  v5(); // _ZN6S206C62v5Ev
  virtual void  v6(); // _ZN6S206C62v6Ev
  virtual void  v7(); // _ZN6S206C62v7Ev
  virtual void  v8(); // _ZN6S206C62v8Ev
  virtual void  v9(); // _ZN6S206C62v9Ev
  virtual void  v10(); // _ZN6S206C63v10Ev
  virtual void  v11(); // _ZN6S206C63v11Ev
  virtual void  v12(); // _ZN6S206C63v12Ev
  virtual void  v13(); // _ZN6S206C63v13Ev
  virtual void  v14(); // _ZN6S206C63v14Ev
  virtual void  v15(); // _ZN6S206C63v15Ev
  virtual void  v16(); // _ZN6S206C63v16Ev
  virtual void  v17(); // _ZN6S206C63v17Ev
  virtual void  v18(); // _ZN6S206C63v18Ev
  virtual void  v19(); // _ZN6S206C63v19Ev
  virtual void  v20(); // _ZN6S206C63v20Ev
  virtual void  v21(); // _ZN6S206C63v21Ev
  virtual void  v22(); // _ZN6S206C63v22Ev
  virtual void  v23(); // _ZN6S206C63v23Ev
  virtual void  v24(); // _ZN6S206C63v24Ev
  virtual void  v25(); // _ZN6S206C63v25Ev
  virtual void  v26(); // _ZN6S206C63v26Ev
  virtual void  v27(); // _ZN6S206C63v27Ev
  virtual void  v28(); // _ZN6S206C63v28Ev
  virtual void  v29(); // _ZN6S206C63v29Ev
  virtual void  v30(); // _ZN6S206C63v30Ev
  virtual void  v31(); // _ZN6S206C63v31Ev
  virtual void  v32(); // _ZN6S206C63v32Ev
  virtual void  v33(); // _ZN6S206C63v33Ev
  virtual void  v34(); // _ZN6S206C63v34Ev
  virtual void  v35(); // _ZN6S206C63v35Ev
  virtual void  v36(); // _ZN6S206C63v36Ev
  virtual void  v37(); // _ZN6S206C63v37Ev
  virtual void  v38(); // _ZN6S206C63v38Ev
  virtual void  v39(); // _ZN6S206C63v39Ev
  virtual void  v40(); // _ZN6S206C63v40Ev
  virtual void  v41(); // _ZN6S206C63v41Ev
  virtual void  v42(); // _ZN6S206C63v42Ev
  virtual void  v43(); // _ZN6S206C63v43Ev
  virtual void  v44(); // _ZN6S206C63v44Ev
  virtual void  v45(); // _ZN6S206C63v45Ev
  virtual void  v46(); // _ZN6S206C63v46Ev
  virtual void  v47(); // _ZN6S206C63v47Ev
  virtual void  v48(); // _ZN6S206C63v48Ev
  virtual void  v49(); // _ZN6S206C63v49Ev
  virtual void  v50(); // _ZN6S206C63v50Ev
  virtual void  v51(); // _ZN6S206C63v51Ev
  virtual void  v52(); // _ZN6S206C63v52Ev
  virtual void  v53(); // _ZN6S206C63v53Ev
  virtual void  v54(); // _ZN6S206C63v54Ev
  virtual void  v55(); // _ZN6S206C63v55Ev
  virtual void  v56(); // _ZN6S206C63v56Ev
  virtual void  v57(); // _ZN6S206C63v57Ev
  virtual void  v58(); // _ZN6S206C63v58Ev
  virtual void  v59(); // _ZN6S206C63v59Ev
  virtual void  v60(); // _ZN6S206C63v60Ev
  virtual void  v61(); // _ZN6S206C63v61Ev
  virtual void  v62(); // _ZN6S206C63v62Ev
  virtual void  v63(); // _ZN6S206C63v63Ev
  virtual void  v64(); // _ZN6S206C63v64Ev
  virtual void  v65(); // _ZN6S206C63v65Ev
  virtual void  v66(); // _ZN6S206C63v66Ev
  virtual void  v67(); // _ZN6S206C63v67Ev
  S206C6(); // tgen
};
//SIG(-1 S206C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S206C6 ::~S206C6(){ note_dtor("S206C6", this);}
void  S206C6 ::v4(){vfunc_called(this, "_ZN6S206C62v4Ev");}
void  S206C6 ::v5(){vfunc_called(this, "_ZN6S206C62v5Ev");}
void  S206C6 ::v6(){vfunc_called(this, "_ZN6S206C62v6Ev");}
void  S206C6 ::v7(){vfunc_called(this, "_ZN6S206C62v7Ev");}
void  S206C6 ::v8(){vfunc_called(this, "_ZN6S206C62v8Ev");}
void  S206C6 ::v9(){vfunc_called(this, "_ZN6S206C62v9Ev");}
void  S206C6 ::v10(){vfunc_called(this, "_ZN6S206C63v10Ev");}
void  S206C6 ::v11(){vfunc_called(this, "_ZN6S206C63v11Ev");}
void  S206C6 ::v12(){vfunc_called(this, "_ZN6S206C63v12Ev");}
void  S206C6 ::v13(){vfunc_called(this, "_ZN6S206C63v13Ev");}
void  S206C6 ::v14(){vfunc_called(this, "_ZN6S206C63v14Ev");}
void  S206C6 ::v15(){vfunc_called(this, "_ZN6S206C63v15Ev");}
void  S206C6 ::v16(){vfunc_called(this, "_ZN6S206C63v16Ev");}
void  S206C6 ::v17(){vfunc_called(this, "_ZN6S206C63v17Ev");}
void  S206C6 ::v18(){vfunc_called(this, "_ZN6S206C63v18Ev");}
void  S206C6 ::v19(){vfunc_called(this, "_ZN6S206C63v19Ev");}
void  S206C6 ::v20(){vfunc_called(this, "_ZN6S206C63v20Ev");}
void  S206C6 ::v21(){vfunc_called(this, "_ZN6S206C63v21Ev");}
void  S206C6 ::v22(){vfunc_called(this, "_ZN6S206C63v22Ev");}
void  S206C6 ::v23(){vfunc_called(this, "_ZN6S206C63v23Ev");}
void  S206C6 ::v24(){vfunc_called(this, "_ZN6S206C63v24Ev");}
void  S206C6 ::v25(){vfunc_called(this, "_ZN6S206C63v25Ev");}
void  S206C6 ::v26(){vfunc_called(this, "_ZN6S206C63v26Ev");}
void  S206C6 ::v27(){vfunc_called(this, "_ZN6S206C63v27Ev");}
void  S206C6 ::v28(){vfunc_called(this, "_ZN6S206C63v28Ev");}
void  S206C6 ::v29(){vfunc_called(this, "_ZN6S206C63v29Ev");}
void  S206C6 ::v30(){vfunc_called(this, "_ZN6S206C63v30Ev");}
void  S206C6 ::v31(){vfunc_called(this, "_ZN6S206C63v31Ev");}
void  S206C6 ::v32(){vfunc_called(this, "_ZN6S206C63v32Ev");}
void  S206C6 ::v33(){vfunc_called(this, "_ZN6S206C63v33Ev");}
void  S206C6 ::v34(){vfunc_called(this, "_ZN6S206C63v34Ev");}
void  S206C6 ::v35(){vfunc_called(this, "_ZN6S206C63v35Ev");}
void  S206C6 ::v36(){vfunc_called(this, "_ZN6S206C63v36Ev");}
void  S206C6 ::v37(){vfunc_called(this, "_ZN6S206C63v37Ev");}
void  S206C6 ::v38(){vfunc_called(this, "_ZN6S206C63v38Ev");}
void  S206C6 ::v39(){vfunc_called(this, "_ZN6S206C63v39Ev");}
void  S206C6 ::v40(){vfunc_called(this, "_ZN6S206C63v40Ev");}
void  S206C6 ::v41(){vfunc_called(this, "_ZN6S206C63v41Ev");}
void  S206C6 ::v42(){vfunc_called(this, "_ZN6S206C63v42Ev");}
void  S206C6 ::v43(){vfunc_called(this, "_ZN6S206C63v43Ev");}
void  S206C6 ::v44(){vfunc_called(this, "_ZN6S206C63v44Ev");}
void  S206C6 ::v45(){vfunc_called(this, "_ZN6S206C63v45Ev");}
void  S206C6 ::v46(){vfunc_called(this, "_ZN6S206C63v46Ev");}
void  S206C6 ::v47(){vfunc_called(this, "_ZN6S206C63v47Ev");}
void  S206C6 ::v48(){vfunc_called(this, "_ZN6S206C63v48Ev");}
void  S206C6 ::v49(){vfunc_called(this, "_ZN6S206C63v49Ev");}
void  S206C6 ::v50(){vfunc_called(this, "_ZN6S206C63v50Ev");}
void  S206C6 ::v51(){vfunc_called(this, "_ZN6S206C63v51Ev");}
void  S206C6 ::v52(){vfunc_called(this, "_ZN6S206C63v52Ev");}
void  S206C6 ::v53(){vfunc_called(this, "_ZN6S206C63v53Ev");}
void  S206C6 ::v54(){vfunc_called(this, "_ZN6S206C63v54Ev");}
void  S206C6 ::v55(){vfunc_called(this, "_ZN6S206C63v55Ev");}
void  S206C6 ::v56(){vfunc_called(this, "_ZN6S206C63v56Ev");}
void  S206C6 ::v57(){vfunc_called(this, "_ZN6S206C63v57Ev");}
void  S206C6 ::v58(){vfunc_called(this, "_ZN6S206C63v58Ev");}
void  S206C6 ::v59(){vfunc_called(this, "_ZN6S206C63v59Ev");}
void  S206C6 ::v60(){vfunc_called(this, "_ZN6S206C63v60Ev");}
void  S206C6 ::v61(){vfunc_called(this, "_ZN6S206C63v61Ev");}
void  S206C6 ::v62(){vfunc_called(this, "_ZN6S206C63v62Ev");}
void  S206C6 ::v63(){vfunc_called(this, "_ZN6S206C63v63Ev");}
void  S206C6 ::v64(){vfunc_called(this, "_ZN6S206C63v64Ev");}
void  S206C6 ::v65(){vfunc_called(this, "_ZN6S206C63v65Ev");}
void  S206C6 ::v66(){vfunc_called(this, "_ZN6S206C63v66Ev");}
void  S206C6 ::v67(){vfunc_called(this, "_ZN6S206C63v67Ev");}
S206C6 ::S206C6(){ note_ctor("S206C6", this);} // tgen

static void Test_S206C6()
{
  extern Class_Descriptor cd_S206C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S206C6, buf);
    S206C6 *dp, &lv = *(dp=new (buf) S206C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S206C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S206C6)");
    check_field_offset(lv, s206c6f0, ABISELECT(8,4), "S206C6.s206c6f0");
    check_field_offset(lv, s206c6f1, ABISELECT(16,8), "S206C6.s206c6f1");
    check_field_offset(lv, s206c6f2, ABISELECT(24,16), "S206C6.s206c6f2");
    check_field_offset(lv, s206c6f3, ABISELECT(56,32), "S206C6.s206c6f3");
    check_field_offset(lv, s206c6f4, ABISELECT(64,40), "S206C6.s206c6f4");
    check_field_offset(lv, s206c6f5, ABISELECT(72,44), "S206C6.s206c6f5");
    check_field_offset(lv, s206c6f6, ABISELECT(80,52), "S206C6.s206c6f6");
    test_class_info(&lv, &cd_S206C6);
    dp->~S206C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS206C6(Test_S206C6, "S206C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S206C6C1Ev();
extern void _ZN6S206C6D1Ev();
Name_Map name_map_S206C6[] = {
  NSPAIR(_ZN6S206C6C1Ev),
  NSPAIR(_ZN6S206C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S206C6[];
extern void _ZN6S206C6D1Ev();
extern void _ZN6S206C6D0Ev();
extern void _ZN6S206C62v4Ev();
extern void _ZN6S206C62v5Ev();
extern void _ZN6S206C62v6Ev();
extern void _ZN6S206C62v7Ev();
extern void _ZN6S206C62v8Ev();
extern void _ZN6S206C62v9Ev();
extern void _ZN6S206C63v10Ev();
extern void _ZN6S206C63v11Ev();
extern void _ZN6S206C63v12Ev();
extern void _ZN6S206C63v13Ev();
extern void _ZN6S206C63v14Ev();
extern void _ZN6S206C63v15Ev();
extern void _ZN6S206C63v16Ev();
extern void _ZN6S206C63v17Ev();
extern void _ZN6S206C63v18Ev();
extern void _ZN6S206C63v19Ev();
extern void _ZN6S206C63v20Ev();
extern void _ZN6S206C63v21Ev();
extern void _ZN6S206C63v22Ev();
extern void _ZN6S206C63v23Ev();
extern void _ZN6S206C63v24Ev();
extern void _ZN6S206C63v25Ev();
extern void _ZN6S206C63v26Ev();
extern void _ZN6S206C63v27Ev();
extern void _ZN6S206C63v28Ev();
extern void _ZN6S206C63v29Ev();
extern void _ZN6S206C63v30Ev();
extern void _ZN6S206C63v31Ev();
extern void _ZN6S206C63v32Ev();
extern void _ZN6S206C63v33Ev();
extern void _ZN6S206C63v34Ev();
extern void _ZN6S206C63v35Ev();
extern void _ZN6S206C63v36Ev();
extern void _ZN6S206C63v37Ev();
extern void _ZN6S206C63v38Ev();
extern void _ZN6S206C63v39Ev();
extern void _ZN6S206C63v40Ev();
extern void _ZN6S206C63v41Ev();
extern void _ZN6S206C63v42Ev();
extern void _ZN6S206C63v43Ev();
extern void _ZN6S206C63v44Ev();
extern void _ZN6S206C63v45Ev();
extern void _ZN6S206C63v46Ev();
extern void _ZN6S206C63v47Ev();
extern void _ZN6S206C63v48Ev();
extern void _ZN6S206C63v49Ev();
extern void _ZN6S206C63v50Ev();
extern void _ZN6S206C63v51Ev();
extern void _ZN6S206C63v52Ev();
extern void _ZN6S206C63v53Ev();
extern void _ZN6S206C63v54Ev();
extern void _ZN6S206C63v55Ev();
extern void _ZN6S206C63v56Ev();
extern void _ZN6S206C63v57Ev();
extern void _ZN6S206C63v58Ev();
extern void _ZN6S206C63v59Ev();
extern void _ZN6S206C63v60Ev();
extern void _ZN6S206C63v61Ev();
extern void _ZN6S206C63v62Ev();
extern void _ZN6S206C63v63Ev();
extern void _ZN6S206C63v64Ev();
extern void _ZN6S206C63v65Ev();
extern void _ZN6S206C63v66Ev();
extern void _ZN6S206C63v67Ev();
static  VTBL_ENTRY vtc_S206C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S206C6[0]),
  (VTBL_ENTRY)&_ZN6S206C6D1Ev,
  (VTBL_ENTRY)&_ZN6S206C6D0Ev,
  (VTBL_ENTRY)&_ZN6S206C62v4Ev,
  (VTBL_ENTRY)&_ZN6S206C62v5Ev,
  (VTBL_ENTRY)&_ZN6S206C62v6Ev,
  (VTBL_ENTRY)&_ZN6S206C62v7Ev,
  (VTBL_ENTRY)&_ZN6S206C62v8Ev,
  (VTBL_ENTRY)&_ZN6S206C62v9Ev,
  (VTBL_ENTRY)&_ZN6S206C63v10Ev,
  (VTBL_ENTRY)&_ZN6S206C63v11Ev,
  (VTBL_ENTRY)&_ZN6S206C63v12Ev,
  (VTBL_ENTRY)&_ZN6S206C63v13Ev,
  (VTBL_ENTRY)&_ZN6S206C63v14Ev,
  (VTBL_ENTRY)&_ZN6S206C63v15Ev,
  (VTBL_ENTRY)&_ZN6S206C63v16Ev,
  (VTBL_ENTRY)&_ZN6S206C63v17Ev,
  (VTBL_ENTRY)&_ZN6S206C63v18Ev,
  (VTBL_ENTRY)&_ZN6S206C63v19Ev,
  (VTBL_ENTRY)&_ZN6S206C63v20Ev,
  (VTBL_ENTRY)&_ZN6S206C63v21Ev,
  (VTBL_ENTRY)&_ZN6S206C63v22Ev,
  (VTBL_ENTRY)&_ZN6S206C63v23Ev,
  (VTBL_ENTRY)&_ZN6S206C63v24Ev,
  (VTBL_ENTRY)&_ZN6S206C63v25Ev,
  (VTBL_ENTRY)&_ZN6S206C63v26Ev,
  (VTBL_ENTRY)&_ZN6S206C63v27Ev,
  (VTBL_ENTRY)&_ZN6S206C63v28Ev,
  (VTBL_ENTRY)&_ZN6S206C63v29Ev,
  (VTBL_ENTRY)&_ZN6S206C63v30Ev,
  (VTBL_ENTRY)&_ZN6S206C63v31Ev,
  (VTBL_ENTRY)&_ZN6S206C63v32Ev,
  (VTBL_ENTRY)&_ZN6S206C63v33Ev,
  (VTBL_ENTRY)&_ZN6S206C63v34Ev,
  (VTBL_ENTRY)&_ZN6S206C63v35Ev,
  (VTBL_ENTRY)&_ZN6S206C63v36Ev,
  (VTBL_ENTRY)&_ZN6S206C63v37Ev,
  (VTBL_ENTRY)&_ZN6S206C63v38Ev,
  (VTBL_ENTRY)&_ZN6S206C63v39Ev,
  (VTBL_ENTRY)&_ZN6S206C63v40Ev,
  (VTBL_ENTRY)&_ZN6S206C63v41Ev,
  (VTBL_ENTRY)&_ZN6S206C63v42Ev,
  (VTBL_ENTRY)&_ZN6S206C63v43Ev,
  (VTBL_ENTRY)&_ZN6S206C63v44Ev,
  (VTBL_ENTRY)&_ZN6S206C63v45Ev,
  (VTBL_ENTRY)&_ZN6S206C63v46Ev,
  (VTBL_ENTRY)&_ZN6S206C63v47Ev,
  (VTBL_ENTRY)&_ZN6S206C63v48Ev,
  (VTBL_ENTRY)&_ZN6S206C63v49Ev,
  (VTBL_ENTRY)&_ZN6S206C63v50Ev,
  (VTBL_ENTRY)&_ZN6S206C63v51Ev,
  (VTBL_ENTRY)&_ZN6S206C63v52Ev,
  (VTBL_ENTRY)&_ZN6S206C63v53Ev,
  (VTBL_ENTRY)&_ZN6S206C63v54Ev,
  (VTBL_ENTRY)&_ZN6S206C63v55Ev,
  (VTBL_ENTRY)&_ZN6S206C63v56Ev,
  (VTBL_ENTRY)&_ZN6S206C63v57Ev,
  (VTBL_ENTRY)&_ZN6S206C63v58Ev,
  (VTBL_ENTRY)&_ZN6S206C63v59Ev,
  (VTBL_ENTRY)&_ZN6S206C63v60Ev,
  (VTBL_ENTRY)&_ZN6S206C63v61Ev,
  (VTBL_ENTRY)&_ZN6S206C63v62Ev,
  (VTBL_ENTRY)&_ZN6S206C63v63Ev,
  (VTBL_ENTRY)&_ZN6S206C63v64Ev,
  (VTBL_ENTRY)&_ZN6S206C63v65Ev,
  (VTBL_ENTRY)&_ZN6S206C63v66Ev,
  (VTBL_ENTRY)&_ZN6S206C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S206C6[];
extern  VTBL_ENTRY _ZTV6S206C6[];
Class_Descriptor cd_S206C6 = {  "S206C6", // class name
  0,0,//no base classes
  &(vtc_S206C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S206C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S206C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S206C5  : S206C6 {
  int s206c5f0[2];
  void *s206c5f1;
  int s206c5f2[2];
  ::S74C9_nt s206c5f3;
  ::S74C9_nt s206c5f4;
  ::S2265C38 s206c5f5;
  ::S74C9_nt s206c5f6;
  unsigned int s206c5f7:1;
  unsigned int s206c5f8:1;
  unsigned int s206c5f9:1;
  unsigned int s206c5f10:1;
  unsigned int s206c5f11:1;
  int s206c5f12[2];
  virtual  ~S206C5(); // _ZN6S206C5D1Ev
  virtual void  v68(); // _ZN6S206C53v68Ev
  virtual void  v69(); // _ZN6S206C53v69Ev
  virtual void  v70(); // _ZN6S206C53v70Ev
  virtual void  v71(); // _ZN6S206C53v71Ev
  virtual void  v72(); // _ZN6S206C53v72Ev
  virtual void  v73(); // _ZN6S206C53v73Ev
  virtual void  v74(); // _ZN6S206C53v74Ev
  virtual void  v75(); // _ZN6S206C53v75Ev
  virtual void  v76(); // _ZN6S206C53v76Ev
  virtual void  v77(); // _ZN6S206C53v77Ev
  virtual void  v78(); // _ZN6S206C53v78Ev
  virtual void  v79(); // _ZN6S206C53v79Ev
  virtual void  v80(); // _ZN6S206C53v80Ev
  virtual void  v81(); // _ZN6S206C53v81Ev
  virtual void  v82(); // _ZN6S206C53v82Ev
  virtual void  v83(); // _ZN6S206C53v83Ev
  virtual void  v84(); // _ZN6S206C53v84Ev
  virtual void  v85(); // _ZN6S206C53v85Ev
  virtual void  v86(); // _ZN6S206C53v86Ev
  virtual void  v87(); // _ZN6S206C53v87Ev
  virtual void  v88(); // _ZN6S206C53v88Ev
  virtual void  v89(); // _ZN6S206C53v89Ev
  S206C5(); // tgen
};
//SIG(-1 S206C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S206C5 ::~S206C5(){ note_dtor("S206C5", this);}
void  S206C5 ::v68(){vfunc_called(this, "_ZN6S206C53v68Ev");}
void  S206C5 ::v69(){vfunc_called(this, "_ZN6S206C53v69Ev");}
void  S206C5 ::v70(){vfunc_called(this, "_ZN6S206C53v70Ev");}
void  S206C5 ::v71(){vfunc_called(this, "_ZN6S206C53v71Ev");}
void  S206C5 ::v72(){vfunc_called(this, "_ZN6S206C53v72Ev");}
void  S206C5 ::v73(){vfunc_called(this, "_ZN6S206C53v73Ev");}
void  S206C5 ::v74(){vfunc_called(this, "_ZN6S206C53v74Ev");}
void  S206C5 ::v75(){vfunc_called(this, "_ZN6S206C53v75Ev");}
void  S206C5 ::v76(){vfunc_called(this, "_ZN6S206C53v76Ev");}
void  S206C5 ::v77(){vfunc_called(this, "_ZN6S206C53v77Ev");}
void  S206C5 ::v78(){vfunc_called(this, "_ZN6S206C53v78Ev");}
void  S206C5 ::v79(){vfunc_called(this, "_ZN6S206C53v79Ev");}
void  S206C5 ::v80(){vfunc_called(this, "_ZN6S206C53v80Ev");}
void  S206C5 ::v81(){vfunc_called(this, "_ZN6S206C53v81Ev");}
void  S206C5 ::v82(){vfunc_called(this, "_ZN6S206C53v82Ev");}
void  S206C5 ::v83(){vfunc_called(this, "_ZN6S206C53v83Ev");}
void  S206C5 ::v84(){vfunc_called(this, "_ZN6S206C53v84Ev");}
void  S206C5 ::v85(){vfunc_called(this, "_ZN6S206C53v85Ev");}
void  S206C5 ::v86(){vfunc_called(this, "_ZN6S206C53v86Ev");}
void  S206C5 ::v87(){vfunc_called(this, "_ZN6S206C53v87Ev");}
void  S206C5 ::v88(){vfunc_called(this, "_ZN6S206C53v88Ev");}
void  S206C5 ::v89(){vfunc_called(this, "_ZN6S206C53v89Ev");}
S206C5 ::S206C5(){ note_ctor("S206C5", this);} // tgen

static void Test_S206C5()
{
  extern Class_Descriptor cd_S206C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S206C5, buf);
    S206C5 *dp, &lv = *(dp=new (buf) S206C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S206C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S206C5)");
    check_base_class_offset(lv, (S206C6*), 0, "S206C5");
    check_field_offset(lv, s206c5f0, ABISELECT(96,60), "S206C5.s206c5f0");
    check_field_offset(lv, s206c5f1, ABISELECT(104,68), "S206C5.s206c5f1");
    check_field_offset(lv, s206c5f2, ABISELECT(112,72), "S206C5.s206c5f2");
    check_field_offset(lv, s206c5f3, ABISELECT(120,80), "S206C5.s206c5f3");
    check_field_offset(lv, s206c5f4, ABISELECT(136,92), "S206C5.s206c5f4");
    check_field_offset(lv, s206c5f5, ABISELECT(152,104), "S206C5.s206c5f5");
    check_field_offset(lv, s206c5f6, ABISELECT(160,108), "S206C5.s206c5f6");
    set_bf_and_test(lv, s206c5f7, ABISELECT(176,120), 0, 1, 1, "S206C5");
    set_bf_and_test(lv, s206c5f8, ABISELECT(176,120), 1, 1, 1, "S206C5");
    set_bf_and_test(lv, s206c5f9, ABISELECT(176,120), 2, 1, 1, "S206C5");
    set_bf_and_test(lv, s206c5f10, ABISELECT(176,120), 3, 1, 1, "S206C5");
    set_bf_and_test(lv, s206c5f11, ABISELECT(176,120), 4, 1, 1, "S206C5");
    check_field_offset(lv, s206c5f12, ABISELECT(180,124), "S206C5.s206c5f12");
    test_class_info(&lv, &cd_S206C5);
    dp->~S206C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS206C5(Test_S206C5, "S206C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S206C5C1Ev();
extern void _ZN6S206C5D1Ev();
Name_Map name_map_S206C5[] = {
  NSPAIR(_ZN6S206C5C1Ev),
  NSPAIR(_ZN6S206C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S206C6;
extern VTBL_ENTRY _ZTI6S206C6[];
extern  VTBL_ENTRY _ZTV6S206C6[];
static Base_Class bases_S206C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S206C5[];
extern void _ZN6S206C5D1Ev();
extern void _ZN6S206C5D0Ev();
extern void _ZN6S206C62v4Ev();
extern void _ZN6S206C62v5Ev();
extern void _ZN6S206C62v6Ev();
extern void _ZN6S206C62v7Ev();
extern void _ZN6S206C62v8Ev();
extern void _ZN6S206C62v9Ev();
extern void _ZN6S206C63v10Ev();
extern void _ZN6S206C63v11Ev();
extern void _ZN6S206C63v12Ev();
extern void _ZN6S206C63v13Ev();
extern void _ZN6S206C63v14Ev();
extern void _ZN6S206C63v15Ev();
extern void _ZN6S206C63v16Ev();
extern void _ZN6S206C63v17Ev();
extern void _ZN6S206C63v18Ev();
extern void _ZN6S206C63v19Ev();
extern void _ZN6S206C63v20Ev();
extern void _ZN6S206C63v21Ev();
extern void _ZN6S206C63v22Ev();
extern void _ZN6S206C63v23Ev();
extern void _ZN6S206C63v24Ev();
extern void _ZN6S206C63v25Ev();
extern void _ZN6S206C63v26Ev();
extern void _ZN6S206C63v27Ev();
extern void _ZN6S206C63v28Ev();
extern void _ZN6S206C63v29Ev();
extern void _ZN6S206C63v30Ev();
extern void _ZN6S206C63v31Ev();
extern void _ZN6S206C63v32Ev();
extern void _ZN6S206C63v33Ev();
extern void _ZN6S206C63v34Ev();
extern void _ZN6S206C63v35Ev();
extern void _ZN6S206C63v36Ev();
extern void _ZN6S206C63v37Ev();
extern void _ZN6S206C63v38Ev();
extern void _ZN6S206C63v39Ev();
extern void _ZN6S206C63v40Ev();
extern void _ZN6S206C63v41Ev();
extern void _ZN6S206C63v42Ev();
extern void _ZN6S206C63v43Ev();
extern void _ZN6S206C63v44Ev();
extern void _ZN6S206C63v45Ev();
extern void _ZN6S206C63v46Ev();
extern void _ZN6S206C63v47Ev();
extern void _ZN6S206C63v48Ev();
extern void _ZN6S206C63v49Ev();
extern void _ZN6S206C63v50Ev();
extern void _ZN6S206C63v51Ev();
extern void _ZN6S206C63v52Ev();
extern void _ZN6S206C63v53Ev();
extern void _ZN6S206C63v54Ev();
extern void _ZN6S206C63v55Ev();
extern void _ZN6S206C63v56Ev();
extern void _ZN6S206C63v57Ev();
extern void _ZN6S206C63v58Ev();
extern void _ZN6S206C63v59Ev();
extern void _ZN6S206C63v60Ev();
extern void _ZN6S206C63v61Ev();
extern void _ZN6S206C63v62Ev();
extern void _ZN6S206C63v63Ev();
extern void _ZN6S206C63v64Ev();
extern void _ZN6S206C63v65Ev();
extern void _ZN6S206C63v66Ev();
extern void _ZN6S206C63v67Ev();
extern void _ZN6S206C53v68Ev();
extern void _ZN6S206C53v69Ev();
extern void _ZN6S206C53v70Ev();
extern void _ZN6S206C53v71Ev();
extern void _ZN6S206C53v72Ev();
extern void _ZN6S206C53v73Ev();
extern void _ZN6S206C53v74Ev();
extern void _ZN6S206C53v75Ev();
extern void _ZN6S206C53v76Ev();
extern void _ZN6S206C53v77Ev();
extern void _ZN6S206C53v78Ev();
extern void _ZN6S206C53v79Ev();
extern void _ZN6S206C53v80Ev();
extern void _ZN6S206C53v81Ev();
extern void _ZN6S206C53v82Ev();
extern void _ZN6S206C53v83Ev();
extern void _ZN6S206C53v84Ev();
extern void _ZN6S206C53v85Ev();
extern void _ZN6S206C53v86Ev();
extern void _ZN6S206C53v87Ev();
extern void _ZN6S206C53v88Ev();
extern void _ZN6S206C53v89Ev();
static  VTBL_ENTRY vtc_S206C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S206C5[0]),
  (VTBL_ENTRY)&_ZN6S206C5D1Ev,
  (VTBL_ENTRY)&_ZN6S206C5D0Ev,
  (VTBL_ENTRY)&_ZN6S206C62v4Ev,
  (VTBL_ENTRY)&_ZN6S206C62v5Ev,
  (VTBL_ENTRY)&_ZN6S206C62v6Ev,
  (VTBL_ENTRY)&_ZN6S206C62v7Ev,
  (VTBL_ENTRY)&_ZN6S206C62v8Ev,
  (VTBL_ENTRY)&_ZN6S206C62v9Ev,
  (VTBL_ENTRY)&_ZN6S206C63v10Ev,
  (VTBL_ENTRY)&_ZN6S206C63v11Ev,
  (VTBL_ENTRY)&_ZN6S206C63v12Ev,
  (VTBL_ENTRY)&_ZN6S206C63v13Ev,
  (VTBL_ENTRY)&_ZN6S206C63v14Ev,
  (VTBL_ENTRY)&_ZN6S206C63v15Ev,
  (VTBL_ENTRY)&_ZN6S206C63v16Ev,
  (VTBL_ENTRY)&_ZN6S206C63v17Ev,
  (VTBL_ENTRY)&_ZN6S206C63v18Ev,
  (VTBL_ENTRY)&_ZN6S206C63v19Ev,
  (VTBL_ENTRY)&_ZN6S206C63v20Ev,
  (VTBL_ENTRY)&_ZN6S206C63v21Ev,
  (VTBL_ENTRY)&_ZN6S206C63v22Ev,
  (VTBL_ENTRY)&_ZN6S206C63v23Ev,
  (VTBL_ENTRY)&_ZN6S206C63v24Ev,
  (VTBL_ENTRY)&_ZN6S206C63v25Ev,
  (VTBL_ENTRY)&_ZN6S206C63v26Ev,
  (VTBL_ENTRY)&_ZN6S206C63v27Ev,
  (VTBL_ENTRY)&_ZN6S206C63v28Ev,
  (VTBL_ENTRY)&_ZN6S206C63v29Ev,
  (VTBL_ENTRY)&_ZN6S206C63v30Ev,
  (VTBL_ENTRY)&_ZN6S206C63v31Ev,
  (VTBL_ENTRY)&_ZN6S206C63v32Ev,
  (VTBL_ENTRY)&_ZN6S206C63v33Ev,
  (VTBL_ENTRY)&_ZN6S206C63v34Ev,
  (VTBL_ENTRY)&_ZN6S206C63v35Ev,
  (VTBL_ENTRY)&_ZN6S206C63v36Ev,
  (VTBL_ENTRY)&_ZN6S206C63v37Ev,
  (VTBL_ENTRY)&_ZN6S206C63v38Ev,
  (VTBL_ENTRY)&_ZN6S206C63v39Ev,
  (VTBL_ENTRY)&_ZN6S206C63v40Ev,
  (VTBL_ENTRY)&_ZN6S206C63v41Ev,
  (VTBL_ENTRY)&_ZN6S206C63v42Ev,
  (VTBL_ENTRY)&_ZN6S206C63v43Ev,
  (VTBL_ENTRY)&_ZN6S206C63v44Ev,
  (VTBL_ENTRY)&_ZN6S206C63v45Ev,
  (VTBL_ENTRY)&_ZN6S206C63v46Ev,
  (VTBL_ENTRY)&_ZN6S206C63v47Ev,
  (VTBL_ENTRY)&_ZN6S206C63v48Ev,
  (VTBL_ENTRY)&_ZN6S206C63v49Ev,
  (VTBL_ENTRY)&_ZN6S206C63v50Ev,
  (VTBL_ENTRY)&_ZN6S206C63v51Ev,
  (VTBL_ENTRY)&_ZN6S206C63v52Ev,
  (VTBL_ENTRY)&_ZN6S206C63v53Ev,
  (VTBL_ENTRY)&_ZN6S206C63v54Ev,
  (VTBL_ENTRY)&_ZN6S206C63v55Ev,
  (VTBL_ENTRY)&_ZN6S206C63v56Ev,
  (VTBL_ENTRY)&_ZN6S206C63v57Ev,
  (VTBL_ENTRY)&_ZN6S206C63v58Ev,
  (VTBL_ENTRY)&_ZN6S206C63v59Ev,
  (VTBL_ENTRY)&_ZN6S206C63v60Ev,
  (VTBL_ENTRY)&_ZN6S206C63v61Ev,
  (VTBL_ENTRY)&_ZN6S206C63v62Ev,
  (VTBL_ENTRY)&_ZN6S206C63v63Ev,
  (VTBL_ENTRY)&_ZN6S206C63v64Ev,
  (VTBL_ENTRY)&_ZN6S206C63v65Ev,
  (VTBL_ENTRY)&_ZN6S206C63v66Ev,
  (VTBL_ENTRY)&_ZN6S206C63v67Ev,
  (VTBL_ENTRY)&_ZN6S206C53v68Ev,
  (VTBL_ENTRY)&_ZN6S206C53v69Ev,
  (VTBL_ENTRY)&_ZN6S206C53v70Ev,
  (VTBL_ENTRY)&_ZN6S206C53v71Ev,
  (VTBL_ENTRY)&_ZN6S206C53v72Ev,
  (VTBL_ENTRY)&_ZN6S206C53v73Ev,
  (VTBL_ENTRY)&_ZN6S206C53v74Ev,
  (VTBL_ENTRY)&_ZN6S206C53v75Ev,
  (VTBL_ENTRY)&_ZN6S206C53v76Ev,
  (VTBL_ENTRY)&_ZN6S206C53v77Ev,
  (VTBL_ENTRY)&_ZN6S206C53v78Ev,
  (VTBL_ENTRY)&_ZN6S206C53v79Ev,
  (VTBL_ENTRY)&_ZN6S206C53v80Ev,
  (VTBL_ENTRY)&_ZN6S206C53v81Ev,
  (VTBL_ENTRY)&_ZN6S206C53v82Ev,
  (VTBL_ENTRY)&_ZN6S206C53v83Ev,
  (VTBL_ENTRY)&_ZN6S206C53v84Ev,
  (VTBL_ENTRY)&_ZN6S206C53v85Ev,
  (VTBL_ENTRY)&_ZN6S206C53v86Ev,
  (VTBL_ENTRY)&_ZN6S206C53v87Ev,
  (VTBL_ENTRY)&_ZN6S206C53v88Ev,
  (VTBL_ENTRY)&_ZN6S206C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S206C5[];
extern  VTBL_ENTRY _ZTV6S206C5[];
Class_Descriptor cd_S206C5 = {  "S206C5", // class name
  bases_S206C5, 1,
  &(vtc_S206C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S206C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S206C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S206C4  : S206C5 {
  unsigned int s206c4f0:1;
  unsigned int s206c4f1:1;
  unsigned int s206c4f2:1;
  ::S1409C30 s206c4f3;
  ::S1409C26 s206c4f4;
  ::S1409C22 s206c4f5;
  ::S1409C18 s206c4f6;
  int s206c4f7[3];
  virtual  ~S206C4(); // _ZN6S206C4D1Ev
  virtual void  v90(); // _ZN6S206C43v90Ev
  virtual void  v91(); // _ZN6S206C43v91Ev
  virtual void  v92(); // _ZN6S206C43v92Ev
  virtual void  v93(); // _ZN6S206C43v93Ev
  virtual void  v94(); // _ZN6S206C43v94Ev
  virtual void  v95(); // _ZN6S206C43v95Ev
  virtual void  v96(); // _ZN6S206C43v96Ev
  virtual void  v97(); // _ZN6S206C43v97Ev
  virtual void  v98(); // _ZN6S206C43v98Ev
  virtual void  v99(); // _ZN6S206C43v99Ev
  virtual void  v100(); // _ZN6S206C44v100Ev
  virtual void  v101(); // _ZN6S206C44v101Ev
  virtual void  v102(); // _ZN6S206C44v102Ev
  virtual void  v103(); // _ZN6S206C44v103Ev
  virtual void  v104(); // _ZN6S206C44v104Ev
  virtual void  v105(); // _ZN6S206C44v105Ev
  virtual void  v106(); // _ZN6S206C44v106Ev
  virtual void  v107(); // _ZN6S206C44v107Ev
  virtual void  v108(); // _ZN6S206C44v108Ev
  virtual void  v109(); // _ZN6S206C44v109Ev
  S206C4(); // tgen
};
//SIG(-1 S206C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S206C4 ::~S206C4(){ note_dtor("S206C4", this);}
void  S206C4 ::v90(){vfunc_called(this, "_ZN6S206C43v90Ev");}
void  S206C4 ::v91(){vfunc_called(this, "_ZN6S206C43v91Ev");}
void  S206C4 ::v92(){vfunc_called(this, "_ZN6S206C43v92Ev");}
void  S206C4 ::v93(){vfunc_called(this, "_ZN6S206C43v93Ev");}
void  S206C4 ::v94(){vfunc_called(this, "_ZN6S206C43v94Ev");}
void  S206C4 ::v95(){vfunc_called(this, "_ZN6S206C43v95Ev");}
void  S206C4 ::v96(){vfunc_called(this, "_ZN6S206C43v96Ev");}
void  S206C4 ::v97(){vfunc_called(this, "_ZN6S206C43v97Ev");}
void  S206C4 ::v98(){vfunc_called(this, "_ZN6S206C43v98Ev");}
void  S206C4 ::v99(){vfunc_called(this, "_ZN6S206C43v99Ev");}
void  S206C4 ::v100(){vfunc_called(this, "_ZN6S206C44v100Ev");}
void  S206C4 ::v101(){vfunc_called(this, "_ZN6S206C44v101Ev");}
void  S206C4 ::v102(){vfunc_called(this, "_ZN6S206C44v102Ev");}
void  S206C4 ::v103(){vfunc_called(this, "_ZN6S206C44v103Ev");}
void  S206C4 ::v104(){vfunc_called(this, "_ZN6S206C44v104Ev");}
void  S206C4 ::v105(){vfunc_called(this, "_ZN6S206C44v105Ev");}
void  S206C4 ::v106(){vfunc_called(this, "_ZN6S206C44v106Ev");}
void  S206C4 ::v107(){vfunc_called(this, "_ZN6S206C44v107Ev");}
void  S206C4 ::v108(){vfunc_called(this, "_ZN6S206C44v108Ev");}
void  S206C4 ::v109(){vfunc_called(this, "_ZN6S206C44v109Ev");}
S206C4 ::S206C4(){ note_ctor("S206C4", this);} // tgen

static void Test_S206C4()
{
  extern Class_Descriptor cd_S206C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S206C4, buf);
    S206C4 *dp, &lv = *(dp=new (buf) S206C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S206C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S206C4)");
    check_base_class_offset(lv, (S206C6*)(S206C5*), 0, "S206C4");
    check_base_class_offset(lv, (S206C5*), 0, "S206C4");
    set_bf_and_test(lv, s206c4f0, ABISELECT(188,132), 0, 1, 1, "S206C4");
    set_bf_and_test(lv, s206c4f1, ABISELECT(188,132), 1, 1, 1, "S206C4");
    set_bf_and_test(lv, s206c4f2, ABISELECT(188,132), 2, 1, 1, "S206C4");
    check_field_offset(lv, s206c4f3, ABISELECT(192,136), "S206C4.s206c4f3");
    check_field_offset(lv, s206c4f4, ABISELECT(208,148), "S206C4.s206c4f4");
    check_field_offset(lv, s206c4f5, ABISELECT(224,160), "S206C4.s206c4f5");
    check_field_offset(lv, s206c4f6, ABISELECT(240,172), "S206C4.s206c4f6");
    check_field_offset(lv, s206c4f7, ABISELECT(256,184), "S206C4.s206c4f7");
    test_class_info(&lv, &cd_S206C4);
    dp->~S206C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS206C4(Test_S206C4, "S206C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S206C4C1Ev();
extern void _ZN6S206C4D1Ev();
Name_Map name_map_S206C4[] = {
  NSPAIR(_ZN6S206C4C1Ev),
  NSPAIR(_ZN6S206C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S206C6;
extern VTBL_ENTRY _ZTI6S206C6[];
extern  VTBL_ENTRY _ZTV6S206C6[];
extern Class_Descriptor cd_S206C5;
extern VTBL_ENTRY _ZTI6S206C5[];
extern  VTBL_ENTRY _ZTV6S206C5[];
static Base_Class bases_S206C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S206C4[];
extern void _ZN6S206C4D1Ev();
extern void _ZN6S206C4D0Ev();
extern void _ZN6S206C62v4Ev();
extern void _ZN6S206C62v5Ev();
extern void _ZN6S206C62v6Ev();
extern void _ZN6S206C62v7Ev();
extern void _ZN6S206C62v8Ev();
extern void _ZN6S206C62v9Ev();
extern void _ZN6S206C63v10Ev();
extern void _ZN6S206C63v11Ev();
extern void _ZN6S206C63v12Ev();
extern void _ZN6S206C63v13Ev();
extern void _ZN6S206C63v14Ev();
extern void _ZN6S206C63v15Ev();
extern void _ZN6S206C63v16Ev();
extern void _ZN6S206C63v17Ev();
extern void _ZN6S206C63v18Ev();
extern void _ZN6S206C63v19Ev();
extern void _ZN6S206C63v20Ev();
extern void _ZN6S206C63v21Ev();
extern void _ZN6S206C63v22Ev();
extern void _ZN6S206C63v23Ev();
extern void _ZN6S206C63v24Ev();
extern void _ZN6S206C63v25Ev();
extern void _ZN6S206C63v26Ev();
extern void _ZN6S206C63v27Ev();
extern void _ZN6S206C63v28Ev();
extern void _ZN6S206C63v29Ev();
extern void _ZN6S206C63v30Ev();
extern void _ZN6S206C63v31Ev();
extern void _ZN6S206C63v32Ev();
extern void _ZN6S206C63v33Ev();
extern void _ZN6S206C63v34Ev();
extern void _ZN6S206C63v35Ev();
extern void _ZN6S206C63v36Ev();
extern void _ZN6S206C63v37Ev();
extern void _ZN6S206C63v38Ev();
extern void _ZN6S206C63v39Ev();
extern void _ZN6S206C63v40Ev();
extern void _ZN6S206C63v41Ev();
extern void _ZN6S206C63v42Ev();
extern void _ZN6S206C63v43Ev();
extern void _ZN6S206C63v44Ev();
extern void _ZN6S206C63v45Ev();
extern void _ZN6S206C63v46Ev();
extern void _ZN6S206C63v47Ev();
extern void _ZN6S206C63v48Ev();
extern void _ZN6S206C63v49Ev();
extern void _ZN6S206C63v50Ev();
extern void _ZN6S206C63v51Ev();
extern void _ZN6S206C63v52Ev();
extern void _ZN6S206C63v53Ev();
extern void _ZN6S206C63v54Ev();
extern void _ZN6S206C63v55Ev();
extern void _ZN6S206C63v56Ev();
extern void _ZN6S206C63v57Ev();
extern void _ZN6S206C63v58Ev();
extern void _ZN6S206C63v59Ev();
extern void _ZN6S206C63v60Ev();
extern void _ZN6S206C63v61Ev();
extern void _ZN6S206C63v62Ev();
extern void _ZN6S206C63v63Ev();
extern void _ZN6S206C63v64Ev();
extern void _ZN6S206C63v65Ev();
extern void _ZN6S206C63v66Ev();
extern void _ZN6S206C63v67Ev();
extern void _ZN6S206C53v68Ev();
extern void _ZN6S206C53v69Ev();
extern void _ZN6S206C53v70Ev();
extern void _ZN6S206C53v71Ev();
extern void _ZN6S206C53v72Ev();
extern void _ZN6S206C53v73Ev();
extern void _ZN6S206C53v74Ev();
extern void _ZN6S206C53v75Ev();
extern void _ZN6S206C53v76Ev();
extern void _ZN6S206C53v77Ev();
extern void _ZN6S206C53v78Ev();
extern void _ZN6S206C53v79Ev();
extern void _ZN6S206C53v80Ev();
extern void _ZN6S206C53v81Ev();
extern void _ZN6S206C53v82Ev();
extern void _ZN6S206C53v83Ev();
extern void _ZN6S206C53v84Ev();
extern void _ZN6S206C53v85Ev();
extern void _ZN6S206C53v86Ev();
extern void _ZN6S206C53v87Ev();
extern void _ZN6S206C53v88Ev();
extern void _ZN6S206C53v89Ev();
extern void _ZN6S206C43v90Ev();
extern void _ZN6S206C43v91Ev();
extern void _ZN6S206C43v92Ev();
extern void _ZN6S206C43v93Ev();
extern void _ZN6S206C43v94Ev();
extern void _ZN6S206C43v95Ev();
extern void _ZN6S206C43v96Ev();
extern void _ZN6S206C43v97Ev();
extern void _ZN6S206C43v98Ev();
extern void _ZN6S206C43v99Ev();
extern void _ZN6S206C44v100Ev();
extern void _ZN6S206C44v101Ev();
extern void _ZN6S206C44v102Ev();
extern void _ZN6S206C44v103Ev();
extern void _ZN6S206C44v104Ev();
extern void _ZN6S206C44v105Ev();
extern void _ZN6S206C44v106Ev();
extern void _ZN6S206C44v107Ev();
extern void _ZN6S206C44v108Ev();
extern void _ZN6S206C44v109Ev();
static  VTBL_ENTRY vtc_S206C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S206C4[0]),
  (VTBL_ENTRY)&_ZN6S206C4D1Ev,
  (VTBL_ENTRY)&_ZN6S206C4D0Ev,
  (VTBL_ENTRY)&_ZN6S206C62v4Ev,
  (VTBL_ENTRY)&_ZN6S206C62v5Ev,
  (VTBL_ENTRY)&_ZN6S206C62v6Ev,
  (VTBL_ENTRY)&_ZN6S206C62v7Ev,
  (VTBL_ENTRY)&_ZN6S206C62v8Ev,
  (VTBL_ENTRY)&_ZN6S206C62v9Ev,
  (VTBL_ENTRY)&_ZN6S206C63v10Ev,
  (VTBL_ENTRY)&_ZN6S206C63v11Ev,
  (VTBL_ENTRY)&_ZN6S206C63v12Ev,
  (VTBL_ENTRY)&_ZN6S206C63v13Ev,
  (VTBL_ENTRY)&_ZN6S206C63v14Ev,
  (VTBL_ENTRY)&_ZN6S206C63v15Ev,
  (VTBL_ENTRY)&_ZN6S206C63v16Ev,
  (VTBL_ENTRY)&_ZN6S206C63v17Ev,
  (VTBL_ENTRY)&_ZN6S206C63v18Ev,
  (VTBL_ENTRY)&_ZN6S206C63v19Ev,
  (VTBL_ENTRY)&_ZN6S206C63v20Ev,
  (VTBL_ENTRY)&_ZN6S206C63v21Ev,
  (VTBL_ENTRY)&_ZN6S206C63v22Ev,
  (VTBL_ENTRY)&_ZN6S206C63v23Ev,
  (VTBL_ENTRY)&_ZN6S206C63v24Ev,
  (VTBL_ENTRY)&_ZN6S206C63v25Ev,
  (VTBL_ENTRY)&_ZN6S206C63v26Ev,
  (VTBL_ENTRY)&_ZN6S206C63v27Ev,
  (VTBL_ENTRY)&_ZN6S206C63v28Ev,
  (VTBL_ENTRY)&_ZN6S206C63v29Ev,
  (VTBL_ENTRY)&_ZN6S206C63v30Ev,
  (VTBL_ENTRY)&_ZN6S206C63v31Ev,
  (VTBL_ENTRY)&_ZN6S206C63v32Ev,
  (VTBL_ENTRY)&_ZN6S206C63v33Ev,
  (VTBL_ENTRY)&_ZN6S206C63v34Ev,
  (VTBL_ENTRY)&_ZN6S206C63v35Ev,
  (VTBL_ENTRY)&_ZN6S206C63v36Ev,
  (VTBL_ENTRY)&_ZN6S206C63v37Ev,
  (VTBL_ENTRY)&_ZN6S206C63v38Ev,
  (VTBL_ENTRY)&_ZN6S206C63v39Ev,
  (VTBL_ENTRY)&_ZN6S206C63v40Ev,
  (VTBL_ENTRY)&_ZN6S206C63v41Ev,
  (VTBL_ENTRY)&_ZN6S206C63v42Ev,
  (VTBL_ENTRY)&_ZN6S206C63v43Ev,
  (VTBL_ENTRY)&_ZN6S206C63v44Ev,
  (VTBL_ENTRY)&_ZN6S206C63v45Ev,
  (VTBL_ENTRY)&_ZN6S206C63v46Ev,
  (VTBL_ENTRY)&_ZN6S206C63v47Ev,
  (VTBL_ENTRY)&_ZN6S206C63v48Ev,
  (VTBL_ENTRY)&_ZN6S206C63v49Ev,
  (VTBL_ENTRY)&_ZN6S206C63v50Ev,
  (VTBL_ENTRY)&_ZN6S206C63v51Ev,
  (VTBL_ENTRY)&_ZN6S206C63v52Ev,
  (VTBL_ENTRY)&_ZN6S206C63v53Ev,
  (VTBL_ENTRY)&_ZN6S206C63v54Ev,
  (VTBL_ENTRY)&_ZN6S206C63v55Ev,
  (VTBL_ENTRY)&_ZN6S206C63v56Ev,
  (VTBL_ENTRY)&_ZN6S206C63v57Ev,
  (VTBL_ENTRY)&_ZN6S206C63v58Ev,
  (VTBL_ENTRY)&_ZN6S206C63v59Ev,
  (VTBL_ENTRY)&_ZN6S206C63v60Ev,
  (VTBL_ENTRY)&_ZN6S206C63v61Ev,
  (VTBL_ENTRY)&_ZN6S206C63v62Ev,
  (VTBL_ENTRY)&_ZN6S206C63v63Ev,
  (VTBL_ENTRY)&_ZN6S206C63v64Ev,
  (VTBL_ENTRY)&_ZN6S206C63v65Ev,
  (VTBL_ENTRY)&_ZN6S206C63v66Ev,
  (VTBL_ENTRY)&_ZN6S206C63v67Ev,
  (VTBL_ENTRY)&_ZN6S206C53v68Ev,
  (VTBL_ENTRY)&_ZN6S206C53v69Ev,
  (VTBL_ENTRY)&_ZN6S206C53v70Ev,
  (VTBL_ENTRY)&_ZN6S206C53v71Ev,
  (VTBL_ENTRY)&_ZN6S206C53v72Ev,
  (VTBL_ENTRY)&_ZN6S206C53v73Ev,
  (VTBL_ENTRY)&_ZN6S206C53v74Ev,
  (VTBL_ENTRY)&_ZN6S206C53v75Ev,
  (VTBL_ENTRY)&_ZN6S206C53v76Ev,
  (VTBL_ENTRY)&_ZN6S206C53v77Ev,
  (VTBL_ENTRY)&_ZN6S206C53v78Ev,
  (VTBL_ENTRY)&_ZN6S206C53v79Ev,
  (VTBL_ENTRY)&_ZN6S206C53v80Ev,
  (VTBL_ENTRY)&_ZN6S206C53v81Ev,
  (VTBL_ENTRY)&_ZN6S206C53v82Ev,
  (VTBL_ENTRY)&_ZN6S206C53v83Ev,
  (VTBL_ENTRY)&_ZN6S206C53v84Ev,
  (VTBL_ENTRY)&_ZN6S206C53v85Ev,
  (VTBL_ENTRY)&_ZN6S206C53v86Ev,
  (VTBL_ENTRY)&_ZN6S206C53v87Ev,
  (VTBL_ENTRY)&_ZN6S206C53v88Ev,
  (VTBL_ENTRY)&_ZN6S206C53v89Ev,
  (VTBL_ENTRY)&_ZN6S206C43v90Ev,
  (VTBL_ENTRY)&_ZN6S206C43v91Ev,
  (VTBL_ENTRY)&_ZN6S206C43v92Ev,
  (VTBL_ENTRY)&_ZN6S206C43v93Ev,
  (VTBL_ENTRY)&_ZN6S206C43v94Ev,
  (VTBL_ENTRY)&_ZN6S206C43v95Ev,
  (VTBL_ENTRY)&_ZN6S206C43v96Ev,
  (VTBL_ENTRY)&_ZN6S206C43v97Ev,
  (VTBL_ENTRY)&_ZN6S206C43v98Ev,
  (VTBL_ENTRY)&_ZN6S206C43v99Ev,
  (VTBL_ENTRY)&_ZN6S206C44v100Ev,
  (VTBL_ENTRY)&_ZN6S206C44v101Ev,
  (VTBL_ENTRY)&_ZN6S206C44v102Ev,
  (VTBL_ENTRY)&_ZN6S206C44v103Ev,
  (VTBL_ENTRY)&_ZN6S206C44v104Ev,
  (VTBL_ENTRY)&_ZN6S206C44v105Ev,
  (VTBL_ENTRY)&_ZN6S206C44v106Ev,
  (VTBL_ENTRY)&_ZN6S206C44v107Ev,
  (VTBL_ENTRY)&_ZN6S206C44v108Ev,
  (VTBL_ENTRY)&_ZN6S206C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S206C4[];
extern  VTBL_ENTRY _ZTV6S206C4[];
Class_Descriptor cd_S206C4 = {  "S206C4", // class name
  bases_S206C4, 2,
  &(vtc_S206C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S206C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S206C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S206C3  : S206C4 {
  ::S1409C5_nt s206c3f0;
  unsigned int s206c3f1:1;
  ::S1409C12 s206c3f2;
  virtual  ~S206C3(); // _ZN6S206C3D1Ev
  virtual void  v110(); // _ZN6S206C34v110Ev
  virtual void  v111(); // _ZN6S206C34v111Ev
  virtual void  v112(); // _ZN6S206C34v112Ev
  virtual void  v113(); // _ZN6S206C34v113Ev
  S206C3(); // tgen
};
//SIG(-1 S206C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S206C3 ::~S206C3(){ note_dtor("S206C3", this);}
void  S206C3 ::v110(){vfunc_called(this, "_ZN6S206C34v110Ev");}
void  S206C3 ::v111(){vfunc_called(this, "_ZN6S206C34v111Ev");}
void  S206C3 ::v112(){vfunc_called(this, "_ZN6S206C34v112Ev");}
void  S206C3 ::v113(){vfunc_called(this, "_ZN6S206C34v113Ev");}
S206C3 ::S206C3(){ note_ctor("S206C3", this);} // tgen

static void Test_S206C3()
{
  extern Class_Descriptor cd_S206C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S206C3, buf);
    S206C3 *dp, &lv = *(dp=new (buf) S206C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S206C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S206C3)");
    check_base_class_offset(lv, (S206C6*)(S206C5*)(S206C4*), 0, "S206C3");
    check_base_class_offset(lv, (S206C5*)(S206C4*), 0, "S206C3");
    check_base_class_offset(lv, (S206C4*), 0, "S206C3");
    check_field_offset(lv, s206c3f0, ABISELECT(268,196), "S206C3.s206c3f0");
    set_bf_and_test(lv, s206c3f1, ABISELECT(276,204), 0, 1, 1, "S206C3");
    check_field_offset(lv, s206c3f2, ABISELECT(280,208), "S206C3.s206c3f2");
    test_class_info(&lv, &cd_S206C3);
    dp->~S206C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS206C3(Test_S206C3, "S206C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S206C3C1Ev();
extern void _ZN6S206C3D1Ev();
Name_Map name_map_S206C3[] = {
  NSPAIR(_ZN6S206C3C1Ev),
  NSPAIR(_ZN6S206C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S206C6;
extern VTBL_ENTRY _ZTI6S206C6[];
extern  VTBL_ENTRY _ZTV6S206C6[];
extern Class_Descriptor cd_S206C5;
extern VTBL_ENTRY _ZTI6S206C5[];
extern  VTBL_ENTRY _ZTV6S206C5[];
extern Class_Descriptor cd_S206C4;
extern VTBL_ENTRY _ZTI6S206C4[];
extern  VTBL_ENTRY _ZTV6S206C4[];
static Base_Class bases_S206C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S206C3[];
extern void _ZN6S206C3D1Ev();
extern void _ZN6S206C3D0Ev();
extern void _ZN6S206C62v4Ev();
extern void _ZN6S206C62v5Ev();
extern void _ZN6S206C62v6Ev();
extern void _ZN6S206C62v7Ev();
extern void _ZN6S206C62v8Ev();
extern void _ZN6S206C62v9Ev();
extern void _ZN6S206C63v10Ev();
extern void _ZN6S206C63v11Ev();
extern void _ZN6S206C63v12Ev();
extern void _ZN6S206C63v13Ev();
extern void _ZN6S206C63v14Ev();
extern void _ZN6S206C63v15Ev();
extern void _ZN6S206C63v16Ev();
extern void _ZN6S206C63v17Ev();
extern void _ZN6S206C63v18Ev();
extern void _ZN6S206C63v19Ev();
extern void _ZN6S206C63v20Ev();
extern void _ZN6S206C63v21Ev();
extern void _ZN6S206C63v22Ev();
extern void _ZN6S206C63v23Ev();
extern void _ZN6S206C63v24Ev();
extern void _ZN6S206C63v25Ev();
extern void _ZN6S206C63v26Ev();
extern void _ZN6S206C63v27Ev();
extern void _ZN6S206C63v28Ev();
extern void _ZN6S206C63v29Ev();
extern void _ZN6S206C63v30Ev();
extern void _ZN6S206C63v31Ev();
extern void _ZN6S206C63v32Ev();
extern void _ZN6S206C63v33Ev();
extern void _ZN6S206C63v34Ev();
extern void _ZN6S206C63v35Ev();
extern void _ZN6S206C63v36Ev();
extern void _ZN6S206C63v37Ev();
extern void _ZN6S206C63v38Ev();
extern void _ZN6S206C63v39Ev();
extern void _ZN6S206C63v40Ev();
extern void _ZN6S206C63v41Ev();
extern void _ZN6S206C63v42Ev();
extern void _ZN6S206C63v43Ev();
extern void _ZN6S206C63v44Ev();
extern void _ZN6S206C63v45Ev();
extern void _ZN6S206C63v46Ev();
extern void _ZN6S206C63v47Ev();
extern void _ZN6S206C63v48Ev();
extern void _ZN6S206C63v49Ev();
extern void _ZN6S206C63v50Ev();
extern void _ZN6S206C63v51Ev();
extern void _ZN6S206C63v52Ev();
extern void _ZN6S206C63v53Ev();
extern void _ZN6S206C63v54Ev();
extern void _ZN6S206C63v55Ev();
extern void _ZN6S206C63v56Ev();
extern void _ZN6S206C63v57Ev();
extern void _ZN6S206C63v58Ev();
extern void _ZN6S206C63v59Ev();
extern void _ZN6S206C63v60Ev();
extern void _ZN6S206C63v61Ev();
extern void _ZN6S206C63v62Ev();
extern void _ZN6S206C63v63Ev();
extern void _ZN6S206C63v64Ev();
extern void _ZN6S206C63v65Ev();
extern void _ZN6S206C63v66Ev();
extern void _ZN6S206C63v67Ev();
extern void _ZN6S206C53v68Ev();
extern void _ZN6S206C53v69Ev();
extern void _ZN6S206C53v70Ev();
extern void _ZN6S206C53v71Ev();
extern void _ZN6S206C53v72Ev();
extern void _ZN6S206C53v73Ev();
extern void _ZN6S206C53v74Ev();
extern void _ZN6S206C53v75Ev();
extern void _ZN6S206C53v76Ev();
extern void _ZN6S206C53v77Ev();
extern void _ZN6S206C53v78Ev();
extern void _ZN6S206C53v79Ev();
extern void _ZN6S206C53v80Ev();
extern void _ZN6S206C53v81Ev();
extern void _ZN6S206C53v82Ev();
extern void _ZN6S206C53v83Ev();
extern void _ZN6S206C53v84Ev();
extern void _ZN6S206C53v85Ev();
extern void _ZN6S206C53v86Ev();
extern void _ZN6S206C53v87Ev();
extern void _ZN6S206C53v88Ev();
extern void _ZN6S206C53v89Ev();
extern void _ZN6S206C43v90Ev();
extern void _ZN6S206C43v91Ev();
extern void _ZN6S206C43v92Ev();
extern void _ZN6S206C43v93Ev();
extern void _ZN6S206C43v94Ev();
extern void _ZN6S206C43v95Ev();
extern void _ZN6S206C43v96Ev();
extern void _ZN6S206C43v97Ev();
extern void _ZN6S206C43v98Ev();
extern void _ZN6S206C43v99Ev();
extern void _ZN6S206C44v100Ev();
extern void _ZN6S206C44v101Ev();
extern void _ZN6S206C44v102Ev();
extern void _ZN6S206C44v103Ev();
extern void _ZN6S206C44v104Ev();
extern void _ZN6S206C44v105Ev();
extern void _ZN6S206C44v106Ev();
extern void _ZN6S206C44v107Ev();
extern void _ZN6S206C44v108Ev();
extern void _ZN6S206C44v109Ev();
extern void _ZN6S206C34v110Ev();
extern void _ZN6S206C34v111Ev();
extern void _ZN6S206C34v112Ev();
extern void _ZN6S206C34v113Ev();
static  VTBL_ENTRY vtc_S206C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S206C3[0]),
  (VTBL_ENTRY)&_ZN6S206C3D1Ev,
  (VTBL_ENTRY)&_ZN6S206C3D0Ev,
  (VTBL_ENTRY)&_ZN6S206C62v4Ev,
  (VTBL_ENTRY)&_ZN6S206C62v5Ev,
  (VTBL_ENTRY)&_ZN6S206C62v6Ev,
  (VTBL_ENTRY)&_ZN6S206C62v7Ev,
  (VTBL_ENTRY)&_ZN6S206C62v8Ev,
  (VTBL_ENTRY)&_ZN6S206C62v9Ev,
  (VTBL_ENTRY)&_ZN6S206C63v10Ev,
  (VTBL_ENTRY)&_ZN6S206C63v11Ev,
  (VTBL_ENTRY)&_ZN6S206C63v12Ev,
  (VTBL_ENTRY)&_ZN6S206C63v13Ev,
  (VTBL_ENTRY)&_ZN6S206C63v14Ev,
  (VTBL_ENTRY)&_ZN6S206C63v15Ev,
  (VTBL_ENTRY)&_ZN6S206C63v16Ev,
  (VTBL_ENTRY)&_ZN6S206C63v17Ev,
  (VTBL_ENTRY)&_ZN6S206C63v18Ev,
  (VTBL_ENTRY)&_ZN6S206C63v19Ev,
  (VTBL_ENTRY)&_ZN6S206C63v20Ev,
  (VTBL_ENTRY)&_ZN6S206C63v21Ev,
  (VTBL_ENTRY)&_ZN6S206C63v22Ev,
  (VTBL_ENTRY)&_ZN6S206C63v23Ev,
  (VTBL_ENTRY)&_ZN6S206C63v24Ev,
  (VTBL_ENTRY)&_ZN6S206C63v25Ev,
  (VTBL_ENTRY)&_ZN6S206C63v26Ev,
  (VTBL_ENTRY)&_ZN6S206C63v27Ev,
  (VTBL_ENTRY)&_ZN6S206C63v28Ev,
  (VTBL_ENTRY)&_ZN6S206C63v29Ev,
  (VTBL_ENTRY)&_ZN6S206C63v30Ev,
  (VTBL_ENTRY)&_ZN6S206C63v31Ev,
  (VTBL_ENTRY)&_ZN6S206C63v32Ev,
  (VTBL_ENTRY)&_ZN6S206C63v33Ev,
  (VTBL_ENTRY)&_ZN6S206C63v34Ev,
  (VTBL_ENTRY)&_ZN6S206C63v35Ev,
  (VTBL_ENTRY)&_ZN6S206C63v36Ev,
  (VTBL_ENTRY)&_ZN6S206C63v37Ev,
  (VTBL_ENTRY)&_ZN6S206C63v38Ev,
  (VTBL_ENTRY)&_ZN6S206C63v39Ev,
  (VTBL_ENTRY)&_ZN6S206C63v40Ev,
  (VTBL_ENTRY)&_ZN6S206C63v41Ev,
  (VTBL_ENTRY)&_ZN6S206C63v42Ev,
  (VTBL_ENTRY)&_ZN6S206C63v43Ev,
  (VTBL_ENTRY)&_ZN6S206C63v44Ev,
  (VTBL_ENTRY)&_ZN6S206C63v45Ev,
  (VTBL_ENTRY)&_ZN6S206C63v46Ev,
  (VTBL_ENTRY)&_ZN6S206C63v47Ev,
  (VTBL_ENTRY)&_ZN6S206C63v48Ev,
  (VTBL_ENTRY)&_ZN6S206C63v49Ev,
  (VTBL_ENTRY)&_ZN6S206C63v50Ev,
  (VTBL_ENTRY)&_ZN6S206C63v51Ev,
  (VTBL_ENTRY)&_ZN6S206C63v52Ev,
  (VTBL_ENTRY)&_ZN6S206C63v53Ev,
  (VTBL_ENTRY)&_ZN6S206C63v54Ev,
  (VTBL_ENTRY)&_ZN6S206C63v55Ev,
  (VTBL_ENTRY)&_ZN6S206C63v56Ev,
  (VTBL_ENTRY)&_ZN6S206C63v57Ev,
  (VTBL_ENTRY)&_ZN6S206C63v58Ev,
  (VTBL_ENTRY)&_ZN6S206C63v59Ev,
  (VTBL_ENTRY)&_ZN6S206C63v60Ev,
  (VTBL_ENTRY)&_ZN6S206C63v61Ev,
  (VTBL_ENTRY)&_ZN6S206C63v62Ev,
  (VTBL_ENTRY)&_ZN6S206C63v63Ev,
  (VTBL_ENTRY)&_ZN6S206C63v64Ev,
  (VTBL_ENTRY)&_ZN6S206C63v65Ev,
  (VTBL_ENTRY)&_ZN6S206C63v66Ev,
  (VTBL_ENTRY)&_ZN6S206C63v67Ev,
  (VTBL_ENTRY)&_ZN6S206C53v68Ev,
  (VTBL_ENTRY)&_ZN6S206C53v69Ev,
  (VTBL_ENTRY)&_ZN6S206C53v70Ev,
  (VTBL_ENTRY)&_ZN6S206C53v71Ev,
  (VTBL_ENTRY)&_ZN6S206C53v72Ev,
  (VTBL_ENTRY)&_ZN6S206C53v73Ev,
  (VTBL_ENTRY)&_ZN6S206C53v74Ev,
  (VTBL_ENTRY)&_ZN6S206C53v75Ev,
  (VTBL_ENTRY)&_ZN6S206C53v76Ev,
  (VTBL_ENTRY)&_ZN6S206C53v77Ev,
  (VTBL_ENTRY)&_ZN6S206C53v78Ev,
  (VTBL_ENTRY)&_ZN6S206C53v79Ev,
  (VTBL_ENTRY)&_ZN6S206C53v80Ev,
  (VTBL_ENTRY)&_ZN6S206C53v81Ev,
  (VTBL_ENTRY)&_ZN6S206C53v82Ev,
  (VTBL_ENTRY)&_ZN6S206C53v83Ev,
  (VTBL_ENTRY)&_ZN6S206C53v84Ev,
  (VTBL_ENTRY)&_ZN6S206C53v85Ev,
  (VTBL_ENTRY)&_ZN6S206C53v86Ev,
  (VTBL_ENTRY)&_ZN6S206C53v87Ev,
  (VTBL_ENTRY)&_ZN6S206C53v88Ev,
  (VTBL_ENTRY)&_ZN6S206C53v89Ev,
  (VTBL_ENTRY)&_ZN6S206C43v90Ev,
  (VTBL_ENTRY)&_ZN6S206C43v91Ev,
  (VTBL_ENTRY)&_ZN6S206C43v92Ev,
  (VTBL_ENTRY)&_ZN6S206C43v93Ev,
  (VTBL_ENTRY)&_ZN6S206C43v94Ev,
  (VTBL_ENTRY)&_ZN6S206C43v95Ev,
  (VTBL_ENTRY)&_ZN6S206C43v96Ev,
  (VTBL_ENTRY)&_ZN6S206C43v97Ev,
  (VTBL_ENTRY)&_ZN6S206C43v98Ev,
  (VTBL_ENTRY)&_ZN6S206C43v99Ev,
  (VTBL_ENTRY)&_ZN6S206C44v100Ev,
  (VTBL_ENTRY)&_ZN6S206C44v101Ev,
  (VTBL_ENTRY)&_ZN6S206C44v102Ev,
  (VTBL_ENTRY)&_ZN6S206C44v103Ev,
  (VTBL_ENTRY)&_ZN6S206C44v104Ev,
  (VTBL_ENTRY)&_ZN6S206C44v105Ev,
  (VTBL_ENTRY)&_ZN6S206C44v106Ev,
  (VTBL_ENTRY)&_ZN6S206C44v107Ev,
  (VTBL_ENTRY)&_ZN6S206C44v108Ev,
  (VTBL_ENTRY)&_ZN6S206C44v109Ev,
  (VTBL_ENTRY)&_ZN6S206C34v110Ev,
  (VTBL_ENTRY)&_ZN6S206C34v111Ev,
  (VTBL_ENTRY)&_ZN6S206C34v112Ev,
  (VTBL_ENTRY)&_ZN6S206C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S206C3[];
extern  VTBL_ENTRY _ZTV6S206C3[];
Class_Descriptor cd_S206C3 = {  "S206C3", // class name
  bases_S206C3, 3,
  &(vtc_S206C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S206C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S206C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S206C2  : S206C3 {
  int s206c2f0;
  unsigned int s206c2f1:1;
  virtual  ~S206C2(); // _ZN6S206C2D1Ev
  virtual void  v114(); // _ZN6S206C24v114Ev
  virtual void  v115(); // _ZN6S206C24v115Ev
  virtual void  v116(); // _ZN6S206C24v116Ev
  virtual void  v117(); // _ZN6S206C24v117Ev
  virtual void  v118(); // _ZN6S206C24v118Ev
  virtual void  v119(); // _ZN6S206C24v119Ev
  virtual void  v120(); // _ZN6S206C24v120Ev
  virtual void  v121(); // _ZN6S206C24v121Ev
  S206C2(); // tgen
};
//SIG(-1 S206C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S206C2 ::~S206C2(){ note_dtor("S206C2", this);}
void  S206C2 ::v114(){vfunc_called(this, "_ZN6S206C24v114Ev");}
void  S206C2 ::v115(){vfunc_called(this, "_ZN6S206C24v115Ev");}
void  S206C2 ::v116(){vfunc_called(this, "_ZN6S206C24v116Ev");}
void  S206C2 ::v117(){vfunc_called(this, "_ZN6S206C24v117Ev");}
void  S206C2 ::v118(){vfunc_called(this, "_ZN6S206C24v118Ev");}
void  S206C2 ::v119(){vfunc_called(this, "_ZN6S206C24v119Ev");}
void  S206C2 ::v120(){vfunc_called(this, "_ZN6S206C24v120Ev");}
void  S206C2 ::v121(){vfunc_called(this, "_ZN6S206C24v121Ev");}
S206C2 ::S206C2(){ note_ctor("S206C2", this);} // tgen

static void Test_S206C2()
{
  extern Class_Descriptor cd_S206C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S206C2, buf);
    S206C2 *dp, &lv = *(dp=new (buf) S206C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S206C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S206C2)");
    check_base_class_offset(lv, (S206C6*)(S206C5*)(S206C4*)(S206C3*), 0, "S206C2");
    check_base_class_offset(lv, (S206C5*)(S206C4*)(S206C3*), 0, "S206C2");
    check_base_class_offset(lv, (S206C4*)(S206C3*), 0, "S206C2");
    check_base_class_offset(lv, (S206C3*), 0, "S206C2");
    check_field_offset(lv, s206c2f0, ABISELECT(296,220), "S206C2.s206c2f0");
    set_bf_and_test(lv, s206c2f1, ABISELECT(300,224), 0, 1, 1, "S206C2");
    test_class_info(&lv, &cd_S206C2);
    dp->~S206C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS206C2(Test_S206C2, "S206C2", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN6S206C2C1Ev();
extern void _ZN6S206C2D1Ev();
Name_Map name_map_S206C2[] = {
  NSPAIR(_ZN6S206C2C1Ev),
  NSPAIR(_ZN6S206C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S206C6;
extern VTBL_ENTRY _ZTI6S206C6[];
extern  VTBL_ENTRY _ZTV6S206C6[];
extern Class_Descriptor cd_S206C5;
extern VTBL_ENTRY _ZTI6S206C5[];
extern  VTBL_ENTRY _ZTV6S206C5[];
extern Class_Descriptor cd_S206C4;
extern VTBL_ENTRY _ZTI6S206C4[];
extern  VTBL_ENTRY _ZTV6S206C4[];
extern Class_Descriptor cd_S206C3;
extern VTBL_ENTRY _ZTI6S206C3[];
extern  VTBL_ENTRY _ZTV6S206C3[];
static Base_Class bases_S206C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S206C2[];
extern void _ZN6S206C2D1Ev();
extern void _ZN6S206C2D0Ev();
extern void _ZN6S206C62v4Ev();
extern void _ZN6S206C62v5Ev();
extern void _ZN6S206C62v6Ev();
extern void _ZN6S206C62v7Ev();
extern void _ZN6S206C62v8Ev();
extern void _ZN6S206C62v9Ev();
extern void _ZN6S206C63v10Ev();
extern void _ZN6S206C63v11Ev();
extern void _ZN6S206C63v12Ev();
extern void _ZN6S206C63v13Ev();
extern void _ZN6S206C63v14Ev();
extern void _ZN6S206C63v15Ev();
extern void _ZN6S206C63v16Ev();
extern void _ZN6S206C63v17Ev();
extern void _ZN6S206C63v18Ev();
extern void _ZN6S206C63v19Ev();
extern void _ZN6S206C63v20Ev();
extern void _ZN6S206C63v21Ev();
extern void _ZN6S206C63v22Ev();
extern void _ZN6S206C63v23Ev();
extern void _ZN6S206C63v24Ev();
extern void _ZN6S206C63v25Ev();
extern void _ZN6S206C63v26Ev();
extern void _ZN6S206C63v27Ev();
extern void _ZN6S206C63v28Ev();
extern void _ZN6S206C63v29Ev();
extern void _ZN6S206C63v30Ev();
extern void _ZN6S206C63v31Ev();
extern void _ZN6S206C63v32Ev();
extern void _ZN6S206C63v33Ev();
extern void _ZN6S206C63v34Ev();
extern void _ZN6S206C63v35Ev();
extern void _ZN6S206C63v36Ev();
extern void _ZN6S206C63v37Ev();
extern void _ZN6S206C63v38Ev();
extern void _ZN6S206C63v39Ev();
extern void _ZN6S206C63v40Ev();
extern void _ZN6S206C63v41Ev();
extern void _ZN6S206C63v42Ev();
extern void _ZN6S206C63v43Ev();
extern void _ZN6S206C63v44Ev();
extern void _ZN6S206C63v45Ev();
extern void _ZN6S206C63v46Ev();
extern void _ZN6S206C63v47Ev();
extern void _ZN6S206C63v48Ev();
extern void _ZN6S206C63v49Ev();
extern void _ZN6S206C63v50Ev();
extern void _ZN6S206C63v51Ev();
extern void _ZN6S206C63v52Ev();
extern void _ZN6S206C63v53Ev();
extern void _ZN6S206C63v54Ev();
extern void _ZN6S206C63v55Ev();
extern void _ZN6S206C63v56Ev();
extern void _ZN6S206C63v57Ev();
extern void _ZN6S206C63v58Ev();
extern void _ZN6S206C63v59Ev();
extern void _ZN6S206C63v60Ev();
extern void _ZN6S206C63v61Ev();
extern void _ZN6S206C63v62Ev();
extern void _ZN6S206C63v63Ev();
extern void _ZN6S206C63v64Ev();
extern void _ZN6S206C63v65Ev();
extern void _ZN6S206C63v66Ev();
extern void _ZN6S206C63v67Ev();
extern void _ZN6S206C53v68Ev();
extern void _ZN6S206C53v69Ev();
extern void _ZN6S206C53v70Ev();
extern void _ZN6S206C53v71Ev();
extern void _ZN6S206C53v72Ev();
extern void _ZN6S206C53v73Ev();
extern void _ZN6S206C53v74Ev();
extern void _ZN6S206C53v75Ev();
extern void _ZN6S206C53v76Ev();
extern void _ZN6S206C53v77Ev();
extern void _ZN6S206C53v78Ev();
extern void _ZN6S206C53v79Ev();
extern void _ZN6S206C53v80Ev();
extern void _ZN6S206C53v81Ev();
extern void _ZN6S206C53v82Ev();
extern void _ZN6S206C53v83Ev();
extern void _ZN6S206C53v84Ev();
extern void _ZN6S206C53v85Ev();
extern void _ZN6S206C53v86Ev();
extern void _ZN6S206C53v87Ev();
extern void _ZN6S206C53v88Ev();
extern void _ZN6S206C53v89Ev();
extern void _ZN6S206C43v90Ev();
extern void _ZN6S206C43v91Ev();
extern void _ZN6S206C43v92Ev();
extern void _ZN6S206C43v93Ev();
extern void _ZN6S206C43v94Ev();
extern void _ZN6S206C43v95Ev();
extern void _ZN6S206C43v96Ev();
extern void _ZN6S206C43v97Ev();
extern void _ZN6S206C43v98Ev();
extern void _ZN6S206C43v99Ev();
extern void _ZN6S206C44v100Ev();
extern void _ZN6S206C44v101Ev();
extern void _ZN6S206C44v102Ev();
extern void _ZN6S206C44v103Ev();
extern void _ZN6S206C44v104Ev();
extern void _ZN6S206C44v105Ev();
extern void _ZN6S206C44v106Ev();
extern void _ZN6S206C44v107Ev();
extern void _ZN6S206C44v108Ev();
extern void _ZN6S206C44v109Ev();
extern void _ZN6S206C34v110Ev();
extern void _ZN6S206C34v111Ev();
extern void _ZN6S206C34v112Ev();
extern void _ZN6S206C34v113Ev();
extern void _ZN6S206C24v114Ev();
extern void _ZN6S206C24v115Ev();
extern void _ZN6S206C24v116Ev();
extern void _ZN6S206C24v117Ev();
extern void _ZN6S206C24v118Ev();
extern void _ZN6S206C24v119Ev();
extern void _ZN6S206C24v120Ev();
extern void _ZN6S206C24v121Ev();
static  VTBL_ENTRY vtc_S206C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S206C2[0]),
  (VTBL_ENTRY)&_ZN6S206C2D1Ev,
  (VTBL_ENTRY)&_ZN6S206C2D0Ev,
  (VTBL_ENTRY)&_ZN6S206C62v4Ev,
  (VTBL_ENTRY)&_ZN6S206C62v5Ev,
  (VTBL_ENTRY)&_ZN6S206C62v6Ev,
  (VTBL_ENTRY)&_ZN6S206C62v7Ev,
  (VTBL_ENTRY)&_ZN6S206C62v8Ev,
  (VTBL_ENTRY)&_ZN6S206C62v9Ev,
  (VTBL_ENTRY)&_ZN6S206C63v10Ev,
  (VTBL_ENTRY)&_ZN6S206C63v11Ev,
  (VTBL_ENTRY)&_ZN6S206C63v12Ev,
  (VTBL_ENTRY)&_ZN6S206C63v13Ev,
  (VTBL_ENTRY)&_ZN6S206C63v14Ev,
  (VTBL_ENTRY)&_ZN6S206C63v15Ev,
  (VTBL_ENTRY)&_ZN6S206C63v16Ev,
  (VTBL_ENTRY)&_ZN6S206C63v17Ev,
  (VTBL_ENTRY)&_ZN6S206C63v18Ev,
  (VTBL_ENTRY)&_ZN6S206C63v19Ev,
  (VTBL_ENTRY)&_ZN6S206C63v20Ev,
  (VTBL_ENTRY)&_ZN6S206C63v21Ev,
  (VTBL_ENTRY)&_ZN6S206C63v22Ev,
  (VTBL_ENTRY)&_ZN6S206C63v23Ev,
  (VTBL_ENTRY)&_ZN6S206C63v24Ev,
  (VTBL_ENTRY)&_ZN6S206C63v25Ev,
  (VTBL_ENTRY)&_ZN6S206C63v26Ev,
  (VTBL_ENTRY)&_ZN6S206C63v27Ev,
  (VTBL_ENTRY)&_ZN6S206C63v28Ev,
  (VTBL_ENTRY)&_ZN6S206C63v29Ev,
  (VTBL_ENTRY)&_ZN6S206C63v30Ev,
  (VTBL_ENTRY)&_ZN6S206C63v31Ev,
  (VTBL_ENTRY)&_ZN6S206C63v32Ev,
  (VTBL_ENTRY)&_ZN6S206C63v33Ev,
  (VTBL_ENTRY)&_ZN6S206C63v34Ev,
  (VTBL_ENTRY)&_ZN6S206C63v35Ev,
  (VTBL_ENTRY)&_ZN6S206C63v36Ev,
  (VTBL_ENTRY)&_ZN6S206C63v37Ev,
  (VTBL_ENTRY)&_ZN6S206C63v38Ev,
  (VTBL_ENTRY)&_ZN6S206C63v39Ev,
  (VTBL_ENTRY)&_ZN6S206C63v40Ev,
  (VTBL_ENTRY)&_ZN6S206C63v41Ev,
  (VTBL_ENTRY)&_ZN6S206C63v42Ev,
  (VTBL_ENTRY)&_ZN6S206C63v43Ev,
  (VTBL_ENTRY)&_ZN6S206C63v44Ev,
  (VTBL_ENTRY)&_ZN6S206C63v45Ev,
  (VTBL_ENTRY)&_ZN6S206C63v46Ev,
  (VTBL_ENTRY)&_ZN6S206C63v47Ev,
  (VTBL_ENTRY)&_ZN6S206C63v48Ev,
  (VTBL_ENTRY)&_ZN6S206C63v49Ev,
  (VTBL_ENTRY)&_ZN6S206C63v50Ev,
  (VTBL_ENTRY)&_ZN6S206C63v51Ev,
  (VTBL_ENTRY)&_ZN6S206C63v52Ev,
  (VTBL_ENTRY)&_ZN6S206C63v53Ev,
  (VTBL_ENTRY)&_ZN6S206C63v54Ev,
  (VTBL_ENTRY)&_ZN6S206C63v55Ev,
  (VTBL_ENTRY)&_ZN6S206C63v56Ev,
  (VTBL_ENTRY)&_ZN6S206C63v57Ev,
  (VTBL_ENTRY)&_ZN6S206C63v58Ev,
  (VTBL_ENTRY)&_ZN6S206C63v59Ev,
  (VTBL_ENTRY)&_ZN6S206C63v60Ev,
  (VTBL_ENTRY)&_ZN6S206C63v61Ev,
  (VTBL_ENTRY)&_ZN6S206C63v62Ev,
  (VTBL_ENTRY)&_ZN6S206C63v63Ev,
  (VTBL_ENTRY)&_ZN6S206C63v64Ev,
  (VTBL_ENTRY)&_ZN6S206C63v65Ev,
  (VTBL_ENTRY)&_ZN6S206C63v66Ev,
  (VTBL_ENTRY)&_ZN6S206C63v67Ev,
  (VTBL_ENTRY)&_ZN6S206C53v68Ev,
  (VTBL_ENTRY)&_ZN6S206C53v69Ev,
  (VTBL_ENTRY)&_ZN6S206C53v70Ev,
  (VTBL_ENTRY)&_ZN6S206C53v71Ev,
  (VTBL_ENTRY)&_ZN6S206C53v72Ev,
  (VTBL_ENTRY)&_ZN6S206C53v73Ev,
  (VTBL_ENTRY)&_ZN6S206C53v74Ev,
  (VTBL_ENTRY)&_ZN6S206C53v75Ev,
  (VTBL_ENTRY)&_ZN6S206C53v76Ev,
  (VTBL_ENTRY)&_ZN6S206C53v77Ev,
  (VTBL_ENTRY)&_ZN6S206C53v78Ev,
  (VTBL_ENTRY)&_ZN6S206C53v79Ev,
  (VTBL_ENTRY)&_ZN6S206C53v80Ev,
  (VTBL_ENTRY)&_ZN6S206C53v81Ev,
  (VTBL_ENTRY)&_ZN6S206C53v82Ev,
  (VTBL_ENTRY)&_ZN6S206C53v83Ev,
  (VTBL_ENTRY)&_ZN6S206C53v84Ev,
  (VTBL_ENTRY)&_ZN6S206C53v85Ev,
  (VTBL_ENTRY)&_ZN6S206C53v86Ev,
  (VTBL_ENTRY)&_ZN6S206C53v87Ev,
  (VTBL_ENTRY)&_ZN6S206C53v88Ev,
  (VTBL_ENTRY)&_ZN6S206C53v89Ev,
  (VTBL_ENTRY)&_ZN6S206C43v90Ev,
  (VTBL_ENTRY)&_ZN6S206C43v91Ev,
  (VTBL_ENTRY)&_ZN6S206C43v92Ev,
  (VTBL_ENTRY)&_ZN6S206C43v93Ev,
  (VTBL_ENTRY)&_ZN6S206C43v94Ev,
  (VTBL_ENTRY)&_ZN6S206C43v95Ev,
  (VTBL_ENTRY)&_ZN6S206C43v96Ev,
  (VTBL_ENTRY)&_ZN6S206C43v97Ev,
  (VTBL_ENTRY)&_ZN6S206C43v98Ev,
  (VTBL_ENTRY)&_ZN6S206C43v99Ev,
  (VTBL_ENTRY)&_ZN6S206C44v100Ev,
  (VTBL_ENTRY)&_ZN6S206C44v101Ev,
  (VTBL_ENTRY)&_ZN6S206C44v102Ev,
  (VTBL_ENTRY)&_ZN6S206C44v103Ev,
  (VTBL_ENTRY)&_ZN6S206C44v104Ev,
  (VTBL_ENTRY)&_ZN6S206C44v105Ev,
  (VTBL_ENTRY)&_ZN6S206C44v106Ev,
  (VTBL_ENTRY)&_ZN6S206C44v107Ev,
  (VTBL_ENTRY)&_ZN6S206C44v108Ev,
  (VTBL_ENTRY)&_ZN6S206C44v109Ev,
  (VTBL_ENTRY)&_ZN6S206C34v110Ev,
  (VTBL_ENTRY)&_ZN6S206C34v111Ev,
  (VTBL_ENTRY)&_ZN6S206C34v112Ev,
  (VTBL_ENTRY)&_ZN6S206C34v113Ev,
  (VTBL_ENTRY)&_ZN6S206C24v114Ev,
  (VTBL_ENTRY)&_ZN6S206C24v115Ev,
  (VTBL_ENTRY)&_ZN6S206C24v116Ev,
  (VTBL_ENTRY)&_ZN6S206C24v117Ev,
  (VTBL_ENTRY)&_ZN6S206C24v118Ev,
  (VTBL_ENTRY)&_ZN6S206C24v119Ev,
  (VTBL_ENTRY)&_ZN6S206C24v120Ev,
  (VTBL_ENTRY)&_ZN6S206C24v121Ev,
};
extern VTBL_ENTRY _ZTI6S206C2[];
extern  VTBL_ENTRY _ZTV6S206C2[];
Class_Descriptor cd_S206C2 = {  "S206C2", // class name
  bases_S206C2, 4,
  &(vtc_S206C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI6S206C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S206C2),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S206C1  : S206C2 {
  int s206c1f0;
  virtual  ~S206C1(); // _ZN6S206C1D1Ev
  virtual void  v1(); // _ZN6S206C12v1Ev
  virtual void  v2(); // _ZN6S206C12v2Ev
  virtual void  v3(); // _ZN6S206C12v3Ev
  S206C1(); // tgen
};
//SIG(1 S206C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v1 v2 v3 Fi}


 S206C1 ::~S206C1(){ note_dtor("S206C1", this);}
void  S206C1 ::v1(){vfunc_called(this, "_ZN6S206C12v1Ev");}
void  S206C1 ::v2(){vfunc_called(this, "_ZN6S206C12v2Ev");}
void  S206C1 ::v3(){vfunc_called(this, "_ZN6S206C12v3Ev");}
S206C1 ::S206C1(){ note_ctor("S206C1", this);} // tgen

static void Test_S206C1()
{
  extern Class_Descriptor cd_S206C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S206C1, buf);
    S206C1 *dp, &lv = *(dp=new (buf) S206C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S206C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S206C1)");
    check_base_class_offset(lv, (S206C6*)(S206C5*)(S206C4*)(S206C3*)(S206C2*), 0, "S206C1");
    check_base_class_offset(lv, (S206C5*)(S206C4*)(S206C3*)(S206C2*), 0, "S206C1");
    check_base_class_offset(lv, (S206C4*)(S206C3*)(S206C2*), 0, "S206C1");
    check_base_class_offset(lv, (S206C3*)(S206C2*), 0, "S206C1");
    check_base_class_offset(lv, (S206C2*), 0, "S206C1");
    check_field_offset(lv, s206c1f0, ABISELECT(304,228), "S206C1.s206c1f0");
    test_class_info(&lv, &cd_S206C1);
    dp->~S206C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS206C1(Test_S206C1, "S206C1", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN6S206C1C1Ev();
extern void _ZN6S206C1D1Ev();
Name_Map name_map_S206C1[] = {
  NSPAIR(_ZN6S206C1C1Ev),
  NSPAIR(_ZN6S206C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S206C6;
extern VTBL_ENTRY _ZTI6S206C6[];
extern  VTBL_ENTRY _ZTV6S206C6[];
extern Class_Descriptor cd_S206C5;
extern VTBL_ENTRY _ZTI6S206C5[];
extern  VTBL_ENTRY _ZTV6S206C5[];
extern Class_Descriptor cd_S206C4;
extern VTBL_ENTRY _ZTI6S206C4[];
extern  VTBL_ENTRY _ZTV6S206C4[];
extern Class_Descriptor cd_S206C3;
extern VTBL_ENTRY _ZTI6S206C3[];
extern  VTBL_ENTRY _ZTV6S206C3[];
extern Class_Descriptor cd_S206C2;
extern VTBL_ENTRY _ZTI6S206C2[];
extern  VTBL_ENTRY _ZTV6S206C2[];
static Base_Class bases_S206C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S206C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S206C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S206C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S206C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S206C1[];
extern void _ZN6S206C1D1Ev();
extern void _ZN6S206C1D0Ev();
extern void _ZN6S206C62v4Ev();
extern void _ZN6S206C62v5Ev();
extern void _ZN6S206C62v6Ev();
extern void _ZN6S206C62v7Ev();
extern void _ZN6S206C62v8Ev();
extern void _ZN6S206C62v9Ev();
extern void _ZN6S206C63v10Ev();
extern void _ZN6S206C63v11Ev();
extern void _ZN6S206C63v12Ev();
extern void _ZN6S206C63v13Ev();
extern void _ZN6S206C63v14Ev();
extern void _ZN6S206C63v15Ev();
extern void _ZN6S206C63v16Ev();
extern void _ZN6S206C63v17Ev();
extern void _ZN6S206C63v18Ev();
extern void _ZN6S206C63v19Ev();
extern void _ZN6S206C63v20Ev();
extern void _ZN6S206C63v21Ev();
extern void _ZN6S206C63v22Ev();
extern void _ZN6S206C63v23Ev();
extern void _ZN6S206C63v24Ev();
extern void _ZN6S206C63v25Ev();
extern void _ZN6S206C63v26Ev();
extern void _ZN6S206C63v27Ev();
extern void _ZN6S206C63v28Ev();
extern void _ZN6S206C63v29Ev();
extern void _ZN6S206C63v30Ev();
extern void _ZN6S206C63v31Ev();
extern void _ZN6S206C63v32Ev();
extern void _ZN6S206C63v33Ev();
extern void _ZN6S206C63v34Ev();
extern void _ZN6S206C63v35Ev();
extern void _ZN6S206C63v36Ev();
extern void _ZN6S206C63v37Ev();
extern void _ZN6S206C63v38Ev();
extern void _ZN6S206C63v39Ev();
extern void _ZN6S206C63v40Ev();
extern void _ZN6S206C63v41Ev();
extern void _ZN6S206C63v42Ev();
extern void _ZN6S206C63v43Ev();
extern void _ZN6S206C63v44Ev();
extern void _ZN6S206C63v45Ev();
extern void _ZN6S206C63v46Ev();
extern void _ZN6S206C63v47Ev();
extern void _ZN6S206C63v48Ev();
extern void _ZN6S206C63v49Ev();
extern void _ZN6S206C63v50Ev();
extern void _ZN6S206C63v51Ev();
extern void _ZN6S206C63v52Ev();
extern void _ZN6S206C63v53Ev();
extern void _ZN6S206C63v54Ev();
extern void _ZN6S206C63v55Ev();
extern void _ZN6S206C63v56Ev();
extern void _ZN6S206C63v57Ev();
extern void _ZN6S206C63v58Ev();
extern void _ZN6S206C63v59Ev();
extern void _ZN6S206C63v60Ev();
extern void _ZN6S206C63v61Ev();
extern void _ZN6S206C63v62Ev();
extern void _ZN6S206C63v63Ev();
extern void _ZN6S206C63v64Ev();
extern void _ZN6S206C63v65Ev();
extern void _ZN6S206C63v66Ev();
extern void _ZN6S206C63v67Ev();
extern void _ZN6S206C53v68Ev();
extern void _ZN6S206C53v69Ev();
extern void _ZN6S206C53v70Ev();
extern void _ZN6S206C53v71Ev();
extern void _ZN6S206C53v72Ev();
extern void _ZN6S206C53v73Ev();
extern void _ZN6S206C53v74Ev();
extern void _ZN6S206C53v75Ev();
extern void _ZN6S206C53v76Ev();
extern void _ZN6S206C53v77Ev();
extern void _ZN6S206C53v78Ev();
extern void _ZN6S206C53v79Ev();
extern void _ZN6S206C53v80Ev();
extern void _ZN6S206C53v81Ev();
extern void _ZN6S206C53v82Ev();
extern void _ZN6S206C53v83Ev();
extern void _ZN6S206C53v84Ev();
extern void _ZN6S206C53v85Ev();
extern void _ZN6S206C53v86Ev();
extern void _ZN6S206C53v87Ev();
extern void _ZN6S206C53v88Ev();
extern void _ZN6S206C53v89Ev();
extern void _ZN6S206C43v90Ev();
extern void _ZN6S206C43v91Ev();
extern void _ZN6S206C43v92Ev();
extern void _ZN6S206C43v93Ev();
extern void _ZN6S206C43v94Ev();
extern void _ZN6S206C43v95Ev();
extern void _ZN6S206C43v96Ev();
extern void _ZN6S206C43v97Ev();
extern void _ZN6S206C43v98Ev();
extern void _ZN6S206C43v99Ev();
extern void _ZN6S206C44v100Ev();
extern void _ZN6S206C44v101Ev();
extern void _ZN6S206C44v102Ev();
extern void _ZN6S206C44v103Ev();
extern void _ZN6S206C44v104Ev();
extern void _ZN6S206C44v105Ev();
extern void _ZN6S206C44v106Ev();
extern void _ZN6S206C44v107Ev();
extern void _ZN6S206C44v108Ev();
extern void _ZN6S206C44v109Ev();
extern void _ZN6S206C34v110Ev();
extern void _ZN6S206C34v111Ev();
extern void _ZN6S206C34v112Ev();
extern void _ZN6S206C34v113Ev();
extern void _ZN6S206C24v114Ev();
extern void _ZN6S206C24v115Ev();
extern void _ZN6S206C24v116Ev();
extern void _ZN6S206C24v117Ev();
extern void _ZN6S206C24v118Ev();
extern void _ZN6S206C24v119Ev();
extern void _ZN6S206C24v120Ev();
extern void _ZN6S206C24v121Ev();
extern void _ZN6S206C12v1Ev();
extern void _ZN6S206C12v2Ev();
extern void _ZN6S206C12v3Ev();
static  VTBL_ENTRY vtc_S206C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S206C1[0]),
  (VTBL_ENTRY)&_ZN6S206C1D1Ev,
  (VTBL_ENTRY)&_ZN6S206C1D0Ev,
  (VTBL_ENTRY)&_ZN6S206C62v4Ev,
  (VTBL_ENTRY)&_ZN6S206C62v5Ev,
  (VTBL_ENTRY)&_ZN6S206C62v6Ev,
  (VTBL_ENTRY)&_ZN6S206C62v7Ev,
  (VTBL_ENTRY)&_ZN6S206C62v8Ev,
  (VTBL_ENTRY)&_ZN6S206C62v9Ev,
  (VTBL_ENTRY)&_ZN6S206C63v10Ev,
  (VTBL_ENTRY)&_ZN6S206C63v11Ev,
  (VTBL_ENTRY)&_ZN6S206C63v12Ev,
  (VTBL_ENTRY)&_ZN6S206C63v13Ev,
  (VTBL_ENTRY)&_ZN6S206C63v14Ev,
  (VTBL_ENTRY)&_ZN6S206C63v15Ev,
  (VTBL_ENTRY)&_ZN6S206C63v16Ev,
  (VTBL_ENTRY)&_ZN6S206C63v17Ev,
  (VTBL_ENTRY)&_ZN6S206C63v18Ev,
  (VTBL_ENTRY)&_ZN6S206C63v19Ev,
  (VTBL_ENTRY)&_ZN6S206C63v20Ev,
  (VTBL_ENTRY)&_ZN6S206C63v21Ev,
  (VTBL_ENTRY)&_ZN6S206C63v22Ev,
  (VTBL_ENTRY)&_ZN6S206C63v23Ev,
  (VTBL_ENTRY)&_ZN6S206C63v24Ev,
  (VTBL_ENTRY)&_ZN6S206C63v25Ev,
  (VTBL_ENTRY)&_ZN6S206C63v26Ev,
  (VTBL_ENTRY)&_ZN6S206C63v27Ev,
  (VTBL_ENTRY)&_ZN6S206C63v28Ev,
  (VTBL_ENTRY)&_ZN6S206C63v29Ev,
  (VTBL_ENTRY)&_ZN6S206C63v30Ev,
  (VTBL_ENTRY)&_ZN6S206C63v31Ev,
  (VTBL_ENTRY)&_ZN6S206C63v32Ev,
  (VTBL_ENTRY)&_ZN6S206C63v33Ev,
  (VTBL_ENTRY)&_ZN6S206C63v34Ev,
  (VTBL_ENTRY)&_ZN6S206C63v35Ev,
  (VTBL_ENTRY)&_ZN6S206C63v36Ev,
  (VTBL_ENTRY)&_ZN6S206C63v37Ev,
  (VTBL_ENTRY)&_ZN6S206C63v38Ev,
  (VTBL_ENTRY)&_ZN6S206C63v39Ev,
  (VTBL_ENTRY)&_ZN6S206C63v40Ev,
  (VTBL_ENTRY)&_ZN6S206C63v41Ev,
  (VTBL_ENTRY)&_ZN6S206C63v42Ev,
  (VTBL_ENTRY)&_ZN6S206C63v43Ev,
  (VTBL_ENTRY)&_ZN6S206C63v44Ev,
  (VTBL_ENTRY)&_ZN6S206C63v45Ev,
  (VTBL_ENTRY)&_ZN6S206C63v46Ev,
  (VTBL_ENTRY)&_ZN6S206C63v47Ev,
  (VTBL_ENTRY)&_ZN6S206C63v48Ev,
  (VTBL_ENTRY)&_ZN6S206C63v49Ev,
  (VTBL_ENTRY)&_ZN6S206C63v50Ev,
  (VTBL_ENTRY)&_ZN6S206C63v51Ev,
  (VTBL_ENTRY)&_ZN6S206C63v52Ev,
  (VTBL_ENTRY)&_ZN6S206C63v53Ev,
  (VTBL_ENTRY)&_ZN6S206C63v54Ev,
  (VTBL_ENTRY)&_ZN6S206C63v55Ev,
  (VTBL_ENTRY)&_ZN6S206C63v56Ev,
  (VTBL_ENTRY)&_ZN6S206C63v57Ev,
  (VTBL_ENTRY)&_ZN6S206C63v58Ev,
  (VTBL_ENTRY)&_ZN6S206C63v59Ev,
  (VTBL_ENTRY)&_ZN6S206C63v60Ev,
  (VTBL_ENTRY)&_ZN6S206C63v61Ev,
  (VTBL_ENTRY)&_ZN6S206C63v62Ev,
  (VTBL_ENTRY)&_ZN6S206C63v63Ev,
  (VTBL_ENTRY)&_ZN6S206C63v64Ev,
  (VTBL_ENTRY)&_ZN6S206C63v65Ev,
  (VTBL_ENTRY)&_ZN6S206C63v66Ev,
  (VTBL_ENTRY)&_ZN6S206C63v67Ev,
  (VTBL_ENTRY)&_ZN6S206C53v68Ev,
  (VTBL_ENTRY)&_ZN6S206C53v69Ev,
  (VTBL_ENTRY)&_ZN6S206C53v70Ev,
  (VTBL_ENTRY)&_ZN6S206C53v71Ev,
  (VTBL_ENTRY)&_ZN6S206C53v72Ev,
  (VTBL_ENTRY)&_ZN6S206C53v73Ev,
  (VTBL_ENTRY)&_ZN6S206C53v74Ev,
  (VTBL_ENTRY)&_ZN6S206C53v75Ev,
  (VTBL_ENTRY)&_ZN6S206C53v76Ev,
  (VTBL_ENTRY)&_ZN6S206C53v77Ev,
  (VTBL_ENTRY)&_ZN6S206C53v78Ev,
  (VTBL_ENTRY)&_ZN6S206C53v79Ev,
  (VTBL_ENTRY)&_ZN6S206C53v80Ev,
  (VTBL_ENTRY)&_ZN6S206C53v81Ev,
  (VTBL_ENTRY)&_ZN6S206C53v82Ev,
  (VTBL_ENTRY)&_ZN6S206C53v83Ev,
  (VTBL_ENTRY)&_ZN6S206C53v84Ev,
  (VTBL_ENTRY)&_ZN6S206C53v85Ev,
  (VTBL_ENTRY)&_ZN6S206C53v86Ev,
  (VTBL_ENTRY)&_ZN6S206C53v87Ev,
  (VTBL_ENTRY)&_ZN6S206C53v88Ev,
  (VTBL_ENTRY)&_ZN6S206C53v89Ev,
  (VTBL_ENTRY)&_ZN6S206C43v90Ev,
  (VTBL_ENTRY)&_ZN6S206C43v91Ev,
  (VTBL_ENTRY)&_ZN6S206C43v92Ev,
  (VTBL_ENTRY)&_ZN6S206C43v93Ev,
  (VTBL_ENTRY)&_ZN6S206C43v94Ev,
  (VTBL_ENTRY)&_ZN6S206C43v95Ev,
  (VTBL_ENTRY)&_ZN6S206C43v96Ev,
  (VTBL_ENTRY)&_ZN6S206C43v97Ev,
  (VTBL_ENTRY)&_ZN6S206C43v98Ev,
  (VTBL_ENTRY)&_ZN6S206C43v99Ev,
  (VTBL_ENTRY)&_ZN6S206C44v100Ev,
  (VTBL_ENTRY)&_ZN6S206C44v101Ev,
  (VTBL_ENTRY)&_ZN6S206C44v102Ev,
  (VTBL_ENTRY)&_ZN6S206C44v103Ev,
  (VTBL_ENTRY)&_ZN6S206C44v104Ev,
  (VTBL_ENTRY)&_ZN6S206C44v105Ev,
  (VTBL_ENTRY)&_ZN6S206C44v106Ev,
  (VTBL_ENTRY)&_ZN6S206C44v107Ev,
  (VTBL_ENTRY)&_ZN6S206C44v108Ev,
  (VTBL_ENTRY)&_ZN6S206C44v109Ev,
  (VTBL_ENTRY)&_ZN6S206C34v110Ev,
  (VTBL_ENTRY)&_ZN6S206C34v111Ev,
  (VTBL_ENTRY)&_ZN6S206C34v112Ev,
  (VTBL_ENTRY)&_ZN6S206C34v113Ev,
  (VTBL_ENTRY)&_ZN6S206C24v114Ev,
  (VTBL_ENTRY)&_ZN6S206C24v115Ev,
  (VTBL_ENTRY)&_ZN6S206C24v116Ev,
  (VTBL_ENTRY)&_ZN6S206C24v117Ev,
  (VTBL_ENTRY)&_ZN6S206C24v118Ev,
  (VTBL_ENTRY)&_ZN6S206C24v119Ev,
  (VTBL_ENTRY)&_ZN6S206C24v120Ev,
  (VTBL_ENTRY)&_ZN6S206C24v121Ev,
  (VTBL_ENTRY)&_ZN6S206C12v1Ev,
  (VTBL_ENTRY)&_ZN6S206C12v2Ev,
  (VTBL_ENTRY)&_ZN6S206C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S206C1[];
extern  VTBL_ENTRY _ZTV6S206C1[];
Class_Descriptor cd_S206C1 = {  "S206C1", // class name
  bases_S206C1, 5,
  &(vtc_S206C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI6S206C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S206C1),125, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C4  {
  int s1288c4f0;
  __tsi64 s1288c4f1;
  void *s1288c4f2[4];
  int s1288c4f3[2];
  void *s1288c4f4;
  ::S1409C5_nt s1288c4f5;
  void *s1288c4f6[2];
  virtual  ~S1288C4(); // _ZN7S1288C4D1Ev
  virtual void  v10(); // _ZN7S1288C43v10Ev
  virtual void  v11(); // _ZN7S1288C43v11Ev
  virtual void  v12(); // _ZN7S1288C43v12Ev
  virtual void  v13(); // _ZN7S1288C43v13Ev
  virtual void  v14(); // _ZN7S1288C43v14Ev
  virtual void  v15(); // _ZN7S1288C43v15Ev
  virtual void  v16(); // _ZN7S1288C43v16Ev
  virtual void  v17(); // _ZN7S1288C43v17Ev
  virtual void  v18(); // _ZN7S1288C43v18Ev
  virtual void  v19(); // _ZN7S1288C43v19Ev
  virtual void  v20(); // _ZN7S1288C43v20Ev
  virtual void  v21(); // _ZN7S1288C43v21Ev
  virtual void  v22(); // _ZN7S1288C43v22Ev
  virtual void  v23(); // _ZN7S1288C43v23Ev
  virtual void  v24(); // _ZN7S1288C43v24Ev
  virtual void  v25(); // _ZN7S1288C43v25Ev
  virtual void  v26(); // _ZN7S1288C43v26Ev
  virtual void  v27(); // _ZN7S1288C43v27Ev
  virtual void  v28(); // _ZN7S1288C43v28Ev
  virtual void  v29(); // _ZN7S1288C43v29Ev
  virtual void  v30(); // _ZN7S1288C43v30Ev
  virtual void  v31(); // _ZN7S1288C43v31Ev
  virtual void  v32(); // _ZN7S1288C43v32Ev
  virtual void  v33(); // _ZN7S1288C43v33Ev
  virtual void  v34(); // _ZN7S1288C43v34Ev
  virtual void  v35(); // _ZN7S1288C43v35Ev
  virtual void  v36(); // _ZN7S1288C43v36Ev
  virtual void  v37(); // _ZN7S1288C43v37Ev
  virtual void  v38(); // _ZN7S1288C43v38Ev
  virtual void  v39(); // _ZN7S1288C43v39Ev
  virtual void  v40(); // _ZN7S1288C43v40Ev
  virtual void  v41(); // _ZN7S1288C43v41Ev
  virtual void  v42(); // _ZN7S1288C43v42Ev
  virtual void  v43(); // _ZN7S1288C43v43Ev
  virtual void  v44(); // _ZN7S1288C43v44Ev
  virtual void  v45(); // _ZN7S1288C43v45Ev
  virtual void  v46(); // _ZN7S1288C43v46Ev
  virtual void  v47(); // _ZN7S1288C43v47Ev
  virtual void  v48(); // _ZN7S1288C43v48Ev
  virtual void  v49(); // _ZN7S1288C43v49Ev
  virtual void  v50(); // _ZN7S1288C43v50Ev
  virtual void  v51(); // _ZN7S1288C43v51Ev
  virtual void  v52(); // _ZN7S1288C43v52Ev
  virtual void  v53(); // _ZN7S1288C43v53Ev
  virtual void  v54(); // _ZN7S1288C43v54Ev
  virtual void  v55(); // _ZN7S1288C43v55Ev
  virtual void  v56(); // _ZN7S1288C43v56Ev
  virtual void  v57(); // _ZN7S1288C43v57Ev
  virtual void  v58(); // _ZN7S1288C43v58Ev
  virtual void  v59(); // _ZN7S1288C43v59Ev
  virtual void  v60(); // _ZN7S1288C43v60Ev
  virtual void  v61(); // _ZN7S1288C43v61Ev
  virtual void  v62(); // _ZN7S1288C43v62Ev
  virtual void  v63(); // _ZN7S1288C43v63Ev
  virtual void  v64(); // _ZN7S1288C43v64Ev
  virtual void  v65(); // _ZN7S1288C43v65Ev
  virtual void  v66(); // _ZN7S1288C43v66Ev
  virtual void  v67(); // _ZN7S1288C43v67Ev
  virtual void  v68(); // _ZN7S1288C43v68Ev
  virtual void  v69(); // _ZN7S1288C43v69Ev
  virtual void  v70(); // _ZN7S1288C43v70Ev
  virtual void  v71(); // _ZN7S1288C43v71Ev
  virtual void  v72(); // _ZN7S1288C43v72Ev
  virtual void  v73(); // _ZN7S1288C43v73Ev
  S1288C4(); // tgen
};
//SIG(-1 S1288C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1288C4 ::~S1288C4(){ note_dtor("S1288C4", this);}
void  S1288C4 ::v10(){vfunc_called(this, "_ZN7S1288C43v10Ev");}
void  S1288C4 ::v11(){vfunc_called(this, "_ZN7S1288C43v11Ev");}
void  S1288C4 ::v12(){vfunc_called(this, "_ZN7S1288C43v12Ev");}
void  S1288C4 ::v13(){vfunc_called(this, "_ZN7S1288C43v13Ev");}
void  S1288C4 ::v14(){vfunc_called(this, "_ZN7S1288C43v14Ev");}
void  S1288C4 ::v15(){vfunc_called(this, "_ZN7S1288C43v15Ev");}
void  S1288C4 ::v16(){vfunc_called(this, "_ZN7S1288C43v16Ev");}
void  S1288C4 ::v17(){vfunc_called(this, "_ZN7S1288C43v17Ev");}
void  S1288C4 ::v18(){vfunc_called(this, "_ZN7S1288C43v18Ev");}
void  S1288C4 ::v19(){vfunc_called(this, "_ZN7S1288C43v19Ev");}
void  S1288C4 ::v20(){vfunc_called(this, "_ZN7S1288C43v20Ev");}
void  S1288C4 ::v21(){vfunc_called(this, "_ZN7S1288C43v21Ev");}
void  S1288C4 ::v22(){vfunc_called(this, "_ZN7S1288C43v22Ev");}
void  S1288C4 ::v23(){vfunc_called(this, "_ZN7S1288C43v23Ev");}
void  S1288C4 ::v24(){vfunc_called(this, "_ZN7S1288C43v24Ev");}
void  S1288C4 ::v25(){vfunc_called(this, "_ZN7S1288C43v25Ev");}
void  S1288C4 ::v26(){vfunc_called(this, "_ZN7S1288C43v26Ev");}
void  S1288C4 ::v27(){vfunc_called(this, "_ZN7S1288C43v27Ev");}
void  S1288C4 ::v28(){vfunc_called(this, "_ZN7S1288C43v28Ev");}
void  S1288C4 ::v29(){vfunc_called(this, "_ZN7S1288C43v29Ev");}
void  S1288C4 ::v30(){vfunc_called(this, "_ZN7S1288C43v30Ev");}
void  S1288C4 ::v31(){vfunc_called(this, "_ZN7S1288C43v31Ev");}
void  S1288C4 ::v32(){vfunc_called(this, "_ZN7S1288C43v32Ev");}
void  S1288C4 ::v33(){vfunc_called(this, "_ZN7S1288C43v33Ev");}
void  S1288C4 ::v34(){vfunc_called(this, "_ZN7S1288C43v34Ev");}
void  S1288C4 ::v35(){vfunc_called(this, "_ZN7S1288C43v35Ev");}
void  S1288C4 ::v36(){vfunc_called(this, "_ZN7S1288C43v36Ev");}
void  S1288C4 ::v37(){vfunc_called(this, "_ZN7S1288C43v37Ev");}
void  S1288C4 ::v38(){vfunc_called(this, "_ZN7S1288C43v38Ev");}
void  S1288C4 ::v39(){vfunc_called(this, "_ZN7S1288C43v39Ev");}
void  S1288C4 ::v40(){vfunc_called(this, "_ZN7S1288C43v40Ev");}
void  S1288C4 ::v41(){vfunc_called(this, "_ZN7S1288C43v41Ev");}
void  S1288C4 ::v42(){vfunc_called(this, "_ZN7S1288C43v42Ev");}
void  S1288C4 ::v43(){vfunc_called(this, "_ZN7S1288C43v43Ev");}
void  S1288C4 ::v44(){vfunc_called(this, "_ZN7S1288C43v44Ev");}
void  S1288C4 ::v45(){vfunc_called(this, "_ZN7S1288C43v45Ev");}
void  S1288C4 ::v46(){vfunc_called(this, "_ZN7S1288C43v46Ev");}
void  S1288C4 ::v47(){vfunc_called(this, "_ZN7S1288C43v47Ev");}
void  S1288C4 ::v48(){vfunc_called(this, "_ZN7S1288C43v48Ev");}
void  S1288C4 ::v49(){vfunc_called(this, "_ZN7S1288C43v49Ev");}
void  S1288C4 ::v50(){vfunc_called(this, "_ZN7S1288C43v50Ev");}
void  S1288C4 ::v51(){vfunc_called(this, "_ZN7S1288C43v51Ev");}
void  S1288C4 ::v52(){vfunc_called(this, "_ZN7S1288C43v52Ev");}
void  S1288C4 ::v53(){vfunc_called(this, "_ZN7S1288C43v53Ev");}
void  S1288C4 ::v54(){vfunc_called(this, "_ZN7S1288C43v54Ev");}
void  S1288C4 ::v55(){vfunc_called(this, "_ZN7S1288C43v55Ev");}
void  S1288C4 ::v56(){vfunc_called(this, "_ZN7S1288C43v56Ev");}
void  S1288C4 ::v57(){vfunc_called(this, "_ZN7S1288C43v57Ev");}
void  S1288C4 ::v58(){vfunc_called(this, "_ZN7S1288C43v58Ev");}
void  S1288C4 ::v59(){vfunc_called(this, "_ZN7S1288C43v59Ev");}
void  S1288C4 ::v60(){vfunc_called(this, "_ZN7S1288C43v60Ev");}
void  S1288C4 ::v61(){vfunc_called(this, "_ZN7S1288C43v61Ev");}
void  S1288C4 ::v62(){vfunc_called(this, "_ZN7S1288C43v62Ev");}
void  S1288C4 ::v63(){vfunc_called(this, "_ZN7S1288C43v63Ev");}
void  S1288C4 ::v64(){vfunc_called(this, "_ZN7S1288C43v64Ev");}
void  S1288C4 ::v65(){vfunc_called(this, "_ZN7S1288C43v65Ev");}
void  S1288C4 ::v66(){vfunc_called(this, "_ZN7S1288C43v66Ev");}
void  S1288C4 ::v67(){vfunc_called(this, "_ZN7S1288C43v67Ev");}
void  S1288C4 ::v68(){vfunc_called(this, "_ZN7S1288C43v68Ev");}
void  S1288C4 ::v69(){vfunc_called(this, "_ZN7S1288C43v69Ev");}
void  S1288C4 ::v70(){vfunc_called(this, "_ZN7S1288C43v70Ev");}
void  S1288C4 ::v71(){vfunc_called(this, "_ZN7S1288C43v71Ev");}
void  S1288C4 ::v72(){vfunc_called(this, "_ZN7S1288C43v72Ev");}
void  S1288C4 ::v73(){vfunc_called(this, "_ZN7S1288C43v73Ev");}
S1288C4 ::S1288C4(){ note_ctor("S1288C4", this);} // tgen

static void Test_S1288C4()
{
  extern Class_Descriptor cd_S1288C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1288C4, buf);
    S1288C4 *dp, &lv = *(dp=new (buf) S1288C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1288C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1288C4)");
    check_field_offset(lv, s1288c4f0, ABISELECT(8,4), "S1288C4.s1288c4f0");
    check_field_offset(lv, s1288c4f1, ABISELECT(16,8), "S1288C4.s1288c4f1");
    check_field_offset(lv, s1288c4f2, ABISELECT(24,16), "S1288C4.s1288c4f2");
    check_field_offset(lv, s1288c4f3, ABISELECT(56,32), "S1288C4.s1288c4f3");
    check_field_offset(lv, s1288c4f4, ABISELECT(64,40), "S1288C4.s1288c4f4");
    check_field_offset(lv, s1288c4f5, ABISELECT(72,44), "S1288C4.s1288c4f5");
    check_field_offset(lv, s1288c4f6, ABISELECT(80,52), "S1288C4.s1288c4f6");
    test_class_info(&lv, &cd_S1288C4);
    dp->~S1288C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1288C4(Test_S1288C4, "S1288C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1288C4C1Ev();
extern void _ZN7S1288C4D1Ev();
Name_Map name_map_S1288C4[] = {
  NSPAIR(_ZN7S1288C4C1Ev),
  NSPAIR(_ZN7S1288C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1288C4[];
extern void _ZN7S1288C4D1Ev();
extern void _ZN7S1288C4D0Ev();
extern void _ZN7S1288C43v10Ev();
extern void _ZN7S1288C43v11Ev();
extern void _ZN7S1288C43v12Ev();
extern void _ZN7S1288C43v13Ev();
extern void _ZN7S1288C43v14Ev();
extern void _ZN7S1288C43v15Ev();
extern void _ZN7S1288C43v16Ev();
extern void _ZN7S1288C43v17Ev();
extern void _ZN7S1288C43v18Ev();
extern void _ZN7S1288C43v19Ev();
extern void _ZN7S1288C43v20Ev();
extern void _ZN7S1288C43v21Ev();
extern void _ZN7S1288C43v22Ev();
extern void _ZN7S1288C43v23Ev();
extern void _ZN7S1288C43v24Ev();
extern void _ZN7S1288C43v25Ev();
extern void _ZN7S1288C43v26Ev();
extern void _ZN7S1288C43v27Ev();
extern void _ZN7S1288C43v28Ev();
extern void _ZN7S1288C43v29Ev();
extern void _ZN7S1288C43v30Ev();
extern void _ZN7S1288C43v31Ev();
extern void _ZN7S1288C43v32Ev();
extern void _ZN7S1288C43v33Ev();
extern void _ZN7S1288C43v34Ev();
extern void _ZN7S1288C43v35Ev();
extern void _ZN7S1288C43v36Ev();
extern void _ZN7S1288C43v37Ev();
extern void _ZN7S1288C43v38Ev();
extern void _ZN7S1288C43v39Ev();
extern void _ZN7S1288C43v40Ev();
extern void _ZN7S1288C43v41Ev();
extern void _ZN7S1288C43v42Ev();
extern void _ZN7S1288C43v43Ev();
extern void _ZN7S1288C43v44Ev();
extern void _ZN7S1288C43v45Ev();
extern void _ZN7S1288C43v46Ev();
extern void _ZN7S1288C43v47Ev();
extern void _ZN7S1288C43v48Ev();
extern void _ZN7S1288C43v49Ev();
extern void _ZN7S1288C43v50Ev();
extern void _ZN7S1288C43v51Ev();
extern void _ZN7S1288C43v52Ev();
extern void _ZN7S1288C43v53Ev();
extern void _ZN7S1288C43v54Ev();
extern void _ZN7S1288C43v55Ev();
extern void _ZN7S1288C43v56Ev();
extern void _ZN7S1288C43v57Ev();
extern void _ZN7S1288C43v58Ev();
extern void _ZN7S1288C43v59Ev();
extern void _ZN7S1288C43v60Ev();
extern void _ZN7S1288C43v61Ev();
extern void _ZN7S1288C43v62Ev();
extern void _ZN7S1288C43v63Ev();
extern void _ZN7S1288C43v64Ev();
extern void _ZN7S1288C43v65Ev();
extern void _ZN7S1288C43v66Ev();
extern void _ZN7S1288C43v67Ev();
extern void _ZN7S1288C43v68Ev();
extern void _ZN7S1288C43v69Ev();
extern void _ZN7S1288C43v70Ev();
extern void _ZN7S1288C43v71Ev();
extern void _ZN7S1288C43v72Ev();
extern void _ZN7S1288C43v73Ev();
static  VTBL_ENTRY vtc_S1288C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1288C4[0]),
  (VTBL_ENTRY)&_ZN7S1288C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1288C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v73Ev,
};
extern VTBL_ENTRY _ZTI7S1288C4[];
extern  VTBL_ENTRY _ZTV7S1288C4[];
Class_Descriptor cd_S1288C4 = {  "S1288C4", // class name
  0,0,//no base classes
  &(vtc_S1288C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1288C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1288C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C3_nt  : S1288C4 {
  void *s1288c3f0;
  ::S1409C5_nt s1288c3f1;
  virtual  ~S1288C3_nt(); // _ZN10S1288C3_ntD1Ev
  virtual void  v74(); // _ZN10S1288C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1288C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1288C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1288C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1288C3_nt3v78Ev
  S1288C3_nt(); // tgen
};
//SIG(-1 S1288C3_nt) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S1288C3_nt ::~S1288C3_nt(){ note_dtor("S1288C3_nt", this);}
void  S1288C3_nt ::v74(){vfunc_called(this, "_ZN10S1288C3_nt3v74Ev");}
void  S1288C3_nt ::v75(){vfunc_called(this, "_ZN10S1288C3_nt3v75Ev");}
void  S1288C3_nt ::v76(){vfunc_called(this, "_ZN10S1288C3_nt3v76Ev");}
void  S1288C3_nt ::v77(){vfunc_called(this, "_ZN10S1288C3_nt3v77Ev");}
void  S1288C3_nt ::v78(){vfunc_called(this, "_ZN10S1288C3_nt3v78Ev");}
S1288C3_nt ::S1288C3_nt(){ note_ctor("S1288C3_nt", this);} // tgen

//skip512 S1288C3_nt

#else // __cplusplus

extern void _ZN10S1288C3_ntC1Ev();
extern void _ZN10S1288C3_ntD1Ev();
Name_Map name_map_S1288C3_nt[] = {
  NSPAIR(_ZN10S1288C3_ntC1Ev),
  NSPAIR(_ZN10S1288C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1288C4;
extern VTBL_ENTRY _ZTI7S1288C4[];
extern  VTBL_ENTRY _ZTV7S1288C4[];
static Base_Class bases_S1288C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1288C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1288C3_nt[];
extern void _ZN10S1288C3_ntD1Ev();
extern void _ZN10S1288C3_ntD0Ev();
extern void _ZN7S1288C43v10Ev();
extern void _ZN7S1288C43v11Ev();
extern void _ZN7S1288C43v12Ev();
extern void _ZN7S1288C43v13Ev();
extern void _ZN7S1288C43v14Ev();
extern void _ZN7S1288C43v15Ev();
extern void _ZN7S1288C43v16Ev();
extern void _ZN7S1288C43v17Ev();
extern void _ZN7S1288C43v18Ev();
extern void _ZN7S1288C43v19Ev();
extern void _ZN7S1288C43v20Ev();
extern void _ZN7S1288C43v21Ev();
extern void _ZN7S1288C43v22Ev();
extern void _ZN7S1288C43v23Ev();
extern void _ZN7S1288C43v24Ev();
extern void _ZN7S1288C43v25Ev();
extern void _ZN7S1288C43v26Ev();
extern void _ZN7S1288C43v27Ev();
extern void _ZN7S1288C43v28Ev();
extern void _ZN7S1288C43v29Ev();
extern void _ZN7S1288C43v30Ev();
extern void _ZN7S1288C43v31Ev();
extern void _ZN7S1288C43v32Ev();
extern void _ZN7S1288C43v33Ev();
extern void _ZN7S1288C43v34Ev();
extern void _ZN7S1288C43v35Ev();
extern void _ZN7S1288C43v36Ev();
extern void _ZN7S1288C43v37Ev();
extern void _ZN7S1288C43v38Ev();
extern void _ZN7S1288C43v39Ev();
extern void _ZN7S1288C43v40Ev();
extern void _ZN7S1288C43v41Ev();
extern void _ZN7S1288C43v42Ev();
extern void _ZN7S1288C43v43Ev();
extern void _ZN7S1288C43v44Ev();
extern void _ZN7S1288C43v45Ev();
extern void _ZN7S1288C43v46Ev();
extern void _ZN7S1288C43v47Ev();
extern void _ZN7S1288C43v48Ev();
extern void _ZN7S1288C43v49Ev();
extern void _ZN7S1288C43v50Ev();
extern void _ZN7S1288C43v51Ev();
extern void _ZN7S1288C43v52Ev();
extern void _ZN7S1288C43v53Ev();
extern void _ZN7S1288C43v54Ev();
extern void _ZN7S1288C43v55Ev();
extern void _ZN7S1288C43v56Ev();
extern void _ZN7S1288C43v57Ev();
extern void _ZN7S1288C43v58Ev();
extern void _ZN7S1288C43v59Ev();
extern void _ZN7S1288C43v60Ev();
extern void _ZN7S1288C43v61Ev();
extern void _ZN7S1288C43v62Ev();
extern void _ZN7S1288C43v63Ev();
extern void _ZN7S1288C43v64Ev();
extern void _ZN7S1288C43v65Ev();
extern void _ZN7S1288C43v66Ev();
extern void _ZN7S1288C43v67Ev();
extern void _ZN7S1288C43v68Ev();
extern void _ZN7S1288C43v69Ev();
extern void _ZN7S1288C43v70Ev();
extern void _ZN7S1288C43v71Ev();
extern void _ZN7S1288C43v72Ev();
extern void _ZN7S1288C43v73Ev();
extern void _ZN10S1288C3_nt3v74Ev();
extern void _ZN10S1288C3_nt3v75Ev();
extern void _ZN10S1288C3_nt3v76Ev();
extern void _ZN10S1288C3_nt3v77Ev();
extern void _ZN10S1288C3_nt3v78Ev();
static  VTBL_ENTRY vtc_S1288C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1288C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1288C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v73Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v78Ev,
};
extern VTBL_ENTRY _ZTI10S1288C3_nt[];
VTBL_ENTRY *P__ZTI10S1288C3_nt = _ZTI10S1288C3_nt; 
extern  VTBL_ENTRY _ZTV10S1288C3_nt[];
Class_Descriptor cd_S1288C3_nt = {  "S1288C3_nt", // class name
  bases_S1288C3_nt, 1,
  &(vtc_S1288C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI10S1288C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1288C3_nt),73, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C2_nt  : S1288C3_nt {
  void *s1288c2f0[2];
  unsigned int s1288c2f1:1;
  unsigned int s1288c2f2:1;
  unsigned int s1288c2f3:1;
  unsigned int s1288c2f4:1;
  char s1288c2f5;
  virtual  ~S1288C2_nt(); // _ZN10S1288C2_ntD1Ev
  virtual void  v79(); // _ZN10S1288C2_nt3v79Ev
  virtual void  v80(); // _ZN10S1288C2_nt3v80Ev
  virtual void  v81(); // _ZN10S1288C2_nt3v81Ev
  virtual void  v82(); // _ZN10S1288C2_nt3v82Ev
  virtual void  v83(); // _ZN10S1288C2_nt3v83Ev
  virtual void  v84(); // _ZN10S1288C2_nt3v84Ev
  virtual void  v85(); // _ZN10S1288C2_nt3v85Ev
  virtual void  v86(); // _ZN10S1288C2_nt3v86Ev
  virtual void  v87(); // _ZN10S1288C2_nt3v87Ev
  virtual void  v88(); // _ZN10S1288C2_nt3v88Ev
  virtual void  v89(); // _ZN10S1288C2_nt3v89Ev
  virtual void  v90(); // _ZN10S1288C2_nt3v90Ev
  virtual void  v91(); // _ZN10S1288C2_nt3v91Ev
  virtual void  v92(); // _ZN10S1288C2_nt3v92Ev
  virtual void  v93(); // _ZN10S1288C2_nt3v93Ev
  virtual void  v94(); // _ZN10S1288C2_nt3v94Ev
  virtual void  v95(); // _ZN10S1288C2_nt3v95Ev
  virtual void  v96(); // _ZN10S1288C2_nt3v96Ev
  virtual void  v97(); // _ZN10S1288C2_nt3v97Ev
  virtual void  v98(); // _ZN10S1288C2_nt3v98Ev
  virtual void  v99(); // _ZN10S1288C2_nt3v99Ev
  virtual void  v100(); // _ZN10S1288C2_nt4v100Ev
  S1288C2_nt(); // tgen
};
//SIG(-1 S1288C2_nt) C1{ BC2{ BC3{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S1288C2_nt ::~S1288C2_nt(){ note_dtor("S1288C2_nt", this);}
void  S1288C2_nt ::v79(){vfunc_called(this, "_ZN10S1288C2_nt3v79Ev");}
void  S1288C2_nt ::v80(){vfunc_called(this, "_ZN10S1288C2_nt3v80Ev");}
void  S1288C2_nt ::v81(){vfunc_called(this, "_ZN10S1288C2_nt3v81Ev");}
void  S1288C2_nt ::v82(){vfunc_called(this, "_ZN10S1288C2_nt3v82Ev");}
void  S1288C2_nt ::v83(){vfunc_called(this, "_ZN10S1288C2_nt3v83Ev");}
void  S1288C2_nt ::v84(){vfunc_called(this, "_ZN10S1288C2_nt3v84Ev");}
void  S1288C2_nt ::v85(){vfunc_called(this, "_ZN10S1288C2_nt3v85Ev");}
void  S1288C2_nt ::v86(){vfunc_called(this, "_ZN10S1288C2_nt3v86Ev");}
void  S1288C2_nt ::v87(){vfunc_called(this, "_ZN10S1288C2_nt3v87Ev");}
void  S1288C2_nt ::v88(){vfunc_called(this, "_ZN10S1288C2_nt3v88Ev");}
void  S1288C2_nt ::v89(){vfunc_called(this, "_ZN10S1288C2_nt3v89Ev");}
void  S1288C2_nt ::v90(){vfunc_called(this, "_ZN10S1288C2_nt3v90Ev");}
void  S1288C2_nt ::v91(){vfunc_called(this, "_ZN10S1288C2_nt3v91Ev");}
void  S1288C2_nt ::v92(){vfunc_called(this, "_ZN10S1288C2_nt3v92Ev");}
void  S1288C2_nt ::v93(){vfunc_called(this, "_ZN10S1288C2_nt3v93Ev");}
void  S1288C2_nt ::v94(){vfunc_called(this, "_ZN10S1288C2_nt3v94Ev");}
void  S1288C2_nt ::v95(){vfunc_called(this, "_ZN10S1288C2_nt3v95Ev");}
void  S1288C2_nt ::v96(){vfunc_called(this, "_ZN10S1288C2_nt3v96Ev");}
void  S1288C2_nt ::v97(){vfunc_called(this, "_ZN10S1288C2_nt3v97Ev");}
void  S1288C2_nt ::v98(){vfunc_called(this, "_ZN10S1288C2_nt3v98Ev");}
void  S1288C2_nt ::v99(){vfunc_called(this, "_ZN10S1288C2_nt3v99Ev");}
void  S1288C2_nt ::v100(){vfunc_called(this, "_ZN10S1288C2_nt4v100Ev");}
S1288C2_nt ::S1288C2_nt(){ note_ctor("S1288C2_nt", this);} // tgen

//skip512 S1288C2_nt

#else // __cplusplus

extern void _ZN10S1288C2_ntC1Ev();
extern void _ZN10S1288C2_ntD1Ev();
Name_Map name_map_S1288C2_nt[] = {
  NSPAIR(_ZN10S1288C2_ntC1Ev),
  NSPAIR(_ZN10S1288C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1288C4;
extern VTBL_ENTRY _ZTI7S1288C4[];
extern  VTBL_ENTRY _ZTV7S1288C4[];
extern Class_Descriptor cd_S1288C3_nt;
extern VTBL_ENTRY _ZTI10S1288C3_nt[];
extern  VTBL_ENTRY _ZTV10S1288C3_nt[];
static Base_Class bases_S1288C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1288C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1288C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1288C2_nt[];
extern void _ZN10S1288C2_ntD1Ev();
extern void _ZN10S1288C2_ntD0Ev();
extern void _ZN7S1288C43v10Ev();
extern void _ZN7S1288C43v11Ev();
extern void _ZN7S1288C43v12Ev();
extern void _ZN7S1288C43v13Ev();
extern void _ZN7S1288C43v14Ev();
extern void _ZN7S1288C43v15Ev();
extern void _ZN7S1288C43v16Ev();
extern void _ZN7S1288C43v17Ev();
extern void _ZN7S1288C43v18Ev();
extern void _ZN7S1288C43v19Ev();
extern void _ZN7S1288C43v20Ev();
extern void _ZN7S1288C43v21Ev();
extern void _ZN7S1288C43v22Ev();
extern void _ZN7S1288C43v23Ev();
extern void _ZN7S1288C43v24Ev();
extern void _ZN7S1288C43v25Ev();
extern void _ZN7S1288C43v26Ev();
extern void _ZN7S1288C43v27Ev();
extern void _ZN7S1288C43v28Ev();
extern void _ZN7S1288C43v29Ev();
extern void _ZN7S1288C43v30Ev();
extern void _ZN7S1288C43v31Ev();
extern void _ZN7S1288C43v32Ev();
extern void _ZN7S1288C43v33Ev();
extern void _ZN7S1288C43v34Ev();
extern void _ZN7S1288C43v35Ev();
extern void _ZN7S1288C43v36Ev();
extern void _ZN7S1288C43v37Ev();
extern void _ZN7S1288C43v38Ev();
extern void _ZN7S1288C43v39Ev();
extern void _ZN7S1288C43v40Ev();
extern void _ZN7S1288C43v41Ev();
extern void _ZN7S1288C43v42Ev();
extern void _ZN7S1288C43v43Ev();
extern void _ZN7S1288C43v44Ev();
extern void _ZN7S1288C43v45Ev();
extern void _ZN7S1288C43v46Ev();
extern void _ZN7S1288C43v47Ev();
extern void _ZN7S1288C43v48Ev();
extern void _ZN7S1288C43v49Ev();
extern void _ZN7S1288C43v50Ev();
extern void _ZN7S1288C43v51Ev();
extern void _ZN7S1288C43v52Ev();
extern void _ZN7S1288C43v53Ev();
extern void _ZN7S1288C43v54Ev();
extern void _ZN7S1288C43v55Ev();
extern void _ZN7S1288C43v56Ev();
extern void _ZN7S1288C43v57Ev();
extern void _ZN7S1288C43v58Ev();
extern void _ZN7S1288C43v59Ev();
extern void _ZN7S1288C43v60Ev();
extern void _ZN7S1288C43v61Ev();
extern void _ZN7S1288C43v62Ev();
extern void _ZN7S1288C43v63Ev();
extern void _ZN7S1288C43v64Ev();
extern void _ZN7S1288C43v65Ev();
extern void _ZN7S1288C43v66Ev();
extern void _ZN7S1288C43v67Ev();
extern void _ZN7S1288C43v68Ev();
extern void _ZN7S1288C43v69Ev();
extern void _ZN7S1288C43v70Ev();
extern void _ZN7S1288C43v71Ev();
extern void _ZN7S1288C43v72Ev();
extern void _ZN7S1288C43v73Ev();
extern void _ZN10S1288C3_nt3v74Ev();
extern void _ZN10S1288C3_nt3v75Ev();
extern void _ZN10S1288C3_nt3v76Ev();
extern void _ZN10S1288C3_nt3v77Ev();
extern void _ZN10S1288C3_nt3v78Ev();
extern void _ZN10S1288C2_nt3v79Ev();
extern void _ZN10S1288C2_nt3v80Ev();
extern void _ZN10S1288C2_nt3v81Ev();
extern void _ZN10S1288C2_nt3v82Ev();
extern void _ZN10S1288C2_nt3v83Ev();
extern void _ZN10S1288C2_nt3v84Ev();
extern void _ZN10S1288C2_nt3v85Ev();
extern void _ZN10S1288C2_nt3v86Ev();
extern void _ZN10S1288C2_nt3v87Ev();
extern void _ZN10S1288C2_nt3v88Ev();
extern void _ZN10S1288C2_nt3v89Ev();
extern void _ZN10S1288C2_nt3v90Ev();
extern void _ZN10S1288C2_nt3v91Ev();
extern void _ZN10S1288C2_nt3v92Ev();
extern void _ZN10S1288C2_nt3v93Ev();
extern void _ZN10S1288C2_nt3v94Ev();
extern void _ZN10S1288C2_nt3v95Ev();
extern void _ZN10S1288C2_nt3v96Ev();
extern void _ZN10S1288C2_nt3v97Ev();
extern void _ZN10S1288C2_nt3v98Ev();
extern void _ZN10S1288C2_nt3v99Ev();
extern void _ZN10S1288C2_nt4v100Ev();
static  VTBL_ENTRY vtc_S1288C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1288C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1288C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v73Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt4v100Ev,
};
extern VTBL_ENTRY _ZTI10S1288C2_nt[];
VTBL_ENTRY *P__ZTI10S1288C2_nt = _ZTI10S1288C2_nt; 
extern  VTBL_ENTRY _ZTV10S1288C2_nt[];
Class_Descriptor cd_S1288C2_nt = {  "S1288C2_nt", // class name
  bases_S1288C2_nt, 2,
  &(vtc_S1288C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI10S1288C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1288C2_nt),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C11_nt  {
  ::S1409C19 s1288c11f0;
  void *s1288c11f1;
  int s1288c11f2;
  void  mf1288c11(); // _ZN11S1288C11_nt9mf1288c11Ev
};
//SIG(-1 S1288C11_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S1288C11_nt ::mf1288c11(){}

//skip512 S1288C11_nt

#else // __cplusplus

Class_Descriptor cd_S1288C11_nt = {  "S1288C11_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C10_nt  : S1288C11_nt {
};
//SIG(-1 S1288C10_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S1288C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S1288C11_nt;
static Base_Class bases_S1288C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1288C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C17_nt  {
  void *s1288c17f0;
  ::S1409C5_nt s1288c17f1;
  void  mf1288c17(); // _ZN11S1288C17_nt9mf1288c17Ev
};
//SIG(-1 S1288C17_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S1288C17_nt ::mf1288c17(){}

//skip512 S1288C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1288C1  : S1288C2_nt {
  void *s1288c1f0[2];
  ::S1409C31 s1288c1f1;
  unsigned int s1288c1f2:1;
  unsigned int s1288c1f3:1;
  unsigned int s1288c1f4:1;
  unsigned int s1288c1f5:1;
  unsigned int s1288c1f6:1;
  unsigned int s1288c1f7:1;
  unsigned int s1288c1f8:1;
  unsigned int s1288c1f9:1;
  unsigned int s1288c1f10:1;
  unsigned int s1288c1f11:1;
  unsigned int s1288c1f12:1;
  unsigned int s1288c1f13:1;
  unsigned int s1288c1f14:1;
  unsigned int s1288c1f15:1;
  unsigned int s1288c1f16:1;
  unsigned int s1288c1f17:1;
  ::S1409C27 s1288c1f18;
  ::S1409C23 s1288c1f19;
  ::S1288C10_nt s1288c1f20;
  ::S1288C10_nt s1288c1f21;
  void *s1288c1f22;
  int s1288c1f23;
  void *s1288c1f24;
  ::S1409C14_nt s1288c1f25;
  ::S1409C14_nt s1288c1f26;
  int s1288c1f27[11];
  void *s1288c1f28;
  ::S1409C14_nt s1288c1f29;
  int s1288c1f30[13];
  void *s1288c1f31;
  ::S1288C17_nt s1288c1f32;
  virtual  ~S1288C1(); // _ZN7S1288C1D1Ev
  virtual void  v1(); // _ZN7S1288C12v1Ev
  virtual void  v2(); // _ZN7S1288C12v2Ev
  virtual void  v3(); // _ZN7S1288C12v3Ev
  virtual void  v4(); // _ZN7S1288C12v4Ev
  virtual void  v5(); // _ZN7S1288C12v5Ev
  virtual void  v6(); // _ZN7S1288C12v6Ev
  virtual void  v7(); // _ZN7S1288C12v7Ev
  virtual void  v8(); // _ZN7S1288C12v8Ev
  virtual void  v9(); // _ZN7S1288C12v9Ev
  S1288C1(); // tgen
};
//SIG(1 S1288C1) C1{ BC2{ BC3{ BC4{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 Fp FC5} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[2] FC6{ BC7{ m Fp Fi[2]}} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC8{ BC7} FC9{ BC7} FC10{ BC11{ m FC12{ BC7} Fp Fi}} FC10 Fp Fi Fp FC13{ m Fi[3]} FC13 Fi[11] Fp FC13 Fi[13] Fp FC14{ m Fp FC5}}


 S1288C1 ::~S1288C1(){ note_dtor("S1288C1", this);}
void  S1288C1 ::v1(){vfunc_called(this, "_ZN7S1288C12v1Ev");}
void  S1288C1 ::v2(){vfunc_called(this, "_ZN7S1288C12v2Ev");}
void  S1288C1 ::v3(){vfunc_called(this, "_ZN7S1288C12v3Ev");}
void  S1288C1 ::v4(){vfunc_called(this, "_ZN7S1288C12v4Ev");}
void  S1288C1 ::v5(){vfunc_called(this, "_ZN7S1288C12v5Ev");}
void  S1288C1 ::v6(){vfunc_called(this, "_ZN7S1288C12v6Ev");}
void  S1288C1 ::v7(){vfunc_called(this, "_ZN7S1288C12v7Ev");}
void  S1288C1 ::v8(){vfunc_called(this, "_ZN7S1288C12v8Ev");}
void  S1288C1 ::v9(){vfunc_called(this, "_ZN7S1288C12v9Ev");}
S1288C1 ::S1288C1(){ note_ctor("S1288C1", this);} // tgen

static void Test_S1288C1()
{
  extern Class_Descriptor cd_S1288C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,85)];
    init_test(&cd_S1288C1, buf);
    S1288C1 *dp, &lv = *(dp=new (buf) S1288C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,336), "sizeof(S1288C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1288C1)");
    check_base_class_offset(lv, (S1288C4*)(S1288C3_nt*)(S1288C2_nt*), 0, "S1288C1");
    check_base_class_offset(lv, (S1288C3_nt*)(S1288C2_nt*), 0, "S1288C1");
    check_base_class_offset(lv, (S1288C2_nt*), 0, "S1288C1");
    check_field_offset(lv, s1288c1f0, ABISELECT(136,84), "S1288C1.s1288c1f0");
    check_field_offset(lv, s1288c1f1, ABISELECT(152,92), "S1288C1.s1288c1f1");
    set_bf_and_test(lv, s1288c1f2, ABISELECT(168,104), 0, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f3, ABISELECT(168,104), 1, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f4, ABISELECT(168,104), 2, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f5, ABISELECT(168,104), 3, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f6, ABISELECT(168,104), 4, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f7, ABISELECT(168,104), 5, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f8, ABISELECT(168,104), 6, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f9, ABISELECT(168,104), 7, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f10, ABISELECT(169,105), 0, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f11, ABISELECT(169,105), 1, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f12, ABISELECT(169,105), 2, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f13, ABISELECT(169,105), 3, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f14, ABISELECT(169,105), 4, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f15, ABISELECT(169,105), 5, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f16, ABISELECT(169,105), 6, 1, 1, "S1288C1");
    set_bf_and_test(lv, s1288c1f17, ABISELECT(169,105), 7, 1, 1, "S1288C1");
    check_field_offset(lv, s1288c1f18, ABISELECT(176,108), "S1288C1.s1288c1f18");
    check_field_offset(lv, s1288c1f19, ABISELECT(192,120), "S1288C1.s1288c1f19");
    check_field_offset(lv, s1288c1f20, ABISELECT(208,132), "S1288C1.s1288c1f20");
    check_field_offset(lv, s1288c1f21, ABISELECT(240,152), "S1288C1.s1288c1f21");
    check_field_offset(lv, s1288c1f22, ABISELECT(272,172), "S1288C1.s1288c1f22");
    check_field_offset(lv, s1288c1f23, ABISELECT(280,176), "S1288C1.s1288c1f23");
    check_field_offset(lv, s1288c1f24, ABISELECT(288,180), "S1288C1.s1288c1f24");
    check_field_offset(lv, s1288c1f25, ABISELECT(296,184), "S1288C1.s1288c1f25");
    check_field_offset(lv, s1288c1f26, ABISELECT(308,196), "S1288C1.s1288c1f26");
    check_field_offset(lv, s1288c1f27, ABISELECT(320,208), "S1288C1.s1288c1f27");
    check_field_offset(lv, s1288c1f28, ABISELECT(368,252), "S1288C1.s1288c1f28");
    check_field_offset(lv, s1288c1f29, ABISELECT(376,256), "S1288C1.s1288c1f29");
    check_field_offset(lv, s1288c1f30, ABISELECT(388,268), "S1288C1.s1288c1f30");
    check_field_offset(lv, s1288c1f31, ABISELECT(440,320), "S1288C1.s1288c1f31");
    check_field_offset(lv, s1288c1f32, ABISELECT(448,324), "S1288C1.s1288c1f32");
    test_class_info(&lv, &cd_S1288C1);
    dp->~S1288C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1288C1(Test_S1288C1, "S1288C1", ABISELECT(464,336));

#else // __cplusplus

extern void _ZN7S1288C1C1Ev();
extern void _ZN7S1288C1D1Ev();
Name_Map name_map_S1288C1[] = {
  NSPAIR(_ZN7S1288C1C1Ev),
  NSPAIR(_ZN7S1288C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1288C4;
extern VTBL_ENTRY _ZTI7S1288C4[];
extern  VTBL_ENTRY _ZTV7S1288C4[];
extern Class_Descriptor cd_S1288C3_nt;
extern VTBL_ENTRY _ZTI10S1288C3_nt[];
extern  VTBL_ENTRY _ZTV10S1288C3_nt[];
extern Class_Descriptor cd_S1288C2_nt;
extern VTBL_ENTRY _ZTI10S1288C2_nt[];
extern  VTBL_ENTRY _ZTV10S1288C2_nt[];
static Base_Class bases_S1288C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1288C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1288C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1288C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1288C1[];
extern void _ZN7S1288C1D1Ev();
extern void _ZN7S1288C1D0Ev();
extern void _ZN7S1288C43v10Ev();
extern void _ZN7S1288C43v11Ev();
extern void _ZN7S1288C43v12Ev();
extern void _ZN7S1288C43v13Ev();
extern void _ZN7S1288C43v14Ev();
extern void _ZN7S1288C43v15Ev();
extern void _ZN7S1288C43v16Ev();
extern void _ZN7S1288C43v17Ev();
extern void _ZN7S1288C43v18Ev();
extern void _ZN7S1288C43v19Ev();
extern void _ZN7S1288C43v20Ev();
extern void _ZN7S1288C43v21Ev();
extern void _ZN7S1288C43v22Ev();
extern void _ZN7S1288C43v23Ev();
extern void _ZN7S1288C43v24Ev();
extern void _ZN7S1288C43v25Ev();
extern void _ZN7S1288C43v26Ev();
extern void _ZN7S1288C43v27Ev();
extern void _ZN7S1288C43v28Ev();
extern void _ZN7S1288C43v29Ev();
extern void _ZN7S1288C43v30Ev();
extern void _ZN7S1288C43v31Ev();
extern void _ZN7S1288C43v32Ev();
extern void _ZN7S1288C43v33Ev();
extern void _ZN7S1288C43v34Ev();
extern void _ZN7S1288C43v35Ev();
extern void _ZN7S1288C43v36Ev();
extern void _ZN7S1288C43v37Ev();
extern void _ZN7S1288C43v38Ev();
extern void _ZN7S1288C43v39Ev();
extern void _ZN7S1288C43v40Ev();
extern void _ZN7S1288C43v41Ev();
extern void _ZN7S1288C43v42Ev();
extern void _ZN7S1288C43v43Ev();
extern void _ZN7S1288C43v44Ev();
extern void _ZN7S1288C43v45Ev();
extern void _ZN7S1288C43v46Ev();
extern void _ZN7S1288C43v47Ev();
extern void _ZN7S1288C43v48Ev();
extern void _ZN7S1288C43v49Ev();
extern void _ZN7S1288C43v50Ev();
extern void _ZN7S1288C43v51Ev();
extern void _ZN7S1288C43v52Ev();
extern void _ZN7S1288C43v53Ev();
extern void _ZN7S1288C43v54Ev();
extern void _ZN7S1288C43v55Ev();
extern void _ZN7S1288C43v56Ev();
extern void _ZN7S1288C43v57Ev();
extern void _ZN7S1288C43v58Ev();
extern void _ZN7S1288C43v59Ev();
extern void _ZN7S1288C43v60Ev();
extern void _ZN7S1288C43v61Ev();
extern void _ZN7S1288C43v62Ev();
extern void _ZN7S1288C43v63Ev();
extern void _ZN7S1288C43v64Ev();
extern void _ZN7S1288C43v65Ev();
extern void _ZN7S1288C43v66Ev();
extern void _ZN7S1288C43v67Ev();
extern void _ZN7S1288C43v68Ev();
extern void _ZN7S1288C43v69Ev();
extern void _ZN7S1288C43v70Ev();
extern void _ZN7S1288C43v71Ev();
extern void _ZN7S1288C43v72Ev();
extern void _ZN7S1288C43v73Ev();
extern void _ZN10S1288C3_nt3v74Ev();
extern void _ZN10S1288C3_nt3v75Ev();
extern void _ZN10S1288C3_nt3v76Ev();
extern void _ZN10S1288C3_nt3v77Ev();
extern void _ZN10S1288C3_nt3v78Ev();
extern void _ZN10S1288C2_nt3v79Ev();
extern void _ZN10S1288C2_nt3v80Ev();
extern void _ZN10S1288C2_nt3v81Ev();
extern void _ZN10S1288C2_nt3v82Ev();
extern void _ZN10S1288C2_nt3v83Ev();
extern void _ZN10S1288C2_nt3v84Ev();
extern void _ZN10S1288C2_nt3v85Ev();
extern void _ZN10S1288C2_nt3v86Ev();
extern void _ZN10S1288C2_nt3v87Ev();
extern void _ZN10S1288C2_nt3v88Ev();
extern void _ZN10S1288C2_nt3v89Ev();
extern void _ZN10S1288C2_nt3v90Ev();
extern void _ZN10S1288C2_nt3v91Ev();
extern void _ZN10S1288C2_nt3v92Ev();
extern void _ZN10S1288C2_nt3v93Ev();
extern void _ZN10S1288C2_nt3v94Ev();
extern void _ZN10S1288C2_nt3v95Ev();
extern void _ZN10S1288C2_nt3v96Ev();
extern void _ZN10S1288C2_nt3v97Ev();
extern void _ZN10S1288C2_nt3v98Ev();
extern void _ZN10S1288C2_nt3v99Ev();
extern void _ZN10S1288C2_nt4v100Ev();
extern void _ZN7S1288C12v1Ev();
extern void _ZN7S1288C12v2Ev();
extern void _ZN7S1288C12v3Ev();
extern void _ZN7S1288C12v4Ev();
extern void _ZN7S1288C12v5Ev();
extern void _ZN7S1288C12v6Ev();
extern void _ZN7S1288C12v7Ev();
extern void _ZN7S1288C12v8Ev();
extern void _ZN7S1288C12v9Ev();
static  VTBL_ENTRY vtc_S1288C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1288C1[0]),
  (VTBL_ENTRY)&_ZN7S1288C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1288C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1288C43v73Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1288C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1288C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1288C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S1288C1[];
extern  VTBL_ENTRY _ZTV7S1288C1[];
Class_Descriptor cd_S1288C1 = {  "S1288C1", // class name
  bases_S1288C1, 3,
  &(vtc_S1288C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(464,336), // object size
  NSPAIRA(_ZTI7S1288C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1288C1),104, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3046C3  {
  int s3046c3f0;
  __tsi64 s3046c3f1;
  void *s3046c3f2[4];
  int s3046c3f3[2];
  void *s3046c3f4;
  ::S1409C5_nt s3046c3f5;
  void *s3046c3f6[2];
  virtual  ~S3046C3(); // _ZN7S3046C3D1Ev
  virtual void  v18(); // _ZN7S3046C33v18Ev
  virtual void  v19(); // _ZN7S3046C33v19Ev
  virtual void  v20(); // _ZN7S3046C33v20Ev
  virtual void  v21(); // _ZN7S3046C33v21Ev
  virtual void  v22(); // _ZN7S3046C33v22Ev
  virtual void  v23(); // _ZN7S3046C33v23Ev
  virtual void  v24(); // _ZN7S3046C33v24Ev
  virtual void  v25(); // _ZN7S3046C33v25Ev
  virtual void  v26(); // _ZN7S3046C33v26Ev
  virtual void  v27(); // _ZN7S3046C33v27Ev
  virtual void  v28(); // _ZN7S3046C33v28Ev
  virtual void  v29(); // _ZN7S3046C33v29Ev
  virtual void  v30(); // _ZN7S3046C33v30Ev
  virtual void  v31(); // _ZN7S3046C33v31Ev
  virtual void  v32(); // _ZN7S3046C33v32Ev
  virtual void  v33(); // _ZN7S3046C33v33Ev
  virtual void  v34(); // _ZN7S3046C33v34Ev
  virtual void  v35(); // _ZN7S3046C33v35Ev
  virtual void  v36(); // _ZN7S3046C33v36Ev
  virtual void  v37(); // _ZN7S3046C33v37Ev
  virtual void  v38(); // _ZN7S3046C33v38Ev
  virtual void  v39(); // _ZN7S3046C33v39Ev
  virtual void  v40(); // _ZN7S3046C33v40Ev
  virtual void  v41(); // _ZN7S3046C33v41Ev
  virtual void  v42(); // _ZN7S3046C33v42Ev
  virtual void  v43(); // _ZN7S3046C33v43Ev
  virtual void  v44(); // _ZN7S3046C33v44Ev
  virtual void  v45(); // _ZN7S3046C33v45Ev
  virtual void  v46(); // _ZN7S3046C33v46Ev
  virtual void  v47(); // _ZN7S3046C33v47Ev
  virtual void  v48(); // _ZN7S3046C33v48Ev
  virtual void  v49(); // _ZN7S3046C33v49Ev
  virtual void  v50(); // _ZN7S3046C33v50Ev
  virtual void  v51(); // _ZN7S3046C33v51Ev
  virtual void  v52(); // _ZN7S3046C33v52Ev
  virtual void  v53(); // _ZN7S3046C33v53Ev
  virtual void  v54(); // _ZN7S3046C33v54Ev
  virtual void  v55(); // _ZN7S3046C33v55Ev
  virtual void  v56(); // _ZN7S3046C33v56Ev
  virtual void  v57(); // _ZN7S3046C33v57Ev
  virtual void  v58(); // _ZN7S3046C33v58Ev
  virtual void  v59(); // _ZN7S3046C33v59Ev
  virtual void  v60(); // _ZN7S3046C33v60Ev
  virtual void  v61(); // _ZN7S3046C33v61Ev
  virtual void  v62(); // _ZN7S3046C33v62Ev
  virtual void  v63(); // _ZN7S3046C33v63Ev
  virtual void  v64(); // _ZN7S3046C33v64Ev
  virtual void  v65(); // _ZN7S3046C33v65Ev
  virtual void  v66(); // _ZN7S3046C33v66Ev
  virtual void  v67(); // _ZN7S3046C33v67Ev
  virtual void  v68(); // _ZN7S3046C33v68Ev
  virtual void  v69(); // _ZN7S3046C33v69Ev
  virtual void  v70(); // _ZN7S3046C33v70Ev
  virtual void  v71(); // _ZN7S3046C33v71Ev
  virtual void  v72(); // _ZN7S3046C33v72Ev
  virtual void  v73(); // _ZN7S3046C33v73Ev
  virtual void  v74(); // _ZN7S3046C33v74Ev
  virtual void  v75(); // _ZN7S3046C33v75Ev
  virtual void  v76(); // _ZN7S3046C33v76Ev
  virtual void  v77(); // _ZN7S3046C33v77Ev
  virtual void  v78(); // _ZN7S3046C33v78Ev
  virtual void  v79(); // _ZN7S3046C33v79Ev
  virtual void  v80(); // _ZN7S3046C33v80Ev
  virtual void  v81(); // _ZN7S3046C33v81Ev
  S3046C3(); // tgen
};
//SIG(-1 S3046C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3046C3 ::~S3046C3(){ note_dtor("S3046C3", this);}
void  S3046C3 ::v18(){vfunc_called(this, "_ZN7S3046C33v18Ev");}
void  S3046C3 ::v19(){vfunc_called(this, "_ZN7S3046C33v19Ev");}
void  S3046C3 ::v20(){vfunc_called(this, "_ZN7S3046C33v20Ev");}
void  S3046C3 ::v21(){vfunc_called(this, "_ZN7S3046C33v21Ev");}
void  S3046C3 ::v22(){vfunc_called(this, "_ZN7S3046C33v22Ev");}
void  S3046C3 ::v23(){vfunc_called(this, "_ZN7S3046C33v23Ev");}
void  S3046C3 ::v24(){vfunc_called(this, "_ZN7S3046C33v24Ev");}
void  S3046C3 ::v25(){vfunc_called(this, "_ZN7S3046C33v25Ev");}
void  S3046C3 ::v26(){vfunc_called(this, "_ZN7S3046C33v26Ev");}
void  S3046C3 ::v27(){vfunc_called(this, "_ZN7S3046C33v27Ev");}
void  S3046C3 ::v28(){vfunc_called(this, "_ZN7S3046C33v28Ev");}
void  S3046C3 ::v29(){vfunc_called(this, "_ZN7S3046C33v29Ev");}
void  S3046C3 ::v30(){vfunc_called(this, "_ZN7S3046C33v30Ev");}
void  S3046C3 ::v31(){vfunc_called(this, "_ZN7S3046C33v31Ev");}
void  S3046C3 ::v32(){vfunc_called(this, "_ZN7S3046C33v32Ev");}
void  S3046C3 ::v33(){vfunc_called(this, "_ZN7S3046C33v33Ev");}
void  S3046C3 ::v34(){vfunc_called(this, "_ZN7S3046C33v34Ev");}
void  S3046C3 ::v35(){vfunc_called(this, "_ZN7S3046C33v35Ev");}
void  S3046C3 ::v36(){vfunc_called(this, "_ZN7S3046C33v36Ev");}
void  S3046C3 ::v37(){vfunc_called(this, "_ZN7S3046C33v37Ev");}
void  S3046C3 ::v38(){vfunc_called(this, "_ZN7S3046C33v38Ev");}
void  S3046C3 ::v39(){vfunc_called(this, "_ZN7S3046C33v39Ev");}
void  S3046C3 ::v40(){vfunc_called(this, "_ZN7S3046C33v40Ev");}
void  S3046C3 ::v41(){vfunc_called(this, "_ZN7S3046C33v41Ev");}
void  S3046C3 ::v42(){vfunc_called(this, "_ZN7S3046C33v42Ev");}
void  S3046C3 ::v43(){vfunc_called(this, "_ZN7S3046C33v43Ev");}
void  S3046C3 ::v44(){vfunc_called(this, "_ZN7S3046C33v44Ev");}
void  S3046C3 ::v45(){vfunc_called(this, "_ZN7S3046C33v45Ev");}
void  S3046C3 ::v46(){vfunc_called(this, "_ZN7S3046C33v46Ev");}
void  S3046C3 ::v47(){vfunc_called(this, "_ZN7S3046C33v47Ev");}
void  S3046C3 ::v48(){vfunc_called(this, "_ZN7S3046C33v48Ev");}
void  S3046C3 ::v49(){vfunc_called(this, "_ZN7S3046C33v49Ev");}
void  S3046C3 ::v50(){vfunc_called(this, "_ZN7S3046C33v50Ev");}
void  S3046C3 ::v51(){vfunc_called(this, "_ZN7S3046C33v51Ev");}
void  S3046C3 ::v52(){vfunc_called(this, "_ZN7S3046C33v52Ev");}
void  S3046C3 ::v53(){vfunc_called(this, "_ZN7S3046C33v53Ev");}
void  S3046C3 ::v54(){vfunc_called(this, "_ZN7S3046C33v54Ev");}
void  S3046C3 ::v55(){vfunc_called(this, "_ZN7S3046C33v55Ev");}
void  S3046C3 ::v56(){vfunc_called(this, "_ZN7S3046C33v56Ev");}
void  S3046C3 ::v57(){vfunc_called(this, "_ZN7S3046C33v57Ev");}
void  S3046C3 ::v58(){vfunc_called(this, "_ZN7S3046C33v58Ev");}
void  S3046C3 ::v59(){vfunc_called(this, "_ZN7S3046C33v59Ev");}
void  S3046C3 ::v60(){vfunc_called(this, "_ZN7S3046C33v60Ev");}
void  S3046C3 ::v61(){vfunc_called(this, "_ZN7S3046C33v61Ev");}
void  S3046C3 ::v62(){vfunc_called(this, "_ZN7S3046C33v62Ev");}
void  S3046C3 ::v63(){vfunc_called(this, "_ZN7S3046C33v63Ev");}
void  S3046C3 ::v64(){vfunc_called(this, "_ZN7S3046C33v64Ev");}
void  S3046C3 ::v65(){vfunc_called(this, "_ZN7S3046C33v65Ev");}
void  S3046C3 ::v66(){vfunc_called(this, "_ZN7S3046C33v66Ev");}
void  S3046C3 ::v67(){vfunc_called(this, "_ZN7S3046C33v67Ev");}
void  S3046C3 ::v68(){vfunc_called(this, "_ZN7S3046C33v68Ev");}
void  S3046C3 ::v69(){vfunc_called(this, "_ZN7S3046C33v69Ev");}
void  S3046C3 ::v70(){vfunc_called(this, "_ZN7S3046C33v70Ev");}
void  S3046C3 ::v71(){vfunc_called(this, "_ZN7S3046C33v71Ev");}
void  S3046C3 ::v72(){vfunc_called(this, "_ZN7S3046C33v72Ev");}
void  S3046C3 ::v73(){vfunc_called(this, "_ZN7S3046C33v73Ev");}
void  S3046C3 ::v74(){vfunc_called(this, "_ZN7S3046C33v74Ev");}
void  S3046C3 ::v75(){vfunc_called(this, "_ZN7S3046C33v75Ev");}
void  S3046C3 ::v76(){vfunc_called(this, "_ZN7S3046C33v76Ev");}
void  S3046C3 ::v77(){vfunc_called(this, "_ZN7S3046C33v77Ev");}
void  S3046C3 ::v78(){vfunc_called(this, "_ZN7S3046C33v78Ev");}
void  S3046C3 ::v79(){vfunc_called(this, "_ZN7S3046C33v79Ev");}
void  S3046C3 ::v80(){vfunc_called(this, "_ZN7S3046C33v80Ev");}
void  S3046C3 ::v81(){vfunc_called(this, "_ZN7S3046C33v81Ev");}
S3046C3 ::S3046C3(){ note_ctor("S3046C3", this);} // tgen

static void Test_S3046C3()
{
  extern Class_Descriptor cd_S3046C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3046C3, buf);
    S3046C3 *dp, &lv = *(dp=new (buf) S3046C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3046C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3046C3)");
    check_field_offset(lv, s3046c3f0, ABISELECT(8,4), "S3046C3.s3046c3f0");
    check_field_offset(lv, s3046c3f1, ABISELECT(16,8), "S3046C3.s3046c3f1");
    check_field_offset(lv, s3046c3f2, ABISELECT(24,16), "S3046C3.s3046c3f2");
    check_field_offset(lv, s3046c3f3, ABISELECT(56,32), "S3046C3.s3046c3f3");
    check_field_offset(lv, s3046c3f4, ABISELECT(64,40), "S3046C3.s3046c3f4");
    check_field_offset(lv, s3046c3f5, ABISELECT(72,44), "S3046C3.s3046c3f5");
    check_field_offset(lv, s3046c3f6, ABISELECT(80,52), "S3046C3.s3046c3f6");
    test_class_info(&lv, &cd_S3046C3);
    dp->~S3046C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3046C3(Test_S3046C3, "S3046C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3046C3C1Ev();
extern void _ZN7S3046C3D1Ev();
Name_Map name_map_S3046C3[] = {
  NSPAIR(_ZN7S3046C3C1Ev),
  NSPAIR(_ZN7S3046C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3046C3[];
extern void _ZN7S3046C3D1Ev();
extern void _ZN7S3046C3D0Ev();
extern void _ZN7S3046C33v18Ev();
extern void _ZN7S3046C33v19Ev();
extern void _ZN7S3046C33v20Ev();
extern void _ZN7S3046C33v21Ev();
extern void _ZN7S3046C33v22Ev();
extern void _ZN7S3046C33v23Ev();
extern void _ZN7S3046C33v24Ev();
extern void _ZN7S3046C33v25Ev();
extern void _ZN7S3046C33v26Ev();
extern void _ZN7S3046C33v27Ev();
extern void _ZN7S3046C33v28Ev();
extern void _ZN7S3046C33v29Ev();
extern void _ZN7S3046C33v30Ev();
extern void _ZN7S3046C33v31Ev();
extern void _ZN7S3046C33v32Ev();
extern void _ZN7S3046C33v33Ev();
extern void _ZN7S3046C33v34Ev();
extern void _ZN7S3046C33v35Ev();
extern void _ZN7S3046C33v36Ev();
extern void _ZN7S3046C33v37Ev();
extern void _ZN7S3046C33v38Ev();
extern void _ZN7S3046C33v39Ev();
extern void _ZN7S3046C33v40Ev();
extern void _ZN7S3046C33v41Ev();
extern void _ZN7S3046C33v42Ev();
extern void _ZN7S3046C33v43Ev();
extern void _ZN7S3046C33v44Ev();
extern void _ZN7S3046C33v45Ev();
extern void _ZN7S3046C33v46Ev();
extern void _ZN7S3046C33v47Ev();
extern void _ZN7S3046C33v48Ev();
extern void _ZN7S3046C33v49Ev();
extern void _ZN7S3046C33v50Ev();
extern void _ZN7S3046C33v51Ev();
extern void _ZN7S3046C33v52Ev();
extern void _ZN7S3046C33v53Ev();
extern void _ZN7S3046C33v54Ev();
extern void _ZN7S3046C33v55Ev();
extern void _ZN7S3046C33v56Ev();
extern void _ZN7S3046C33v57Ev();
extern void _ZN7S3046C33v58Ev();
extern void _ZN7S3046C33v59Ev();
extern void _ZN7S3046C33v60Ev();
extern void _ZN7S3046C33v61Ev();
extern void _ZN7S3046C33v62Ev();
extern void _ZN7S3046C33v63Ev();
extern void _ZN7S3046C33v64Ev();
extern void _ZN7S3046C33v65Ev();
extern void _ZN7S3046C33v66Ev();
extern void _ZN7S3046C33v67Ev();
extern void _ZN7S3046C33v68Ev();
extern void _ZN7S3046C33v69Ev();
extern void _ZN7S3046C33v70Ev();
extern void _ZN7S3046C33v71Ev();
extern void _ZN7S3046C33v72Ev();
extern void _ZN7S3046C33v73Ev();
extern void _ZN7S3046C33v74Ev();
extern void _ZN7S3046C33v75Ev();
extern void _ZN7S3046C33v76Ev();
extern void _ZN7S3046C33v77Ev();
extern void _ZN7S3046C33v78Ev();
extern void _ZN7S3046C33v79Ev();
extern void _ZN7S3046C33v80Ev();
extern void _ZN7S3046C33v81Ev();
static  VTBL_ENTRY vtc_S3046C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3046C3[0]),
  (VTBL_ENTRY)&_ZN7S3046C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3046C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v81Ev,
};
extern VTBL_ENTRY _ZTI7S3046C3[];
extern  VTBL_ENTRY _ZTV7S3046C3[];
Class_Descriptor cd_S3046C3 = {  "S3046C3", // class name
  0,0,//no base classes
  &(vtc_S3046C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3046C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3046C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3046C2  : S3046C3 {
  int s3046c2f0;
  ::S1409C30 s3046c2f1;
  virtual  ~S3046C2(); // _ZN7S3046C2D1Ev
  virtual void  v82(); // _ZN7S3046C23v82Ev
  virtual void  v83(); // _ZN7S3046C23v83Ev
  virtual void  v84(); // _ZN7S3046C23v84Ev
  virtual void  v85(); // _ZN7S3046C23v85Ev
  virtual void  v86(); // _ZN7S3046C23v86Ev
  virtual void  v87(); // _ZN7S3046C23v87Ev
  virtual void  v88(); // _ZN7S3046C23v88Ev
  virtual void  v89(); // _ZN7S3046C23v89Ev
  virtual void  v90(); // _ZN7S3046C23v90Ev
  virtual void  v91(); // _ZN7S3046C23v91Ev
  virtual void  v92(); // _ZN7S3046C23v92Ev
  virtual void  v93(); // _ZN7S3046C23v93Ev
  virtual void  v94(); // _ZN7S3046C23v94Ev
  virtual void  v95(); // _ZN7S3046C23v95Ev
  virtual void  v96(); // _ZN7S3046C23v96Ev
  virtual void  v97(); // _ZN7S3046C23v97Ev
  virtual void  v98(); // _ZN7S3046C23v98Ev
  virtual void  v99(); // _ZN7S3046C23v99Ev
  S3046C2(); // tgen
};
//SIG(-1 S3046C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3046C2 ::~S3046C2(){ note_dtor("S3046C2", this);}
void  S3046C2 ::v82(){vfunc_called(this, "_ZN7S3046C23v82Ev");}
void  S3046C2 ::v83(){vfunc_called(this, "_ZN7S3046C23v83Ev");}
void  S3046C2 ::v84(){vfunc_called(this, "_ZN7S3046C23v84Ev");}
void  S3046C2 ::v85(){vfunc_called(this, "_ZN7S3046C23v85Ev");}
void  S3046C2 ::v86(){vfunc_called(this, "_ZN7S3046C23v86Ev");}
void  S3046C2 ::v87(){vfunc_called(this, "_ZN7S3046C23v87Ev");}
void  S3046C2 ::v88(){vfunc_called(this, "_ZN7S3046C23v88Ev");}
void  S3046C2 ::v89(){vfunc_called(this, "_ZN7S3046C23v89Ev");}
void  S3046C2 ::v90(){vfunc_called(this, "_ZN7S3046C23v90Ev");}
void  S3046C2 ::v91(){vfunc_called(this, "_ZN7S3046C23v91Ev");}
void  S3046C2 ::v92(){vfunc_called(this, "_ZN7S3046C23v92Ev");}
void  S3046C2 ::v93(){vfunc_called(this, "_ZN7S3046C23v93Ev");}
void  S3046C2 ::v94(){vfunc_called(this, "_ZN7S3046C23v94Ev");}
void  S3046C2 ::v95(){vfunc_called(this, "_ZN7S3046C23v95Ev");}
void  S3046C2 ::v96(){vfunc_called(this, "_ZN7S3046C23v96Ev");}
void  S3046C2 ::v97(){vfunc_called(this, "_ZN7S3046C23v97Ev");}
void  S3046C2 ::v98(){vfunc_called(this, "_ZN7S3046C23v98Ev");}
void  S3046C2 ::v99(){vfunc_called(this, "_ZN7S3046C23v99Ev");}
S3046C2 ::S3046C2(){ note_ctor("S3046C2", this);} // tgen

static void Test_S3046C2()
{
  extern Class_Descriptor cd_S3046C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3046C2, buf);
    S3046C2 *dp, &lv = *(dp=new (buf) S3046C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3046C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3046C2)");
    check_base_class_offset(lv, (S3046C3*), 0, "S3046C2");
    check_field_offset(lv, s3046c2f0, ABISELECT(96,60), "S3046C2.s3046c2f0");
    check_field_offset(lv, s3046c2f1, ABISELECT(104,64), "S3046C2.s3046c2f1");
    test_class_info(&lv, &cd_S3046C2);
    dp->~S3046C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3046C2(Test_S3046C2, "S3046C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3046C2C1Ev();
extern void _ZN7S3046C2D1Ev();
Name_Map name_map_S3046C2[] = {
  NSPAIR(_ZN7S3046C2C1Ev),
  NSPAIR(_ZN7S3046C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3046C3;
extern VTBL_ENTRY _ZTI7S3046C3[];
extern  VTBL_ENTRY _ZTV7S3046C3[];
static Base_Class bases_S3046C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3046C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3046C2[];
extern void _ZN7S3046C2D1Ev();
extern void _ZN7S3046C2D0Ev();
extern void _ZN7S3046C33v18Ev();
extern void _ZN7S3046C33v19Ev();
extern void _ZN7S3046C33v20Ev();
extern void _ZN7S3046C33v21Ev();
extern void _ZN7S3046C33v22Ev();
extern void _ZN7S3046C33v23Ev();
extern void _ZN7S3046C33v24Ev();
extern void _ZN7S3046C33v25Ev();
extern void _ZN7S3046C33v26Ev();
extern void _ZN7S3046C33v27Ev();
extern void _ZN7S3046C33v28Ev();
extern void _ZN7S3046C33v29Ev();
extern void _ZN7S3046C33v30Ev();
extern void _ZN7S3046C33v31Ev();
extern void _ZN7S3046C33v32Ev();
extern void _ZN7S3046C33v33Ev();
extern void _ZN7S3046C33v34Ev();
extern void _ZN7S3046C33v35Ev();
extern void _ZN7S3046C33v36Ev();
extern void _ZN7S3046C33v37Ev();
extern void _ZN7S3046C33v38Ev();
extern void _ZN7S3046C33v39Ev();
extern void _ZN7S3046C33v40Ev();
extern void _ZN7S3046C33v41Ev();
extern void _ZN7S3046C33v42Ev();
extern void _ZN7S3046C33v43Ev();
extern void _ZN7S3046C33v44Ev();
extern void _ZN7S3046C33v45Ev();
extern void _ZN7S3046C33v46Ev();
extern void _ZN7S3046C33v47Ev();
extern void _ZN7S3046C33v48Ev();
extern void _ZN7S3046C33v49Ev();
extern void _ZN7S3046C33v50Ev();
extern void _ZN7S3046C33v51Ev();
extern void _ZN7S3046C33v52Ev();
extern void _ZN7S3046C33v53Ev();
extern void _ZN7S3046C33v54Ev();
extern void _ZN7S3046C33v55Ev();
extern void _ZN7S3046C33v56Ev();
extern void _ZN7S3046C33v57Ev();
extern void _ZN7S3046C33v58Ev();
extern void _ZN7S3046C33v59Ev();
extern void _ZN7S3046C33v60Ev();
extern void _ZN7S3046C33v61Ev();
extern void _ZN7S3046C33v62Ev();
extern void _ZN7S3046C33v63Ev();
extern void _ZN7S3046C33v64Ev();
extern void _ZN7S3046C33v65Ev();
extern void _ZN7S3046C33v66Ev();
extern void _ZN7S3046C33v67Ev();
extern void _ZN7S3046C33v68Ev();
extern void _ZN7S3046C33v69Ev();
extern void _ZN7S3046C33v70Ev();
extern void _ZN7S3046C33v71Ev();
extern void _ZN7S3046C33v72Ev();
extern void _ZN7S3046C33v73Ev();
extern void _ZN7S3046C33v74Ev();
extern void _ZN7S3046C33v75Ev();
extern void _ZN7S3046C33v76Ev();
extern void _ZN7S3046C33v77Ev();
extern void _ZN7S3046C33v78Ev();
extern void _ZN7S3046C33v79Ev();
extern void _ZN7S3046C33v80Ev();
extern void _ZN7S3046C33v81Ev();
extern void _ZN7S3046C23v82Ev();
extern void _ZN7S3046C23v83Ev();
extern void _ZN7S3046C23v84Ev();
extern void _ZN7S3046C23v85Ev();
extern void _ZN7S3046C23v86Ev();
extern void _ZN7S3046C23v87Ev();
extern void _ZN7S3046C23v88Ev();
extern void _ZN7S3046C23v89Ev();
extern void _ZN7S3046C23v90Ev();
extern void _ZN7S3046C23v91Ev();
extern void _ZN7S3046C23v92Ev();
extern void _ZN7S3046C23v93Ev();
extern void _ZN7S3046C23v94Ev();
extern void _ZN7S3046C23v95Ev();
extern void _ZN7S3046C23v96Ev();
extern void _ZN7S3046C23v97Ev();
extern void _ZN7S3046C23v98Ev();
extern void _ZN7S3046C23v99Ev();
static  VTBL_ENTRY vtc_S3046C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3046C2[0]),
  (VTBL_ENTRY)&_ZN7S3046C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3046C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v99Ev,
};
extern VTBL_ENTRY _ZTI7S3046C2[];
extern  VTBL_ENTRY _ZTV7S3046C2[];
Class_Descriptor cd_S3046C2 = {  "S3046C2", // class name
  bases_S3046C2, 1,
  &(vtc_S3046C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3046C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3046C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3046C14_nt  {
  int s3046c14f0[8];
  void *s3046c14f1;
  int s3046c14f2;
  void *s3046c14f3;
  virtual  ~S3046C14_nt(); // _ZN11S3046C14_ntD1Ev
  virtual void  v102(); // _ZN11S3046C14_nt4v102Ev
  virtual void  v103(); // _ZN11S3046C14_nt4v103Ev
  virtual void  v104(); // _ZN11S3046C14_nt4v104Ev
  virtual void  v105(); // _ZN11S3046C14_nt4v105Ev
  virtual void  v106(); // _ZN11S3046C14_nt4v106Ev
  S3046C14_nt(); // tgen
};
//SIG(-1 S3046C14_nt) C1{ vd v1 v2 v3 v4 v5 Fi[8] Fp Fi Fp}


 S3046C14_nt ::~S3046C14_nt(){ note_dtor("S3046C14_nt", this);}
void  S3046C14_nt ::v102(){vfunc_called(this, "_ZN11S3046C14_nt4v102Ev");}
void  S3046C14_nt ::v103(){vfunc_called(this, "_ZN11S3046C14_nt4v103Ev");}
void  S3046C14_nt ::v104(){vfunc_called(this, "_ZN11S3046C14_nt4v104Ev");}
void  S3046C14_nt ::v105(){vfunc_called(this, "_ZN11S3046C14_nt4v105Ev");}
void  S3046C14_nt ::v106(){vfunc_called(this, "_ZN11S3046C14_nt4v106Ev");}
S3046C14_nt ::S3046C14_nt(){ note_ctor("S3046C14_nt", this);} // tgen

//skip512 S3046C14_nt

#else // __cplusplus

extern void _ZN11S3046C14_ntC1Ev();
extern void _ZN11S3046C14_ntD1Ev();
Name_Map name_map_S3046C14_nt[] = {
  NSPAIR(_ZN11S3046C14_ntC1Ev),
  NSPAIR(_ZN11S3046C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S3046C14_nt[];
extern void _ZN11S3046C14_ntD1Ev();
extern void _ZN11S3046C14_ntD0Ev();
extern void _ZN11S3046C14_nt4v102Ev();
extern void _ZN11S3046C14_nt4v103Ev();
extern void _ZN11S3046C14_nt4v104Ev();
extern void _ZN11S3046C14_nt4v105Ev();
extern void _ZN11S3046C14_nt4v106Ev();
static  VTBL_ENTRY vtc_S3046C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3046C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S3046C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v102Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v103Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v104Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v105Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v106Ev,
};
extern VTBL_ENTRY _ZTI11S3046C14_nt[];
VTBL_ENTRY *P__ZTI11S3046C14_nt = _ZTI11S3046C14_nt; 
extern  VTBL_ENTRY _ZTV11S3046C14_nt[];
Class_Descriptor cd_S3046C14_nt = {  "S3046C14_nt", // class name
  0,0,//no base classes
  &(vtc_S3046C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI11S3046C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S3046C14_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3046C13_nt  : S3046C14_nt {
  virtual void  v100(); // _ZN11S3046C13_nt4v100Ev
  virtual void  v101(); // _ZN11S3046C13_nt4v101Ev
  ~S3046C13_nt(); // tgen
  S3046C13_nt(); // tgen
};
//SIG(-1 S3046C13_nt) C1{ BC2{ vd v3 v4 v5 v6 v7 Fi[8] Fp Fi Fp} v1 v2}


void  S3046C13_nt ::v100(){vfunc_called(this, "_ZN11S3046C13_nt4v100Ev");}
void  S3046C13_nt ::v101(){vfunc_called(this, "_ZN11S3046C13_nt4v101Ev");}
S3046C13_nt ::~S3046C13_nt(){ note_dtor("S3046C13_nt", this);} // tgen
S3046C13_nt ::S3046C13_nt(){ note_ctor("S3046C13_nt", this);} // tgen

//skip512 S3046C13_nt

#else // __cplusplus

extern void _ZN11S3046C13_ntC1Ev();
extern void _ZN11S3046C13_ntD1Ev();
Name_Map name_map_S3046C13_nt[] = {
  NSPAIR(_ZN11S3046C13_ntC1Ev),
  NSPAIR(_ZN11S3046C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3046C14_nt;
extern VTBL_ENTRY _ZTI11S3046C14_nt[];
extern  VTBL_ENTRY _ZTV11S3046C14_nt[];
static Base_Class bases_S3046C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3046C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S3046C13_nt[];
extern void _ZN11S3046C13_ntD1Ev();
extern void _ZN11S3046C13_ntD0Ev();
extern void _ZN11S3046C14_nt4v102Ev();
extern void _ZN11S3046C14_nt4v103Ev();
extern void _ZN11S3046C14_nt4v104Ev();
extern void _ZN11S3046C14_nt4v105Ev();
extern void _ZN11S3046C14_nt4v106Ev();
extern void _ZN11S3046C13_nt4v100Ev();
extern void _ZN11S3046C13_nt4v101Ev();
static  VTBL_ENTRY vtc_S3046C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S3046C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S3046C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S3046C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v102Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v103Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v104Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v105Ev,
  (VTBL_ENTRY)&_ZN11S3046C14_nt4v106Ev,
  (VTBL_ENTRY)&_ZN11S3046C13_nt4v100Ev,
  (VTBL_ENTRY)&_ZN11S3046C13_nt4v101Ev,
};
extern VTBL_ENTRY _ZTI11S3046C13_nt[];
VTBL_ENTRY *P__ZTI11S3046C13_nt = _ZTI11S3046C13_nt; 
extern  VTBL_ENTRY _ZTV11S3046C13_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3046C1  : S3046C2 {
  int s3046c1f0;
  unsigned int s3046c1f1:1;
  unsigned int s3046c1f2:1;
  unsigned int s3046c1f3:1;
  unsigned int s3046c1f4:1;
  unsigned int s3046c1f5:1;
  unsigned int s3046c1f6:1;
  unsigned int s3046c1f7:1;
  char s3046c1f8;
  ::S74C9_nt s3046c1f9;
  int s3046c1f10[6];
  ::S1409C26 s3046c1f11;
  ::S1409C26 s3046c1f12;
  ::S3046C13_nt s3046c1f13;
  void *s3046c1f14;
  char s3046c1f15;
  ::S1409C22 s3046c1f16;
  void *s3046c1f17;
  ::S3046C13_nt s3046c1f18;
  ::S3046C13_nt s3046c1f19;
  ::S3046C13_nt s3046c1f20;
  int s3046c1f21[2];
  void *s3046c1f22;
  ::S1409C18 s3046c1f23;
  ::S74C9_nt s3046c1f24;
  virtual  ~S3046C1(); // _ZN7S3046C1D1Ev
  virtual void  v1(); // _ZN7S3046C12v1Ev
  virtual void  v2(); // _ZN7S3046C12v2Ev
  virtual void  v3(); // _ZN7S3046C12v3Ev
  virtual void  v4(); // _ZN7S3046C12v4Ev
  virtual void  v5(); // _ZN7S3046C12v5Ev
  virtual void  v6(); // _ZN7S3046C12v6Ev
  virtual void  v7(); // _ZN7S3046C12v7Ev
  virtual void  v8(); // _ZN7S3046C12v8Ev
  virtual void  v9(); // _ZN7S3046C12v9Ev
  virtual void  v10(); // _ZN7S3046C13v10Ev
  virtual void  v11(); // _ZN7S3046C13v11Ev
  virtual void  v12(); // _ZN7S3046C13v12Ev
  virtual void  v13(); // _ZN7S3046C13v13Ev
  virtual void  v14(); // _ZN7S3046C13v14Ev
  virtual void  v15(); // _ZN7S3046C13v15Ev
  virtual void  v16(); // _ZN7S3046C13v16Ev
  virtual void  v17(); // _ZN7S3046C13v17Ev
  S3046C1(); // tgen
};
//SIG(1 S3046C1) C1{ BC2{ BC3{ vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fc FC8{ BC9{ BC10{ BC7}}} Fi[6] FC11{ BC12{ BC7}} FC11 FC13{ BC14{ vd v102 v103 v104 v105 v106 Fi[8] Fp Fi Fp} v100 v101} Fp Fc FC15{ BC16{ BC7}} Fp FC13 FC13 FC13 Fi[2] Fp FC17{ BC18{ BC7}} FC8}


 S3046C1 ::~S3046C1(){ note_dtor("S3046C1", this);}
void  S3046C1 ::v1(){vfunc_called(this, "_ZN7S3046C12v1Ev");}
void  S3046C1 ::v2(){vfunc_called(this, "_ZN7S3046C12v2Ev");}
void  S3046C1 ::v3(){vfunc_called(this, "_ZN7S3046C12v3Ev");}
void  S3046C1 ::v4(){vfunc_called(this, "_ZN7S3046C12v4Ev");}
void  S3046C1 ::v5(){vfunc_called(this, "_ZN7S3046C12v5Ev");}
void  S3046C1 ::v6(){vfunc_called(this, "_ZN7S3046C12v6Ev");}
void  S3046C1 ::v7(){vfunc_called(this, "_ZN7S3046C12v7Ev");}
void  S3046C1 ::v8(){vfunc_called(this, "_ZN7S3046C12v8Ev");}
void  S3046C1 ::v9(){vfunc_called(this, "_ZN7S3046C12v9Ev");}
void  S3046C1 ::v10(){vfunc_called(this, "_ZN7S3046C13v10Ev");}
void  S3046C1 ::v11(){vfunc_called(this, "_ZN7S3046C13v11Ev");}
void  S3046C1 ::v12(){vfunc_called(this, "_ZN7S3046C13v12Ev");}
void  S3046C1 ::v13(){vfunc_called(this, "_ZN7S3046C13v13Ev");}
void  S3046C1 ::v14(){vfunc_called(this, "_ZN7S3046C13v14Ev");}
void  S3046C1 ::v15(){vfunc_called(this, "_ZN7S3046C13v15Ev");}
void  S3046C1 ::v16(){vfunc_called(this, "_ZN7S3046C13v16Ev");}
void  S3046C1 ::v17(){vfunc_called(this, "_ZN7S3046C13v17Ev");}
S3046C1 ::S3046C1(){ note_ctor("S3046C1", this);} // tgen

static void Test_S3046C1()
{
  extern Class_Descriptor cd_S3046C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(69,100)];
    init_test(&cd_S3046C1, buf);
    S3046C1 *dp, &lv = *(dp=new (buf) S3046C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,396), "sizeof(S3046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3046C1)");
    check_base_class_offset(lv, (S3046C3*)(S3046C2*), 0, "S3046C1");
    check_base_class_offset(lv, (S3046C2*), 0, "S3046C1");
    check_field_offset(lv, s3046c1f0, ABISELECT(120,76), "S3046C1.s3046c1f0");
    set_bf_and_test(lv, s3046c1f1, ABISELECT(124,80), 0, 1, 1, "S3046C1");
    set_bf_and_test(lv, s3046c1f2, ABISELECT(124,80), 1, 1, 1, "S3046C1");
    set_bf_and_test(lv, s3046c1f3, ABISELECT(124,80), 2, 1, 1, "S3046C1");
    set_bf_and_test(lv, s3046c1f4, ABISELECT(124,80), 3, 1, 1, "S3046C1");
    set_bf_and_test(lv, s3046c1f5, ABISELECT(124,80), 4, 1, 1, "S3046C1");
    set_bf_and_test(lv, s3046c1f6, ABISELECT(124,80), 5, 1, 1, "S3046C1");
    set_bf_and_test(lv, s3046c1f7, ABISELECT(124,80), 6, 1, 1, "S3046C1");
    check_field_offset(lv, s3046c1f8, ABISELECT(125,81), "S3046C1.s3046c1f8");
    check_field_offset(lv, s3046c1f9, ABISELECT(128,84), "S3046C1.s3046c1f9");
    check_field_offset(lv, s3046c1f10, ABISELECT(144,96), "S3046C1.s3046c1f10");
    check_field_offset(lv, s3046c1f11, ABISELECT(168,120), "S3046C1.s3046c1f11");
    check_field_offset(lv, s3046c1f12, ABISELECT(184,132), "S3046C1.s3046c1f12");
    check_field_offset(lv, s3046c1f13, ABISELECT(200,144), "S3046C1.s3046c1f13");
    check_field_offset(lv, s3046c1f14, ABISELECT(264,192), "S3046C1.s3046c1f14");
    check_field_offset(lv, s3046c1f15, ABISELECT(272,196), "S3046C1.s3046c1f15");
    check_field_offset(lv, s3046c1f16, ABISELECT(280,200), "S3046C1.s3046c1f16");
    check_field_offset(lv, s3046c1f17, ABISELECT(296,212), "S3046C1.s3046c1f17");
    check_field_offset(lv, s3046c1f18, ABISELECT(304,216), "S3046C1.s3046c1f18");
    check_field_offset(lv, s3046c1f19, ABISELECT(368,264), "S3046C1.s3046c1f19");
    check_field_offset(lv, s3046c1f20, ABISELECT(432,312), "S3046C1.s3046c1f20");
    check_field_offset(lv, s3046c1f21, ABISELECT(496,360), "S3046C1.s3046c1f21");
    check_field_offset(lv, s3046c1f22, ABISELECT(504,368), "S3046C1.s3046c1f22");
    check_field_offset(lv, s3046c1f23, ABISELECT(512,372), "S3046C1.s3046c1f23");
    check_field_offset(lv, s3046c1f24, ABISELECT(528,384), "S3046C1.s3046c1f24");
    test_class_info(&lv, &cd_S3046C1);
    dp->~S3046C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3046C1(Test_S3046C1, "S3046C1", ABISELECT(544,396));

#else // __cplusplus

extern void _ZN7S3046C1C1Ev();
extern void _ZN7S3046C1D1Ev();
Name_Map name_map_S3046C1[] = {
  NSPAIR(_ZN7S3046C1C1Ev),
  NSPAIR(_ZN7S3046C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3046C3;
extern VTBL_ENTRY _ZTI7S3046C3[];
extern  VTBL_ENTRY _ZTV7S3046C3[];
extern Class_Descriptor cd_S3046C2;
extern VTBL_ENTRY _ZTI7S3046C2[];
extern  VTBL_ENTRY _ZTV7S3046C2[];
static Base_Class bases_S3046C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3046C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3046C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3046C1[];
extern void _ZN7S3046C1D1Ev();
extern void _ZN7S3046C1D0Ev();
extern void _ZN7S3046C33v18Ev();
extern void _ZN7S3046C33v19Ev();
extern void _ZN7S3046C33v20Ev();
extern void _ZN7S3046C33v21Ev();
extern void _ZN7S3046C33v22Ev();
extern void _ZN7S3046C33v23Ev();
extern void _ZN7S3046C33v24Ev();
extern void _ZN7S3046C33v25Ev();
extern void _ZN7S3046C33v26Ev();
extern void _ZN7S3046C33v27Ev();
extern void _ZN7S3046C33v28Ev();
extern void _ZN7S3046C33v29Ev();
extern void _ZN7S3046C33v30Ev();
extern void _ZN7S3046C33v31Ev();
extern void _ZN7S3046C33v32Ev();
extern void _ZN7S3046C33v33Ev();
extern void _ZN7S3046C33v34Ev();
extern void _ZN7S3046C33v35Ev();
extern void _ZN7S3046C33v36Ev();
extern void _ZN7S3046C33v37Ev();
extern void _ZN7S3046C33v38Ev();
extern void _ZN7S3046C33v39Ev();
extern void _ZN7S3046C33v40Ev();
extern void _ZN7S3046C33v41Ev();
extern void _ZN7S3046C33v42Ev();
extern void _ZN7S3046C33v43Ev();
extern void _ZN7S3046C33v44Ev();
extern void _ZN7S3046C33v45Ev();
extern void _ZN7S3046C33v46Ev();
extern void _ZN7S3046C33v47Ev();
extern void _ZN7S3046C33v48Ev();
extern void _ZN7S3046C33v49Ev();
extern void _ZN7S3046C33v50Ev();
extern void _ZN7S3046C33v51Ev();
extern void _ZN7S3046C33v52Ev();
extern void _ZN7S3046C33v53Ev();
extern void _ZN7S3046C33v54Ev();
extern void _ZN7S3046C33v55Ev();
extern void _ZN7S3046C33v56Ev();
extern void _ZN7S3046C33v57Ev();
extern void _ZN7S3046C33v58Ev();
extern void _ZN7S3046C33v59Ev();
extern void _ZN7S3046C33v60Ev();
extern void _ZN7S3046C33v61Ev();
extern void _ZN7S3046C33v62Ev();
extern void _ZN7S3046C33v63Ev();
extern void _ZN7S3046C33v64Ev();
extern void _ZN7S3046C33v65Ev();
extern void _ZN7S3046C33v66Ev();
extern void _ZN7S3046C33v67Ev();
extern void _ZN7S3046C33v68Ev();
extern void _ZN7S3046C33v69Ev();
extern void _ZN7S3046C33v70Ev();
extern void _ZN7S3046C33v71Ev();
extern void _ZN7S3046C33v72Ev();
extern void _ZN7S3046C33v73Ev();
extern void _ZN7S3046C33v74Ev();
extern void _ZN7S3046C33v75Ev();
extern void _ZN7S3046C33v76Ev();
extern void _ZN7S3046C33v77Ev();
extern void _ZN7S3046C33v78Ev();
extern void _ZN7S3046C33v79Ev();
extern void _ZN7S3046C33v80Ev();
extern void _ZN7S3046C33v81Ev();
extern void _ZN7S3046C23v82Ev();
extern void _ZN7S3046C23v83Ev();
extern void _ZN7S3046C23v84Ev();
extern void _ZN7S3046C23v85Ev();
extern void _ZN7S3046C23v86Ev();
extern void _ZN7S3046C23v87Ev();
extern void _ZN7S3046C23v88Ev();
extern void _ZN7S3046C23v89Ev();
extern void _ZN7S3046C23v90Ev();
extern void _ZN7S3046C23v91Ev();
extern void _ZN7S3046C23v92Ev();
extern void _ZN7S3046C23v93Ev();
extern void _ZN7S3046C23v94Ev();
extern void _ZN7S3046C23v95Ev();
extern void _ZN7S3046C23v96Ev();
extern void _ZN7S3046C23v97Ev();
extern void _ZN7S3046C23v98Ev();
extern void _ZN7S3046C23v99Ev();
extern void _ZN7S3046C12v1Ev();
extern void _ZN7S3046C12v2Ev();
extern void _ZN7S3046C12v3Ev();
extern void _ZN7S3046C12v4Ev();
extern void _ZN7S3046C12v5Ev();
extern void _ZN7S3046C12v6Ev();
extern void _ZN7S3046C12v7Ev();
extern void _ZN7S3046C12v8Ev();
extern void _ZN7S3046C12v9Ev();
extern void _ZN7S3046C13v10Ev();
extern void _ZN7S3046C13v11Ev();
extern void _ZN7S3046C13v12Ev();
extern void _ZN7S3046C13v13Ev();
extern void _ZN7S3046C13v14Ev();
extern void _ZN7S3046C13v15Ev();
extern void _ZN7S3046C13v16Ev();
extern void _ZN7S3046C13v17Ev();
static  VTBL_ENTRY vtc_S3046C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3046C1[0]),
  (VTBL_ENTRY)&_ZN7S3046C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3046C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v76Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v77Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v78Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v79Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v80Ev,
  (VTBL_ENTRY)&_ZN7S3046C33v81Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v94Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v95Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v96Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v97Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v98Ev,
  (VTBL_ENTRY)&_ZN7S3046C23v99Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3046C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3046C13v17Ev,
};
extern VTBL_ENTRY _ZTI7S3046C1[];
extern  VTBL_ENTRY _ZTV7S3046C1[];
Class_Descriptor cd_S3046C1 = {  "S3046C1", // class name
  bases_S3046C1, 2,
  &(vtc_S3046C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(544,396), // object size
  NSPAIRA(_ZTI7S3046C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3046C1),103, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C5  {
  char s20570c5f0;
  void *s20570c5f1;
  int s20570c5f2;
  __tsi64 s20570c5f3;
  int s20570c5f4[7];
  short s20570c5f5:3;
  __tsi64 s20570c5f6;
  long double s20570c5f7[9];
  void  mf20570c5(); // _ZN8S20570C59mf20570c5Ev
};
//SIG(-1 S20570C5) C1{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]}


void  S20570C5 ::mf20570c5(){}

static void Test_S20570C5()
{
  {
    init_simple_test("S20570C5");
    static S20570C5 lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S20570C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C5)");
    check_field_offset(lv, s20570c5f0, 0, "S20570C5.s20570c5f0");
    check_field_offset(lv, s20570c5f1, ABISELECT(8,4), "S20570C5.s20570c5f1");
    check_field_offset(lv, s20570c5f2, ABISELECT(16,8), "S20570C5.s20570c5f2");
    check_field_offset(lv, s20570c5f3, ABISELECT(24,12), "S20570C5.s20570c5f3");
    check_field_offset(lv, s20570c5f4, ABISELECT(32,20), "S20570C5.s20570c5f4");
    set_bf_and_test(lv, s20570c5f5, ABISELECT(60,48), 0, 3, 1, "S20570C5");
    set_bf_and_test(lv, s20570c5f5, ABISELECT(60,48), 0, 3, hide_sll(1LL<<2), "S20570C5");
    check_field_offset(lv, s20570c5f6, ABISELECT(64,52), "S20570C5.s20570c5f6");
    check_field_offset(lv, s20570c5f7, ABISELECT(80,60), "S20570C5.s20570c5f7");
  }
}
static Arrange_To_Call_Me vS20570C5(Test_S20570C5, "S20570C5", ABISELECT(224,168));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20570C5[];
VTBL_ENTRY *P__ZTI8S20570C5 = _ZTI8S20570C5; 
Class_Descriptor cd_S20570C5 = {  "S20570C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(224,168), // object size
  NSPAIRA(_ZTI8S20570C5),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C4  : virtual S20570C5 {
  long s20570c4f0[3];
  __tsi64 s20570c4f1;
  short s20570c4f2;
  int s20570c4f3;
  __tsi64 s20570c4f4;
  int s20570c4f5;
  virtual  ~S20570C4(); // _ZN8S20570C4D2Ev
  virtual void  v4(); // _ZN8S20570C42v4Ev
  S20570C4(); // tgen
};
//SIG(-1 S20570C4) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 Fl[3] FL Fs Fi FL Fi}


 S20570C4 ::~S20570C4(){ note_dtor("S20570C4", this);}
void  S20570C4 ::v4(){vfunc_called(this, "_ZN8S20570C42v4Ev");}
S20570C4 ::S20570C4(){ note_ctor("S20570C4", this);} // tgen

static void Test_S20570C4()
{
  extern Class_Descriptor cd_S20570C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,54)];
    init_test(&cd_S20570C4, buf);
    S20570C4 *dp, &lv = *(dp=new (buf) S20570C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,212), "sizeof(S20570C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C4)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(64,44), "S20570C4");
    check_field_offset(lv, s20570c4f0, ABISELECT(8,4), "S20570C4.s20570c4f0");
    check_field_offset(lv, s20570c4f1, ABISELECT(32,16), "S20570C4.s20570c4f1");
    check_field_offset(lv, s20570c4f2, ABISELECT(40,24), "S20570C4.s20570c4f2");
    check_field_offset(lv, s20570c4f3, ABISELECT(44,28), "S20570C4.s20570c4f3");
    check_field_offset(lv, s20570c4f4, ABISELECT(48,32), "S20570C4.s20570c4f4");
    check_field_offset(lv, s20570c4f5, ABISELECT(56,40), "S20570C4.s20570c4f5");
    test_class_info(&lv, &cd_S20570C4);
    dp->~S20570C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C4(Test_S20570C4, "S20570C4", ABISELECT(288,212));

#else // __cplusplus

extern void _ZN8S20570C4C1Ev();
extern void _ZN8S20570C4D2Ev();
Name_Map name_map_S20570C4[] = {
  NSPAIR(_ZN8S20570C4C1Ev),
  NSPAIR(_ZN8S20570C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20570C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C4[];
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY vtc_S20570C4[] = {
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20570C4[];
static  VTT_ENTRY vtt_S20570C4[] = {
  {&(_ZTV8S20570C4[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
Class_Descriptor cd_S20570C4 = {  "S20570C4", // class name
  bases_S20570C4, 1,
  &(vtc_S20570C4[0]), // expected_vtbl_contents
  &(vtt_S20570C4[0]), // expected_vtt_contents
  ABISELECT(288,212), // object size
  NSPAIRA(_ZTI8S20570C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20570C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C3  : S20570C4 {
  int s20570c3f0;
  void *s20570c3f1;
  int s20570c3f2;
  long double s20570c3f3[9];
  long s20570c3f4;
  int s20570c3f5;
  __tsi64 s20570c3f6;
  void *s20570c3f7[5];
  __tsi64 s20570c3f8;
  virtual void  v5(); // _ZN8S20570C32v5Ev
  virtual void  v6(); // _ZN8S20570C32v6Ev
  ~S20570C3(); // tgen
  S20570C3(); // tgen
};
//SIG(-1 S20570C3) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v3 Fl[3] FL Fs Fi FL Fi} v1 v2 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL}


void  S20570C3 ::v5(){vfunc_called(this, "_ZN8S20570C32v5Ev");}
void  S20570C3 ::v6(){vfunc_called(this, "_ZN8S20570C32v6Ev");}
S20570C3 ::~S20570C3(){ note_dtor("S20570C3", this);} // tgen
S20570C3 ::S20570C3(){ note_ctor("S20570C3", this);} // tgen

static void Test_S20570C3()
{
  extern Class_Descriptor cd_S20570C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,95)];
    init_test(&cd_S20570C3, buf);
    S20570C3 *dp, &lv = *(dp=new (buf) S20570C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,376), "sizeof(S20570C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C3)");
    check_base_class_offset(lv, (S20570C5*)(S20570C4*), ABISELECT(304,208), "S20570C3");
    check_base_class_offset(lv, (S20570C4*), 0, "S20570C3");
    check_field_offset(lv, s20570c3f0, ABISELECT(60,44), "S20570C3.s20570c3f0");
    check_field_offset(lv, s20570c3f1, ABISELECT(64,48), "S20570C3.s20570c3f1");
    check_field_offset(lv, s20570c3f2, ABISELECT(72,52), "S20570C3.s20570c3f2");
    check_field_offset(lv, s20570c3f3, ABISELECT(80,56), "S20570C3.s20570c3f3");
    check_field_offset(lv, s20570c3f4, ABISELECT(224,164), "S20570C3.s20570c3f4");
    check_field_offset(lv, s20570c3f5, ABISELECT(232,168), "S20570C3.s20570c3f5");
    check_field_offset(lv, s20570c3f6, ABISELECT(240,172), "S20570C3.s20570c3f6");
    check_field_offset(lv, s20570c3f7, ABISELECT(248,180), "S20570C3.s20570c3f7");
    check_field_offset(lv, s20570c3f8, ABISELECT(288,200), "S20570C3.s20570c3f8");
    test_class_info(&lv, &cd_S20570C3);
    dp->~S20570C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C3(Test_S20570C3, "S20570C3", ABISELECT(528,376));

#else // __cplusplus

extern void _ZN8S20570C3C1Ev();
extern void _ZN8S20570C3D1Ev();
Name_Map name_map_S20570C3[] = {
  NSPAIR(_ZN8S20570C3C1Ev),
  NSPAIR(_ZN8S20570C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
static Base_Class bases_S20570C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(304,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20570C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C3[];
extern void _ZN8S20570C3D1Ev();
extern void _ZN8S20570C3D0Ev();
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C32v5Ev();
extern void _ZN8S20570C32v6Ev();
static  VTBL_ENTRY vtc_S20570C3[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C3[0]),
  (VTBL_ENTRY)&_ZN8S20570C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v6Ev,
};
extern VTBL_ENTRY _ZTV8S20570C3[];
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C4__8S20570C3[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
static  VTT_ENTRY vtt_S20570C3[] = {
  {&(_ZTV8S20570C3[3]),  3,8},
  {&(_tg__ZTV8S20570C4__8S20570C3[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20570C3[];
extern  VTBL_ENTRY _ZTV8S20570C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C3[];
Class_Descriptor cd_S20570C3 = {  "S20570C3", // class name
  bases_S20570C3, 2,
  &(vtc_S20570C3[0]), // expected_vtbl_contents
  &(vtt_S20570C3[0]), // expected_vtt_contents
  ABISELECT(528,376), // object size
  NSPAIRA(_ZTI8S20570C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20570C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C2  : virtual S20570C3 {
  int s20570c2f0:26;
  char s20570c2f1[2];
  virtual  ~S20570C2(); // _ZN8S20570C2D2Ev
  virtual void  v7(); // _ZN8S20570C22v7Ev
  S20570C2(); // tgen
};
//SIG(-1 S20570C2) C1{ VBC2{ BC3{ VBC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 Fl[3] FL Fs Fi FL Fi} v3 v4 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v1 Fi:26 Fc[2]}


 S20570C2 ::~S20570C2(){ note_dtor("S20570C2", this);}
void  S20570C2 ::v7(){vfunc_called(this, "_ZN8S20570C22v7Ev");}
S20570C2 ::S20570C2(){ note_ctor("S20570C2", this);} // tgen

static void Test_S20570C2()
{
  extern Class_Descriptor cd_S20570C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(35,98)];
    init_test(&cd_S20570C2, buf);
    S20570C2 *dp, &lv = *(dp=new (buf) S20570C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,388), "sizeof(S20570C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C2)");
    check_base_class_offset(lv, (S20570C5*)(S20570C4*)(S20570C3*), ABISELECT(320,220), "S20570C2");
    check_base_class_offset(lv, (S20570C4*)(S20570C3*), ABISELECT(16,12), "S20570C2");
    check_base_class_offset(lv, (S20570C3*), ABISELECT(16,12), "S20570C2");
    set_bf_and_test(lv, s20570c2f0, ABISELECT(8,4), 0, 26, 1, "S20570C2");
    set_bf_and_test(lv, s20570c2f0, ABISELECT(8,4), 0, 26, hide_sll(1LL<<25), "S20570C2");
    check_field_offset(lv, s20570c2f1, ABISELECT(12,8), "S20570C2.s20570c2f1");
    test_class_info(&lv, &cd_S20570C2);
    dp->~S20570C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C2(Test_S20570C2, "S20570C2", ABISELECT(544,388));

#else // __cplusplus

extern void _ZN8S20570C2C1Ev();
extern void _ZN8S20570C2D2Ev();
Name_Map name_map_S20570C2[] = {
  NSPAIR(_ZN8S20570C2C1Ev),
  NSPAIR(_ZN8S20570C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
extern Class_Descriptor cd_S20570C3;
extern VTBL_ENTRY _ZTI8S20570C3[];
extern  VTBL_ENTRY _ZTV8S20570C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C3[];
static Base_Class bases_S20570C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(320,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20570C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20570C3,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C2[];
extern void _ZN8S20570C2D1Ev();
extern void _ZN8S20570C2D0Ev();
extern void _ZN8S20570C22v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S20570C2D1Ev,_ZTv0_n16_N8S20570C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20570C2D1Ev,_ZThn12_N8S20570C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20570C2D0Ev,_ZTv0_n16_N8S20570C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20570C2D0Ev,_ZThn12_N8S20570C2D0Ev)() __attribute__((weak));
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C32v5Ev();
extern void _ZN8S20570C32v6Ev();
static  VTBL_ENTRY vtc_S20570C2[] = {
  ABISELECT(320,220),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C2[0]),
  (VTBL_ENTRY)&_ZN8S20570C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(304,208),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20570C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C2D1Ev,_ZTv0_n16_N8S20570C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C2D0Ev,_ZTv0_n16_N8S20570C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v6Ev,
};
extern VTBL_ENTRY _ZTV8S20570C2[];
extern void _ZN8S20570C3D1Ev();
extern void _ZN8S20570C3D0Ev();
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C32v5Ev();
extern void _ZN8S20570C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C3__8S20570C2[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C3[0]),
  (VTBL_ENTRY)&_ZN8S20570C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v6Ev,
};
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C48S20570C3__8S20570C2[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
static  VTT_ENTRY vtt_S20570C2[] = {
  {&(_ZTV8S20570C2[4]),  4,19},
  {&(_ZTV8S20570C2[14]),  14,19},
  {&(_tg__ZTV8S20570C3__8S20570C2[3]),  3,8},
  {&(_tg__ZTV8S20570C48S20570C3__8S20570C2[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20570C2[];
extern  VTBL_ENTRY _ZTV8S20570C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C2[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20570C2D0Ev,_ZTv0_n16_N8S20570C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20570C2D0Ev,_ZThn12_N8S20570C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20570C2D1Ev,_ZTv0_n16_N8S20570C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20570C2D1Ev,_ZThn12_N8S20570C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20570C2 = {  "S20570C2", // class name
  bases_S20570C2, 3,
  &(vtc_S20570C2[0]), // expected_vtbl_contents
  &(vtt_S20570C2[0]), // expected_vtt_contents
  ABISELECT(544,388), // object size
  NSPAIRA(_ZTI8S20570C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20570C2),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C7  : S20570C5 {
  long double s20570c7f0;
  short s20570c7f1:16;
  int s20570c7f2[7];
  long double s20570c7f3;
  char s20570c7f4:6;
  __tsi64 s20570c7f5:64;
  __tsi64 s20570c7f6[2];
  int s20570c7f7;
  virtual void  v9(); // _ZN8S20570C72v9Ev
  virtual void  v10(); // _ZN8S20570C73v10Ev
  virtual void  v11(); // _ZN8S20570C73v11Ev
  ~S20570C7(); // tgen
  S20570C7(); // tgen
};
//SIG(-1 S20570C7) C1{ BC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi}


void  S20570C7 ::v9(){vfunc_called(this, "_ZN8S20570C72v9Ev");}
void  S20570C7 ::v10(){vfunc_called(this, "_ZN8S20570C73v10Ev");}
void  S20570C7 ::v11(){vfunc_called(this, "_ZN8S20570C73v11Ev");}
S20570C7 ::~S20570C7(){ note_dtor("S20570C7", this);} // tgen
S20570C7 ::S20570C7(){ note_ctor("S20570C7", this);} // tgen

static void Test_S20570C7()
{
  extern Class_Descriptor cd_S20570C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,66)];
    init_test(&cd_S20570C7, buf);
    S20570C7 *dp, &lv = *(dp=new (buf) S20570C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,260), "sizeof(S20570C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C7)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(16,4), "S20570C7");
    check_field_offset(lv, s20570c7f0, ABISELECT(240,172), "S20570C7.s20570c7f0");
    set_bf_and_test(lv, s20570c7f1, ABISELECT(256,184), 0, 16, 1, "S20570C7");
    set_bf_and_test(lv, s20570c7f1, ABISELECT(256,184), 0, 16, hide_sll(1LL<<15), "S20570C7");
    check_field_offset(lv, s20570c7f2, ABISELECT(260,188), "S20570C7.s20570c7f2");
    check_field_offset(lv, s20570c7f3, ABISELECT(288,216), "S20570C7.s20570c7f3");
    set_bf_and_test(lv, s20570c7f4, ABISELECT(304,228), 0, 6, 1, "S20570C7");
    set_bf_and_test(lv, s20570c7f4, ABISELECT(304,228), 0, 6, hide_sll(1LL<<5), "S20570C7");
    set_bf_and_test(lv, s20570c7f5, ABISELECT(312,232), 0, 64, 1, "S20570C7");
    set_bf_and_test(lv, s20570c7f5, ABISELECT(312,232), 0, 64, hide_sll(1LL<<63), "S20570C7");
    check_field_offset(lv, s20570c7f6, ABISELECT(320,240), "S20570C7.s20570c7f6");
    check_field_offset(lv, s20570c7f7, ABISELECT(336,256), "S20570C7.s20570c7f7");
    test_class_info(&lv, &cd_S20570C7);
    dp->~S20570C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C7(Test_S20570C7, "S20570C7", ABISELECT(352,260));

#else // __cplusplus

extern void _ZN8S20570C7C1Ev();
extern void _ZN8S20570C7D1Ev();
Name_Map name_map_S20570C7[] = {
  NSPAIR(_ZN8S20570C7C1Ev),
  NSPAIR(_ZN8S20570C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20570C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C7[];
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY vtc_S20570C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C7[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
Class_Descriptor cd_S20570C7 = {  "S20570C7", // class name
  bases_S20570C7, 1,
  &(vtc_S20570C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,260), // object size
  NSPAIRA(_ZTI8S20570C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20570C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C6  : virtual S20570C5 {
  void *s20570c6f0;
  int s20570c6f1;
  ::S20570C7 s20570c6f2;
  int s20570c6f3;
  void *s20570c6f4;
  ~S20570C6(); // tgen
  S20570C6(); // tgen
};
//SIG(-1 S20570C6) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} Fp Fi FC3{ BC2 v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} Fi Fp}


S20570C6 ::~S20570C6(){ note_dtor("S20570C6", this);} // tgen
S20570C6 ::S20570C6(){ note_ctor("S20570C6", this);} // tgen

static void Test_S20570C6()
{
  extern Class_Descriptor cd_S20570C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,113)];
    init_test(&cd_S20570C6, buf);
    S20570C6 *dp, &lv = *(dp=new (buf) S20570C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,448), "sizeof(S20570C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C6)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(400,280), "S20570C6");
    check_field_offset(lv, s20570c6f0, ABISELECT(8,4), "S20570C6.s20570c6f0");
    check_field_offset(lv, s20570c6f1, ABISELECT(16,8), "S20570C6.s20570c6f1");
    check_field_offset(lv, s20570c6f2, ABISELECT(32,12), "S20570C6.s20570c6f2");
    check_field_offset(lv, s20570c6f3, ABISELECT(384,272), "S20570C6.s20570c6f3");
    check_field_offset(lv, s20570c6f4, ABISELECT(392,276), "S20570C6.s20570c6f4");
    test_class_info(&lv, &cd_S20570C6);
    dp->~S20570C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C6(Test_S20570C6, "S20570C6", ABISELECT(624,448));

#else // __cplusplus

extern void _ZN8S20570C6C1Ev();
extern void _ZN8S20570C6D1Ev();
Name_Map name_map_S20570C6[] = {
  NSPAIR(_ZN8S20570C6C1Ev),
  NSPAIR(_ZN8S20570C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20570C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(400,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C6[];
static  VTBL_ENTRY vtc_S20570C6[] = {
  ABISELECT(400,280),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C6[0]),
};
extern VTBL_ENTRY _ZTV8S20570C6[];
static  VTT_ENTRY vtt_S20570C6[] = {
  {&(_ZTV8S20570C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20570C6[];
extern  VTBL_ENTRY _ZTV8S20570C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C6[];
Class_Descriptor cd_S20570C6 = {  "S20570C6", // class name
  bases_S20570C6, 1,
  &(vtc_S20570C6[0]), // expected_vtbl_contents
  &(vtt_S20570C6[0]), // expected_vtt_contents
  ABISELECT(624,448), // object size
  NSPAIRA(_ZTI8S20570C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20570C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C10  : virtual S20570C5 {
  ::S20570C5 s20570c10f0[5];
  __tsi64 s20570c10f1;
  short s20570c10f2:5;
  char  :0;
  void *s20570c10f4[2];
  int s20570c10f5;
  __tsi64 s20570c10f6;
  virtual  ~S20570C10(); // _ZN9S20570C10D2Ev
  virtual void  v8(); // _ZN9S20570C102v8Ev
  S20570C10(); // tgen
};
//SIG(-1 S20570C10) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL}


 S20570C10 ::~S20570C10(){ note_dtor("S20570C10", this);}
void  S20570C10 ::v8(){vfunc_called(this, "_ZN9S20570C102v8Ev");}
S20570C10 ::S20570C10(){ note_ctor("S20570C10", this);} // tgen

static void Test_S20570C10()
{
  extern Class_Descriptor cd_S20570C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(89,262)];
    init_test(&cd_S20570C10, buf);
    S20570C10 *dp, &lv = *(dp=new (buf) S20570C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1408,1044), "sizeof(S20570C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C10)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S20570C10");
    check_field_offset(lv, s20570c10f0, ABISELECT(16,4), "S20570C10.s20570c10f0");
    check_field_offset(lv, s20570c10f1, ABISELECT(1136,844), "S20570C10.s20570c10f1");
    set_bf_and_test(lv, s20570c10f2, ABISELECT(1144,852), 0, 5, 1, "S20570C10");
    set_bf_and_test(lv, s20570c10f2, ABISELECT(1144,852), 0, 5, hide_sll(1LL<<4), "S20570C10");
    check_field_offset(lv, s20570c10f4, ABISELECT(1152,856), "S20570C10.s20570c10f4");
    check_field_offset(lv, s20570c10f5, ABISELECT(1168,864), "S20570C10.s20570c10f5");
    check_field_offset(lv, s20570c10f6, ABISELECT(1176,868), "S20570C10.s20570c10f6");
    test_class_info(&lv, &cd_S20570C10);
    dp->~S20570C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C10(Test_S20570C10, "S20570C10", ABISELECT(1408,1044));

#else // __cplusplus

extern void _ZN9S20570C10C1Ev();
extern void _ZN9S20570C10D2Ev();
Name_Map name_map_S20570C10[] = {
  NSPAIR(_ZN9S20570C10C1Ev),
  NSPAIR(_ZN9S20570C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20570C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C10[];
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY vtc_S20570C10[] = {
  ABISELECT(1184,876),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern VTBL_ENTRY _ZTV9S20570C10[];
static  VTT_ENTRY vtt_S20570C10[] = {
  {&(_ZTV9S20570C10[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
Class_Descriptor cd_S20570C10 = {  "S20570C10", // class name
  bases_S20570C10, 1,
  &(vtc_S20570C10[0]), // expected_vtbl_contents
  &(vtt_S20570C10[0]), // expected_vtt_contents
  ABISELECT(1408,1044), // object size
  NSPAIRA(_ZTI9S20570C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20570C10),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C10),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C9  : S20570C10 , S20570C5 , S20570C7 {
  long double s20570c9f0;
  void *s20570c9f1;
  short s20570c9f2[6];
  void *s20570c9f3;
  int s20570c9f4;
  long double s20570c9f5;
  int s20570c9f6;
  virtual void  v12(); // _ZN8S20570C93v12Ev
  ~S20570C9(); // tgen
  S20570C9(); // tgen
};
//SIG(-1 S20570C9) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC4{ BC3 v3 v4 v5 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} v1 FD Fp Fs[6] Fp Fi FD Fi}


void  S20570C9 ::v12(){vfunc_called(this, "_ZN8S20570C93v12Ev");}
S20570C9 ::~S20570C9(){ note_dtor("S20570C9", this);} // tgen
S20570C9 ::S20570C9(){ note_ctor("S20570C9", this);} // tgen

static void Test_S20570C9()
{
  extern Class_Descriptor cd_S20570C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(131,382)];
    init_test(&cd_S20570C9, buf);
    S20570C9 *dp, &lv = *(dp=new (buf) S20570C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2080,1524), "sizeof(S20570C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C9)");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*), ABISELECT(1856,1356), "S20570C9");
    check_base_class_offset(lv, (S20570C10*), 0, "S20570C9");
    /*is_ambiguous_... S20570C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S20570C9");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*), ABISELECT(1424,1048), "S20570C9");
    check_base_class_offset(lv, (S20570C7*), ABISELECT(1408,1044), "S20570C9");
    check_field_offset(lv, s20570c9f0, ABISELECT(1760,1304), "S20570C9.s20570c9f0");
    check_field_offset(lv, s20570c9f1, ABISELECT(1776,1316), "S20570C9.s20570c9f1");
    check_field_offset(lv, s20570c9f2, ABISELECT(1784,1320), "S20570C9.s20570c9f2");
    check_field_offset(lv, s20570c9f3, ABISELECT(1800,1332), "S20570C9.s20570c9f3");
    check_field_offset(lv, s20570c9f4, ABISELECT(1808,1336), "S20570C9.s20570c9f4");
    check_field_offset(lv, s20570c9f5, ABISELECT(1824,1340), "S20570C9.s20570c9f5");
    check_field_offset(lv, s20570c9f6, ABISELECT(1840,1352), "S20570C9.s20570c9f6");
    test_class_info(&lv, &cd_S20570C9);
    dp->~S20570C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C9(Test_S20570C9, "S20570C9", ABISELECT(2080,1524));

#else // __cplusplus

extern void _ZN8S20570C9C1Ev();
extern void _ZN8S20570C9D1Ev();
Name_Map name_map_S20570C9[] = {
  NSPAIR(_ZN8S20570C9C1Ev),
  NSPAIR(_ZN8S20570C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
static Base_Class bases_S20570C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1856,1356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C9[];
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY vtc_S20570C9[] = {
  ABISELECT(1856,1356),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern VTBL_ENTRY _ZTV8S20570C9[];
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C10__8S20570C9[] = {
  ABISELECT(1856,1356),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
static  VTT_ENTRY vtt_S20570C9[] = {
  {&(_ZTV8S20570C9[3]),  3,12},
  {&(_tg__ZTV9S20570C10__8S20570C9[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
Class_Descriptor cd_S20570C9 = {  "S20570C9", // class name
  bases_S20570C9, 5,
  &(vtc_S20570C9[0]), // expected_vtbl_contents
  &(vtt_S20570C9[0]), // expected_vtt_contents
  ABISELECT(2080,1524), // object size
  NSPAIRA(_ZTI8S20570C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20570C9),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C8  : virtual S20570C5 , S20570C9 , S20570C10 {
  long double s20570c8f0[9];
  short s20570c8f1;
  virtual  ~S20570C8(); // _ZN8S20570C8D2Ev
  S20570C8(); // tgen
};
//SIG(-1 S20570C8) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} BC3{ BC4{ VBC2 vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC2 BC5{ BC2 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} v5 FD Fp Fs[6] Fp Fi FD Fi} BC4 vd FD[9] Fs}


 S20570C8 ::~S20570C8(){ note_dtor("S20570C8", this);}
S20570C8 ::S20570C8(){ note_ctor("S20570C8", this);} // tgen

static void Test_S20570C8()
{
  extern Class_Descriptor cd_S20570C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(215,629)];
    init_test(&cd_S20570C8, buf);
    S20570C8 *dp, &lv = *(dp=new (buf) S20570C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3424,2512), "sizeof(S20570C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C8)");
    /*is_ambiguous_... S20570C8::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(3200,2344), "S20570C8");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C9*), ABISELECT(3200,2344), "S20570C8");
    /*is_ambiguous_... S20570C8::S20570C10 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C10*), ABISELECT(3200,2344), "S20570C8");
    check_base_class_offset(lv, (S20570C10*)(S20570C9*), 0, "S20570C8");
    /*is_ambiguous_... S20570C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C9*), ABISELECT(1184,876), "S20570C8");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C9*), ABISELECT(1424,1048), "S20570C8");
    check_base_class_offset(lv, (S20570C7*)(S20570C9*), ABISELECT(1408,1044), "S20570C8");
    check_base_class_offset(lv, (S20570C9*), 0, "S20570C8");
    /*is_ambiguous_... S20570C8::S20570C10 */ AMB_check_base_class_offset(lv, (S20570C10*), ABISELECT(1856,1356), "S20570C8");
    check_field_offset(lv, s20570c8f0, ABISELECT(3040,2232), "S20570C8.s20570c8f0");
    check_field_offset(lv, s20570c8f1, ABISELECT(3184,2340), "S20570C8.s20570c8f1");
    test_class_info(&lv, &cd_S20570C8);
    dp->~S20570C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C8(Test_S20570C8, "S20570C8", ABISELECT(3424,2512));

#else // __cplusplus

extern void _ZN8S20570C8C1Ev();
extern void _ZN8S20570C8D2Ev();
Name_Map name_map_S20570C8[] = {
  NSPAIR(_ZN8S20570C8C1Ev),
  NSPAIR(_ZN8S20570C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C9;
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
static Base_Class bases_S20570C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3200,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C10,    ABISELECT(1856,1356), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C8[];
extern void _ZN8S20570C8D1Ev();
extern void _ZN8S20570C8D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZThn1856_N8S20570C8D1Ev,_ZThn1356_N8S20570C8D1Ev)();
extern void ABISELECT(_ZThn1856_N8S20570C8D0Ev,_ZThn1356_N8S20570C8D0Ev)();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY vtc_S20570C8[] = {
  ABISELECT(3200,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C8[0]),
  (VTBL_ENTRY)&_ZN8S20570C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C8D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S20570C8[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(1344,988),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S20570C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S20570C8D1Ev,_ZThn1356_N8S20570C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S20570C8D0Ev,_ZThn1356_N8S20570C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern VTBL_ENTRY _ZTV8S20570C8[];
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C9__8S20570C8[] = {
  ABISELECT(3200,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C9__8S20570C8[] = {
  ABISELECT(3200,2344),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C10__A1__8S20570C8[] = {
  ABISELECT(1344,988),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
static  VTT_ENTRY vtt_S20570C8[] = {
  {&(_ZTV8S20570C8[3]),  3,18},
  {&(_tg__ZTV8S20570C9__8S20570C8[3]),  3,7},
  {&(_tg__ZTV9S20570C108S20570C9__8S20570C8[3]),  3,6},
  {&(_tg__ZTV9S20570C10__A1__8S20570C8[3]),  3,6},
  {&(_ZTV8S20570C8[15]),  15,18},
};
extern VTBL_ENTRY _ZTI8S20570C8[];
extern  VTBL_ENTRY _ZTV8S20570C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C8[];
Class_Descriptor cd_S20570C8 = {  "S20570C8", // class name
  bases_S20570C8, 7,
  &(vtc_S20570C8[0]), // expected_vtbl_contents
  &(vtt_S20570C8[0]), // expected_vtt_contents
  ABISELECT(3424,2512), // object size
  NSPAIRA(_ZTI8S20570C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20570C8),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C8),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C12  : S20570C7 , virtual S20570C5 {
  ::S5217C45 s20570c12f0;
  __tsi64 s20570c12f1;
  int s20570c12f2:23;
  short s20570c12f3;
  int s20570c12f4;
  long s20570c12f5[2];
  ~S20570C12(); // tgen
  S20570C12(); // tgen
};
//SIG(-1 S20570C12) C1{ BC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC3 FC4{} FL Fi:23 Fs Fi Fl[2]}


S20570C12 ::~S20570C12(){ note_dtor("S20570C12", this);} // tgen
S20570C12 ::S20570C12(){ note_ctor("S20570C12", this);} // tgen

static void Test_S20570C12()
{
  extern Class_Descriptor cd_S20570C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,116)];
    init_test(&cd_S20570C12, buf);
    S20570C12 *dp, &lv = *(dp=new (buf) S20570C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,460), "sizeof(S20570C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C12)");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*), ABISELECT(16,4), "S20570C12");
    check_base_class_offset(lv, (S20570C7*), 0, "S20570C12");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(384,292), "S20570C12");
    check_field_offset(lv, s20570c12f0, ABISELECT(340,260), "S20570C12.s20570c12f0");
    check_field_offset(lv, s20570c12f1, ABISELECT(344,264), "S20570C12.s20570c12f1");
    set_bf_and_test(lv, s20570c12f2, ABISELECT(352,272), 0, 23, 1, "S20570C12");
    set_bf_and_test(lv, s20570c12f2, ABISELECT(352,272), 0, 23, hide_sll(1LL<<22), "S20570C12");
    check_field_offset(lv, s20570c12f3, ABISELECT(356,276), "S20570C12.s20570c12f3");
    check_field_offset(lv, s20570c12f4, ABISELECT(360,280), "S20570C12.s20570c12f4");
    check_field_offset(lv, s20570c12f5, ABISELECT(368,284), "S20570C12.s20570c12f5");
    test_class_info(&lv, &cd_S20570C12);
    dp->~S20570C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C12(Test_S20570C12, "S20570C12", ABISELECT(608,460));

#else // __cplusplus

extern void _ZN9S20570C12C1Ev();
extern void _ZN9S20570C12D1Ev();
Name_Map name_map_S20570C12[] = {
  NSPAIR(_ZN9S20570C12C1Ev),
  NSPAIR(_ZN9S20570C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20570C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20570C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(384,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C12[];
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY vtc_S20570C12[] = {
  ABISELECT(384,292),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern VTBL_ENTRY _ZTV9S20570C12[];
static  VTT_ENTRY vtt_S20570C12[] = {
  {&(_ZTV9S20570C12[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
Class_Descriptor cd_S20570C12 = {  "S20570C12", // class name
  bases_S20570C12, 3,
  &(vtc_S20570C12[0]), // expected_vtbl_contents
  &(vtt_S20570C12[0]), // expected_vtt_contents
  ABISELECT(608,460), // object size
  NSPAIRA(_ZTI9S20570C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20570C12),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C12),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C14  : S20570C10 , S20570C12 , S20570C4 {
  int  :0;
  ~S20570C14(); // tgen
  S20570C14(); // tgen
};
//SIG(-1 S20570C14) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4{ BC5{ BC3 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC3 FC6{} FL Fi:23 Fs Fi Fl[2]} BC7{ VBC3 vd v5 Fl[3] FL Fs Fi FL Fi} Fi:0}


S20570C14 ::~S20570C14(){ note_dtor("S20570C14", this);} // tgen
S20570C14 ::S20570C14(){ note_ctor("S20570C14", this);} // tgen

static void Test_S20570C14()
{
  extern Class_Descriptor cd_S20570C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(117,346)];
    init_test(&cd_S20570C14, buf);
    S20570C14 *dp, &lv = *(dp=new (buf) S20570C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1856,1380), "sizeof(S20570C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C14)");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*), ABISELECT(1632,1212), "S20570C14");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*), ABISELECT(1632,1212), "S20570C14");
    check_base_class_offset(lv, (S20570C5*)(S20570C4*), ABISELECT(1632,1212), "S20570C14");
    check_base_class_offset(lv, (S20570C10*), 0, "S20570C14");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*), ABISELECT(1200,880), "S20570C14");
    check_base_class_offset(lv, (S20570C7*)(S20570C12*), ABISELECT(1184,876), "S20570C14");
    check_base_class_offset(lv, (S20570C12*), ABISELECT(1184,876), "S20570C14");
    check_base_class_offset(lv, (S20570C4*), ABISELECT(1568,1168), "S20570C14");
    test_class_info(&lv, &cd_S20570C14);
    dp->~S20570C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C14(Test_S20570C14, "S20570C14", ABISELECT(1856,1380));

#else // __cplusplus

extern void _ZN9S20570C14C1Ev();
extern void _ZN9S20570C14D1Ev();
Name_Map name_map_S20570C14[] = {
  NSPAIR(_ZN9S20570C14C1Ev),
  NSPAIR(_ZN9S20570C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
static Base_Class bases_S20570C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1632,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1200,880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20570C12,    ABISELECT(1184,876), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C4,    ABISELECT(1568,1168), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C14[];
extern void _ZN9S20570C14D1Ev();
extern void _ZN9S20570C14D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZThn1568_N9S20570C14D1Ev,_ZThn1168_N9S20570C14D1Ev)();
extern void ABISELECT(_ZThn1568_N9S20570C14D0Ev,_ZThn1168_N9S20570C14D0Ev)();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY vtc_S20570C14[] = {
  ABISELECT(1632,1212),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C14[0]),
  (VTBL_ENTRY)&_ZN9S20570C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  ABISELECT(448,336),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20570C14[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(64,44),
  ABISELECT(-1568,-1168),
  (VTBL_ENTRY)&(_ZTI9S20570C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1568_N9S20570C14D1Ev,_ZThn1168_N9S20570C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1568_N9S20570C14D0Ev,_ZThn1168_N9S20570C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20570C14[];
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C10__9S20570C14[] = {
  ABISELECT(1632,1212),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C14[] = {
  ABISELECT(448,336),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C4__9S20570C14[] = {
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
static  VTT_ENTRY vtt_S20570C14[] = {
  {&(_ZTV9S20570C14[3]),  3,18},
  {&(_tg__ZTV9S20570C10__9S20570C14[3]),  3,6},
  {&(_tg__ZTV9S20570C12__9S20570C14[3]),  3,6},
  {&(_tg__ZTV8S20570C4__9S20570C14[3]),  3,6},
  {&(_ZTV9S20570C14[9]),  9,18},
  {&(_ZTV9S20570C14[15]),  15,18},
};
extern VTBL_ENTRY _ZTI9S20570C14[];
extern  VTBL_ENTRY _ZTV9S20570C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C14[];
Class_Descriptor cd_S20570C14 = {  "S20570C14", // class name
  bases_S20570C14, 6,
  &(vtc_S20570C14[0]), // expected_vtbl_contents
  &(vtt_S20570C14[0]), // expected_vtt_contents
  ABISELECT(1856,1380), // object size
  NSPAIRA(_ZTI9S20570C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20570C14),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C14),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C11  : S20570C10 , S20570C12 {
  void *s20570c11f0[13];
  int s20570c11f1[2];
  long s20570c11f2;
  void *s20570c11f3[2];
  short s20570c11f4;
  ::S20570C14 s20570c11f5;
  int s20570c11f6;
  ~S20570C11(); // tgen
  S20570C11(); // tgen
};
//SIG(-1 S20570C11) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4{ BC5{ BC3 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC3 FC6{} FL Fi:23 Fs Fi Fl[2]} Fp[13] Fi[2] Fl Fp[2] Fs FC7{ BC2 BC4 BC8{ VBC3 vd v5 Fl[3] FL Fs Fi FL Fi} Fi:0} Fi}


S20570C11 ::~S20570C11(){ note_dtor("S20570C11", this);} // tgen
S20570C11 ::S20570C11(){ note_ctor("S20570C11", this);} // tgen

static void Test_S20570C11()
{
  extern Class_Descriptor cd_S20570C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(239,700)];
    init_test(&cd_S20570C11, buf);
    S20570C11 *dp, &lv = *(dp=new (buf) S20570C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3808,2796), "sizeof(S20570C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C11)");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*), ABISELECT(3584,2628), "S20570C11");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*), ABISELECT(3584,2628), "S20570C11");
    check_base_class_offset(lv, (S20570C10*), 0, "S20570C11");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*), ABISELECT(1200,880), "S20570C11");
    check_base_class_offset(lv, (S20570C7*)(S20570C12*), ABISELECT(1184,876), "S20570C11");
    check_base_class_offset(lv, (S20570C12*), ABISELECT(1184,876), "S20570C11");
    check_field_offset(lv, s20570c11f0, ABISELECT(1568,1168), "S20570C11.s20570c11f0");
    check_field_offset(lv, s20570c11f1, ABISELECT(1672,1220), "S20570C11.s20570c11f1");
    check_field_offset(lv, s20570c11f2, ABISELECT(1680,1228), "S20570C11.s20570c11f2");
    check_field_offset(lv, s20570c11f3, ABISELECT(1688,1232), "S20570C11.s20570c11f3");
    check_field_offset(lv, s20570c11f4, ABISELECT(1704,1240), "S20570C11.s20570c11f4");
    check_field_offset(lv, s20570c11f5, ABISELECT(1712,1244), "S20570C11.s20570c11f5");
    check_field_offset(lv, s20570c11f6, ABISELECT(3568,2624), "S20570C11.s20570c11f6");
    test_class_info(&lv, &cd_S20570C11);
    dp->~S20570C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C11(Test_S20570C11, "S20570C11", ABISELECT(3808,2796));

#else // __cplusplus

extern void _ZN9S20570C11C1Ev();
extern void _ZN9S20570C11D1Ev();
Name_Map name_map_S20570C11[] = {
  NSPAIR(_ZN9S20570C11C1Ev),
  NSPAIR(_ZN9S20570C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
static Base_Class bases_S20570C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3584,2628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1200,880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20570C12,    ABISELECT(1184,876), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C11[];
extern void _ZN9S20570C11D1Ev();
extern void _ZN9S20570C11D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY vtc_S20570C11[] = {
  ABISELECT(3584,2628),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C11[0]),
  (VTBL_ENTRY)&_ZN9S20570C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  ABISELECT(2400,1752),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20570C11[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern VTBL_ENTRY _ZTV9S20570C11[];
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C10__9S20570C11[] = {
  ABISELECT(3584,2628),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C11[] = {
  ABISELECT(2400,1752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTT_ENTRY vtt_S20570C11[] = {
  {&(_ZTV9S20570C11[3]),  3,12},
  {&(_tg__ZTV9S20570C10__9S20570C11[3]),  3,6},
  {&(_tg__ZTV9S20570C12__9S20570C11[3]),  3,6},
  {&(_ZTV9S20570C11[9]),  9,12},
};
extern VTBL_ENTRY _ZTI9S20570C11[];
extern  VTBL_ENTRY _ZTV9S20570C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C11[];
Class_Descriptor cd_S20570C11 = {  "S20570C11", // class name
  bases_S20570C11, 5,
  &(vtc_S20570C11[0]), // expected_vtbl_contents
  &(vtt_S20570C11[0]), // expected_vtt_contents
  ABISELECT(3808,2796), // object size
  NSPAIRA(_ZTI9S20570C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20570C11),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C11),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C17  {
  void *s20570c17f0;
  long s20570c17f1;
  int s20570c17f2;
  void *s20570c17f3;
  void  mf20570c17(); // _ZN9S20570C1710mf20570c17Ev
  virtual  ~S20570C17(); // _ZN9S20570C17D1Ev
  S20570C17(); // tgen
};
//SIG(-1 S20570C17) C1{ vd m Fp Fl Fi Fp}


void  S20570C17 ::mf20570c17(){}
 S20570C17 ::~S20570C17(){ note_dtor("S20570C17", this);}
S20570C17 ::S20570C17(){ note_ctor("S20570C17", this);} // tgen

static void Test_S20570C17()
{
  extern Class_Descriptor cd_S20570C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20570C17, buf);
    S20570C17 *dp, &lv = *(dp=new (buf) S20570C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20570C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20570C17)");
    check_field_offset(lv, s20570c17f0, ABISELECT(8,4), "S20570C17.s20570c17f0");
    check_field_offset(lv, s20570c17f1, ABISELECT(16,8), "S20570C17.s20570c17f1");
    check_field_offset(lv, s20570c17f2, ABISELECT(24,12), "S20570C17.s20570c17f2");
    check_field_offset(lv, s20570c17f3, ABISELECT(32,16), "S20570C17.s20570c17f3");
    test_class_info(&lv, &cd_S20570C17);
    dp->~S20570C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C17(Test_S20570C17, "S20570C17", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20570C17C1Ev();
extern void _ZN9S20570C17D1Ev();
Name_Map name_map_S20570C17[] = {
  NSPAIR(_ZN9S20570C17C1Ev),
  NSPAIR(_ZN9S20570C17D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20570C17[];
extern void _ZN9S20570C17D1Ev();
extern void _ZN9S20570C17D0Ev();
static  VTBL_ENTRY vtc_S20570C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C17[0]),
  (VTBL_ENTRY)&_ZN9S20570C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C17D0Ev,
};
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
Class_Descriptor cd_S20570C17 = {  "S20570C17", // class name
  0,0,//no base classes
  &(vtc_S20570C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20570C17),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20570C17),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C16  : virtual S20570C7 , virtual S20570C12 , S20570C9 , virtual S20570C6 {
  char s20570c16f0:5;
  long s20570c16f1[4];
  char s20570c16f2[6];
  ::S20570C17 s20570c16f3;
  virtual  ~S20570C16(); // _ZN9S20570C16D2Ev
  S20570C16(); // tgen
};
//SIG(-1 S20570C16) C1{ VBC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC4{ BC2 VBC3 FC5{} FL Fi:23 Fs Fi Fl[2]} BC6{ BC7{ VBC3 vd v4 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC2 v5 FD Fp Fs[6] Fp Fi FD Fi} VBC8{ VBC3 Fp Fi FC2 Fi Fp} vd Fc:5 Fl[4] Fc[6] FC9{ vd m Fp Fl Fi Fp}}


 S20570C16 ::~S20570C16(){ note_dtor("S20570C16", this);}
S20570C16 ::S20570C16(){ note_ctor("S20570C16", this);} // tgen

static void Test_S20570C16()
{
  extern Class_Descriptor cd_S20570C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,602)];
    init_test(&cd_S20570C16, buf);
    S20570C16 *dp, &lv = *(dp=new (buf) S20570C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,2404), "sizeof(S20570C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C16)");
    /*is_ambiguous_... S20570C16::S20570C7 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C7*), ABISELECT(1952,1408), "S20570C16");
    /*is_ambiguous_... S20570C16::S20570C7 */ AMB_check_base_class_offset(lv, (S20570C7*), ABISELECT(1936,1404), "S20570C16");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*), ABISELECT(2304,1668), "S20570C16");
    check_base_class_offset(lv, (S20570C7*)(S20570C12*), ABISELECT(2288,1664), "S20570C16");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*), ABISELECT(2672,1956), "S20570C16");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C9*), ABISELECT(2672,1956), "S20570C16");
    check_base_class_offset(lv, (S20570C5*)(S20570C6*), ABISELECT(2672,1956), "S20570C16");
    check_base_class_offset(lv, (S20570C12*), ABISELECT(2288,1664), "S20570C16");
    check_base_class_offset(lv, (S20570C10*)(S20570C9*), 0, "S20570C16");
    /*is_ambiguous_... S20570C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C9*), ABISELECT(1184,876), "S20570C16");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C9*), ABISELECT(1424,1048), "S20570C16");
    check_base_class_offset(lv, (S20570C7*)(S20570C9*), ABISELECT(1408,1044), "S20570C16");
    check_base_class_offset(lv, (S20570C9*), 0, "S20570C16");
    check_base_class_offset(lv, (S20570C6*), ABISELECT(2896,2124), "S20570C16");
    set_bf_and_test(lv, s20570c16f0, ABISELECT(1844,1356), 0, 5, 1, "S20570C16");
    set_bf_and_test(lv, s20570c16f0, ABISELECT(1844,1356), 0, 5, hide_sll(1LL<<4), "S20570C16");
    check_field_offset(lv, s20570c16f1, ABISELECT(1848,1360), "S20570C16.s20570c16f1");
    check_field_offset(lv, s20570c16f2, ABISELECT(1880,1376), "S20570C16.s20570c16f2");
    check_field_offset(lv, s20570c16f3, ABISELECT(1888,1384), "S20570C16.s20570c16f3");
    test_class_info(&lv, &cd_S20570C16);
    dp->~S20570C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C16(Test_S20570C16, "S20570C16", ABISELECT(3296,2404));

#else // __cplusplus

extern void _ZN9S20570C16C1Ev();
extern void _ZN9S20570C16D2Ev();
Name_Map name_map_S20570C16[] = {
  NSPAIR(_ZN9S20570C16C1Ev),
  NSPAIR(_ZN9S20570C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C9;
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
extern Class_Descriptor cd_S20570C6;
extern VTBL_ENTRY _ZTI8S20570C6[];
extern  VTBL_ENTRY _ZTV8S20570C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C6[];
static Base_Class bases_S20570C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1952,1408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1936,1404), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(2304,1668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(2288,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(2672,1956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20570C12,    ABISELECT(2288,1664), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1408,1044), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C6,    ABISELECT(2896,2124), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C16[];
extern void _ZN9S20570C16D1Ev();
extern void _ZN9S20570C16D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY vtc_S20570C16[] = {
  ABISELECT(2896,2124),
  ABISELECT(2288,1664),
  ABISELECT(1936,1404),
  ABISELECT(2672,1956),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN9S20570C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  0,
  0,
  0,
  ABISELECT(-1936,-1404),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-2288,-1664),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(-224,-168),
  ABISELECT(-2896,-2124),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
};
extern VTBL_ENTRY _ZTV9S20570C16[];
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C9__9S20570C16[] = {
  ABISELECT(2672,1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C9__9S20570C16[] = {
  ABISELECT(2672,1956),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C16[] = {
  ABISELECT(384,292),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C16[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C6[0]),
};
static  VTT_ENTRY vtt_S20570C16[] = {
  {&(_ZTV9S20570C16[6]),  6,35},
  {&(_tg__ZTV8S20570C9__9S20570C16[3]),  3,7},
  {&(_tg__ZTV9S20570C108S20570C9__9S20570C16[3]),  3,6},
  {&(_ZTV9S20570C16[20]),  20,35},
  {&(_ZTV9S20570C16[29]),  29,35},
  {&(_ZTV9S20570C16[35]),  35,35},
  {&(_tg__ZTV9S20570C12__9S20570C16[3]),  3,6},
  {&(_tg__ZTV8S20570C6__9S20570C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20570C16[];
extern  VTBL_ENTRY _ZTV9S20570C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C16[];
Class_Descriptor cd_S20570C16 = {  "S20570C16", // class name
  bases_S20570C16, 12,
  &(vtc_S20570C16[0]), // expected_vtbl_contents
  &(vtt_S20570C16[0]), // expected_vtt_contents
  ABISELECT(3296,2404), // object size
  NSPAIRA(_ZTI9S20570C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20570C16),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C16),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C18  : S20570C16 , virtual S20570C4 {
  short s20570c18f0;
  char s20570c18f1;
  short s20570c18f2[5];
  ::S20570C10 s20570c18f3;
  short s20570c18f4:16;
  int s20570c18f5;
  virtual void  v14(); // _ZN9S20570C183v14Ev
  virtual void  v15(); // _ZN9S20570C183v15Ev
  virtual void  v16(); // _ZN9S20570C183v16Ev
  virtual void  v17(); // _ZN9S20570C183v17Ev
  virtual void  v18(); // _ZN9S20570C183v18Ev
  ~S20570C18(); // tgen
  S20570C18(); // tgen
};
//SIG(-1 S20570C18) C1{ BC2{ VBC3{ BC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v6 v7 v8 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC5{ BC3 VBC4 FC6{} FL Fi:23 Fs Fi Fl[2]} BC7{ BC8{ VBC4 vd v9 FC4[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4 BC3 v10 FD Fp Fs[6] Fp Fi FD Fi} VBC9{ VBC4 Fp Fi FC3 Fi Fp} vd Fc:5 Fl[4] Fc[6] FC10{ vd m Fp Fl Fi Fp}} VBC11{ VBC4 vd v11 Fl[3] FL Fs Fi FL Fi} v1 v2 v3 v4 v5 Fs Fc Fs[5] FC8 Fs:16 Fi}


void  S20570C18 ::v14(){vfunc_called(this, "_ZN9S20570C183v14Ev");}
void  S20570C18 ::v15(){vfunc_called(this, "_ZN9S20570C183v15Ev");}
void  S20570C18 ::v16(){vfunc_called(this, "_ZN9S20570C183v16Ev");}
void  S20570C18 ::v17(){vfunc_called(this, "_ZN9S20570C183v17Ev");}
void  S20570C18 ::v18(){vfunc_called(this, "_ZN9S20570C183v18Ev");}
S20570C18 ::~S20570C18(){ note_dtor("S20570C18", this);} // tgen
S20570C18 ::S20570C18(){ note_ctor("S20570C18", this);} // tgen

static void Test_S20570C18()
{
  extern Class_Descriptor cd_S20570C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(301,880)];
    init_test(&cd_S20570C18, buf);
    S20570C18 *dp, &lv = *(dp=new (buf) S20570C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4800,3516), "sizeof(S20570C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C18)");
    /*is_ambiguous_... S20570C18::S20570C7 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C7*), ABISELECT(3392,2476), "S20570C18");
    /*is_ambiguous_... S20570C16::S20570C7 */ AMB_check_base_class_offset(lv, (S20570C7*)(S20570C16*), ABISELECT(3376,2472), "S20570C18");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*), ABISELECT(3744,2736), "S20570C18");
    check_base_class_offset(lv, (S20570C7*)(S20570C12*), ABISELECT(3728,2732), "S20570C18");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*), ABISELECT(4112,3024), "S20570C18");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C9*)(S20570C16*), ABISELECT(4112,3024), "S20570C18");
    check_base_class_offset(lv, (S20570C5*)(S20570C6*), ABISELECT(4112,3024), "S20570C18");
    check_base_class_offset(lv, (S20570C5*)(S20570C4*), ABISELECT(4112,3024), "S20570C18");
    check_base_class_offset(lv, (S20570C12*)(S20570C16*), ABISELECT(3728,2732), "S20570C18");
    check_base_class_offset(lv, (S20570C10*)(S20570C9*)(S20570C16*), 0, "S20570C18");
    /*is_ambiguous_... S20570C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C9*)(S20570C16*), ABISELECT(1184,876), "S20570C18");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C9*)(S20570C16*), ABISELECT(1424,1048), "S20570C18");
    check_base_class_offset(lv, (S20570C7*)(S20570C9*)(S20570C16*), ABISELECT(1408,1044), "S20570C18");
    check_base_class_offset(lv, (S20570C9*)(S20570C16*), 0, "S20570C18");
    check_base_class_offset(lv, (S20570C6*)(S20570C16*), ABISELECT(4336,3192), "S20570C18");
    check_base_class_offset(lv, (S20570C16*), 0, "S20570C18");
    check_base_class_offset(lv, (S20570C4*), ABISELECT(4736,3472), "S20570C18");
    check_field_offset(lv, s20570c18f0, ABISELECT(1928,1404), "S20570C18.s20570c18f0");
    check_field_offset(lv, s20570c18f1, ABISELECT(1930,1406), "S20570C18.s20570c18f1");
    check_field_offset(lv, s20570c18f2, ABISELECT(1932,1408), "S20570C18.s20570c18f2");
    check_field_offset(lv, s20570c18f3, ABISELECT(1952,1420), "S20570C18.s20570c18f3");
    set_bf_and_test(lv, s20570c18f4, ABISELECT(3360,2464), 0, 16, 1, "S20570C18");
    set_bf_and_test(lv, s20570c18f4, ABISELECT(3360,2464), 0, 16, hide_sll(1LL<<15), "S20570C18");
    check_field_offset(lv, s20570c18f5, ABISELECT(3364,2468), "S20570C18.s20570c18f5");
    test_class_info(&lv, &cd_S20570C18);
    dp->~S20570C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C18(Test_S20570C18, "S20570C18", ABISELECT(4800,3516));

#else // __cplusplus

extern void _ZN9S20570C18C1Ev();
extern void _ZN9S20570C18D1Ev();
Name_Map name_map_S20570C18[] = {
  NSPAIR(_ZN9S20570C18C1Ev),
  NSPAIR(_ZN9S20570C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C9;
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
extern Class_Descriptor cd_S20570C6;
extern VTBL_ENTRY _ZTI8S20570C6[];
extern  VTBL_ENTRY _ZTV8S20570C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C6[];
extern Class_Descriptor cd_S20570C16;
extern VTBL_ENTRY _ZTI9S20570C16[];
extern  VTBL_ENTRY _ZTV9S20570C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C16[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
static Base_Class bases_S20570C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3392,2476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(3376,2472), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C5,    ABISELECT(3744,2736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(3728,2732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4112,3024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20570C12,    ABISELECT(3728,2732), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1408,1044), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20570C6,    ABISELECT(4336,3192), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C4,    ABISELECT(4736,3472), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C18[];
extern void _ZN9S20570C18D1Ev();
extern void _ZN9S20570C18D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN9S20570C183v14Ev();
extern void _ZN9S20570C183v15Ev();
extern void _ZN9S20570C183v16Ev();
extern void _ZN9S20570C183v17Ev();
extern void _ZN9S20570C183v18Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZTv0_n32_N9S20570C18D1Ev,_ZTv0_n16_N9S20570C18D1Ev)();
extern void ABISELECT(_ZThn4736_N9S20570C18D1Ev,_ZThn3472_N9S20570C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20570C18D0Ev,_ZTv0_n16_N9S20570C18D0Ev)();
extern void ABISELECT(_ZThn4736_N9S20570C18D0Ev,_ZThn3472_N9S20570C18D0Ev)() __attribute__((weak));
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY vtc_S20570C18[] = {
  ABISELECT(4736,3472),
  ABISELECT(4336,3192),
  ABISELECT(3728,2732),
  ABISELECT(3376,2472),
  ABISELECT(4112,3024),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN9S20570C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v14Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v15Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v16Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v17Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v18Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  0,
  0,
  0,
  ABISELECT(-3376,-2472),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-3728,-2732),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(-224,-168),
  ABISELECT(-4336,-3192),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  0,
  ABISELECT(-4736,-3472),
  ABISELECT(-624,-448),
  ABISELECT(-4736,-3472),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20570C18D1Ev,_ZTv0_n16_N9S20570C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20570C18D0Ev,_ZTv0_n16_N9S20570C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20570C18[];
extern void _ZN9S20570C16D1Ev();
extern void _ZN9S20570C16D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C16__9S20570C18[] = {
  ABISELECT(4336,3192),
  ABISELECT(3728,2732),
  ABISELECT(3376,2472),
  ABISELECT(4112,3024),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN9S20570C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C99S20570C16__9S20570C18[] = {
  ABISELECT(4112,3024),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C99S20570C16__9S20570C18[] = {
  ABISELECT(4112,3024),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C7__9S20570C16__9S20570C18[] = {
  0,
  0,
  0,
  ABISELECT(-3376,-2472),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C16__9S20570C18[] = {
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-3728,-2732),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C16__9S20570C18[] = {
  ABISELECT(-224,-168),
  ABISELECT(-4336,-3192),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C18[] = {
  ABISELECT(384,292),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C18[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C6[0]),
};
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C4__9S20570C18[] = {
  ABISELECT(-624,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
static  VTT_ENTRY vtt_S20570C18[] = {
  {&(_ZTV9S20570C18[7]),  7,49},
  {&(_tg__ZTV9S20570C16__9S20570C18[6]),  6,10},
  {&(_tg__ZTV8S20570C99S20570C16__9S20570C18[3]),  3,7},
  {&(_tg__ZTV9S20570C108S20570C99S20570C16__9S20570C18[3]),  3,6},
  {&(_tg__ZTV8S20570C7__9S20570C16__9S20570C18[5]),  5,8},
  {&(_tg__ZTV9S20570C12__9S20570C16__9S20570C18[6]),  6,9},
  {&(_tg__ZTV8S20570C6__9S20570C16__9S20570C18[3]),  3,3},
  {&(_ZTV9S20570C18[26]),  26,49},
  {&(_ZTV9S20570C18[35]),  35,49},
  {&(_ZTV9S20570C18[41]),  41,49},
  {&(_ZTV9S20570C18[46]),  46,49},
  {&(_tg__ZTV9S20570C12__9S20570C18[3]),  3,6},
  {&(_tg__ZTV8S20570C6__9S20570C18[3]),  3,3},
  {&(_tg__ZTV8S20570C4__9S20570C18[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20570C18[];
extern  VTBL_ENTRY _ZTV9S20570C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C18[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20570C18D0Ev,_ZTv0_n16_N9S20570C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4736_N9S20570C18D0Ev,_ZThn3472_N9S20570C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20570C18D1Ev,_ZTv0_n16_N9S20570C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4736_N9S20570C18D1Ev,_ZThn3472_N9S20570C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20570C18 = {  "S20570C18", // class name
  bases_S20570C18, 14,
  &(vtc_S20570C18[0]), // expected_vtbl_contents
  &(vtt_S20570C18[0]), // expected_vtt_contents
  ABISELECT(4800,3516), // object size
  NSPAIRA(_ZTI9S20570C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20570C18),49, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C18),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C15  : S20570C16 , virtual S20570C4 , S20570C18 , S20570C14 {
  char s20570c15f0;
  virtual void  v13(); // _ZN9S20570C153v13Ev
  ~S20570C15(); // tgen
  S20570C15(); // tgen
};
//SIG(-1 S20570C15) C1{ BC2{ VBC3{ BC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC5{ BC3 VBC4 FC6{} FL Fi:23 Fs Fi Fl[2]} BC7{ BC8{ VBC4 vd v5 FC4[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4 BC3 v6 FD Fp Fs[6] Fp Fi FD Fi} VBC9{ VBC4 Fp Fi FC3 Fi Fp} vd Fc:5 Fl[4] Fc[6] FC10{ vd m Fp Fl Fi Fp}} VBC11{ VBC4 vd v7 Fl[3] FL Fs Fi FL Fi} BC12{ BC2 VBC11 v8 v9 v10 v11 v12 Fs Fc Fs[5] FC8 Fs:16 Fi} BC13{ BC8 BC5 BC11 Fi:0} v1 Fc}


void  S20570C15 ::v13(){vfunc_called(this, "_ZN9S20570C153v13Ev");}
S20570C15 ::~S20570C15(){ note_dtor("S20570C15", this);} // tgen
S20570C15 ::S20570C15(){ note_ctor("S20570C15", this);} // tgen

static void Test_S20570C15()
{
  extern Class_Descriptor cd_S20570C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(524,1535)];
    init_test(&cd_S20570C15, buf);
    S20570C15 *dp, &lv = *(dp=new (buf) S20570C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8368,6136), "sizeof(S20570C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C15)");
    /*is_ambiguous_... S20570C15::S20570C7 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C7*), ABISELECT(6960,5096), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C7*)(S20570C16*), ABISELECT(6944,5092), "S20570C15");
    /*is_ambiguous_... S20570C16::S20570C7 */ AMB_check_base_class_offset(lv, (S20570C7*)(S20570C16*)(S20570C18*), ABISELECT(6944,5092), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C12 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*), ABISELECT(7312,5356), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C12 */ AMB_check_base_class_offset(lv, (S20570C7*)(S20570C12*), ABISELECT(7296,5352), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C12 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*), ABISELECT(7680,5644), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C9*)(S20570C16*), ABISELECT(7680,5644), "S20570C15");
    check_base_class_offset(lv, (S20570C5*)(S20570C6*), ABISELECT(7680,5644), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C4 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C4*), ABISELECT(7680,5644), "S20570C15");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C9*)(S20570C16*)(S20570C18*), ABISELECT(7680,5644), "S20570C15");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C14*), ABISELECT(7680,5644), "S20570C15");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*)(S20570C14*), ABISELECT(7680,5644), "S20570C15");
    check_base_class_offset(lv, (S20570C5*)(S20570C4*)(S20570C14*), ABISELECT(7680,5644), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C12*)(S20570C16*), ABISELECT(7296,5352), "S20570C15");
    check_base_class_offset(lv, (S20570C12*)(S20570C16*)(S20570C18*), ABISELECT(7296,5352), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C10*)(S20570C9*)(S20570C16*), 0, "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C9*)(S20570C16*), ABISELECT(1184,876), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C9*)(S20570C16*), ABISELECT(1424,1048), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C7*)(S20570C9*)(S20570C16*), ABISELECT(1408,1044), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C9*)(S20570C16*), 0, "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C6*)(S20570C16*), ABISELECT(7904,5812), "S20570C15");
    check_base_class_offset(lv, (S20570C6*)(S20570C16*)(S20570C18*), ABISELECT(7904,5812), "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C16 */ AMB_check_base_class_offset(lv, (S20570C16*), 0, "S20570C15");
    /*is_ambiguous_... S20570C15::S20570C4 */ AMB_check_base_class_offset(lv, (S20570C4*), ABISELECT(8304,6092), "S20570C15");
    check_base_class_offset(lv, (S20570C4*)(S20570C18*), ABISELECT(8304,6092), "S20570C15");
    check_base_class_offset(lv, (S20570C10*)(S20570C9*)(S20570C16*)(S20570C18*), ABISELECT(1936,1404), "S20570C15");
    /*is_ambiguous_... S20570C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C9*)(S20570C16*)(S20570C18*), ABISELECT(3120,2280), "S20570C15");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C9*)(S20570C16*)(S20570C18*), ABISELECT(3360,2452), "S20570C15");
    check_base_class_offset(lv, (S20570C7*)(S20570C9*)(S20570C16*)(S20570C18*), ABISELECT(3344,2448), "S20570C15");
    check_base_class_offset(lv, (S20570C9*)(S20570C16*)(S20570C18*), ABISELECT(1936,1404), "S20570C15");
    check_base_class_offset(lv, (S20570C16*)(S20570C18*), ABISELECT(1936,1404), "S20570C15");
    check_base_class_offset(lv, (S20570C18*), ABISELECT(1936,1404), "S20570C15");
    check_base_class_offset(lv, (S20570C10*)(S20570C14*), ABISELECT(5312,3876), "S20570C15");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*)(S20570C14*), ABISELECT(6512,4756), "S20570C15");
    check_base_class_offset(lv, (S20570C7*)(S20570C12*)(S20570C14*), ABISELECT(6496,4752), "S20570C15");
    check_base_class_offset(lv, (S20570C12*)(S20570C14*), ABISELECT(6496,4752), "S20570C15");
    check_base_class_offset(lv, (S20570C4*)(S20570C14*), ABISELECT(6880,5044), "S20570C15");
    check_base_class_offset(lv, (S20570C14*), ABISELECT(5312,3876), "S20570C15");
    check_field_offset(lv, s20570c15f0, ABISELECT(6940,5088), "S20570C15.s20570c15f0");
    test_class_info(&lv, &cd_S20570C15);
    dp->~S20570C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C15(Test_S20570C15, "S20570C15", ABISELECT(8368,6136));

#else // __cplusplus

extern void _ZN9S20570C15C1Ev();
extern void _ZN9S20570C15D1Ev();
Name_Map name_map_S20570C15[] = {
  NSPAIR(_ZN9S20570C15C1Ev),
  NSPAIR(_ZN9S20570C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C9;
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
extern Class_Descriptor cd_S20570C6;
extern VTBL_ENTRY _ZTI8S20570C6[];
extern  VTBL_ENTRY _ZTV8S20570C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C6[];
extern Class_Descriptor cd_S20570C16;
extern VTBL_ENTRY _ZTI9S20570C16[];
extern  VTBL_ENTRY _ZTV9S20570C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C16[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C9;
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
extern Class_Descriptor cd_S20570C16;
extern VTBL_ENTRY _ZTI9S20570C16[];
extern  VTBL_ENTRY _ZTV9S20570C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C16[];
extern Class_Descriptor cd_S20570C18;
extern VTBL_ENTRY _ZTI9S20570C18[];
extern  VTBL_ENTRY _ZTV9S20570C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C18[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
extern Class_Descriptor cd_S20570C14;
extern VTBL_ENTRY _ZTI9S20570C14[];
extern  VTBL_ENTRY _ZTV9S20570C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C14[];
static Base_Class bases_S20570C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(6960,5096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(6944,5092), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C5,    ABISELECT(7312,5356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(7296,5352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(7680,5644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20570C12,    ABISELECT(7296,5352), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1408,1044), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20570C6,    ABISELECT(7904,5812), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C4,    ABISELECT(8304,6092), //bcp->offset
    76, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C10,    ABISELECT(1936,1404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(3120,2280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(3360,2452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(3344,2448), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20570C9,    ABISELECT(1936,1404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20570C16,    ABISELECT(1936,1404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20570C18,    ABISELECT(1936,1404), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C10,    ABISELECT(5312,3876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(6512,4756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(6496,4752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20570C12,    ABISELECT(6496,4752), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20570C4,    ABISELECT(6880,5044), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20570C14,    ABISELECT(5312,3876), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20570C15[];
extern void _ZN9S20570C15D1Ev();
extern void _ZN9S20570C15D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN9S20570C153v13Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZThn1936_N9S20570C15D1Ev,_ZThn1404_N9S20570C15D1Ev)();
extern void ABISELECT(_ZThn1936_N9S20570C15D0Ev,_ZThn1404_N9S20570C15D0Ev)();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN9S20570C183v14Ev();
extern void _ZN9S20570C183v15Ev();
extern void _ZN9S20570C183v16Ev();
extern void _ZN9S20570C183v17Ev();
extern void _ZN9S20570C183v18Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZThn5312_N9S20570C15D1Ev,_ZThn3876_N9S20570C15D1Ev)();
extern void ABISELECT(_ZThn5312_N9S20570C15D0Ev,_ZThn3876_N9S20570C15D0Ev)();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZThn6880_N9S20570C15D1Ev,_ZThn5044_N9S20570C15D1Ev)();
extern void ABISELECT(_ZThn6880_N9S20570C15D0Ev,_ZThn5044_N9S20570C15D0Ev)();
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZTv0_n32_N9S20570C15D1Ev,_ZTv0_n16_N9S20570C15D1Ev)();
extern void ABISELECT(_ZThn8304_N9S20570C15D1Ev,_ZThn6092_N9S20570C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20570C15D0Ev,_ZTv0_n16_N9S20570C15D0Ev)();
extern void ABISELECT(_ZThn8304_N9S20570C15D0Ev,_ZThn6092_N9S20570C15D0Ev)() __attribute__((weak));
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY vtc_S20570C15[] = {
  ABISELECT(8304,6092),
  ABISELECT(7904,5812),
  ABISELECT(7296,5352),
  ABISELECT(6944,5092),
  ABISELECT(7680,5644),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&_ZN9S20570C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20570C153v13Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(6368,4688),
  ABISELECT(5968,4408),
  ABISELECT(5360,3948),
  ABISELECT(5008,3688),
  ABISELECT(5744,4240),
  ABISELECT(-1936,-1404),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1936_N9S20570C15D1Ev,_ZThn1404_N9S20570C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1936_N9S20570C15D0Ev,_ZThn1404_N9S20570C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v14Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v15Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v16Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v17Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v18Ev,
  ABISELECT(-3344,-2448),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(2368,1768),
  ABISELECT(-5312,-3876),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5312_N9S20570C15D1Ev,_ZThn3876_N9S20570C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5312_N9S20570C15D0Ev,_ZThn3876_N9S20570C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  ABISELECT(1184,892),
  ABISELECT(-6496,-4752),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(800,600),
  ABISELECT(-6880,-5044),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6880_N9S20570C15D1Ev,_ZThn5044_N9S20570C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6880_N9S20570C15D0Ev,_ZThn5044_N9S20570C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-6944,-5092),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-7296,-5352),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(-224,-168),
  ABISELECT(-7904,-5812),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  0,
  ABISELECT(-8304,-6092),
  ABISELECT(-624,-448),
  ABISELECT(-8304,-6092),
  (VTBL_ENTRY)&(_ZTI9S20570C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20570C15D1Ev,_ZTv0_n16_N9S20570C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20570C15D0Ev,_ZTv0_n16_N9S20570C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20570C15[];
extern void _ZN9S20570C16D1Ev();
extern void _ZN9S20570C16D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C16__9S20570C15[] = {
  ABISELECT(7904,5812),
  ABISELECT(7296,5352),
  ABISELECT(6944,5092),
  ABISELECT(7680,5644),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN9S20570C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C99S20570C16__9S20570C15[] = {
  ABISELECT(7680,5644),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C99S20570C16__9S20570C15[] = {
  ABISELECT(7680,5644),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C7__9S20570C16__9S20570C15[] = {
  0,
  0,
  0,
  ABISELECT(-6944,-5092),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C16__9S20570C15[] = {
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-7296,-5352),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C16__9S20570C15[] = {
  ABISELECT(-224,-168),
  ABISELECT(-7904,-5812),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
};
extern void _ZN9S20570C18D1Ev();
extern void _ZN9S20570C18D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN9S20570C183v14Ev();
extern void _ZN9S20570C183v15Ev();
extern void _ZN9S20570C183v16Ev();
extern void _ZN9S20570C183v17Ev();
extern void _ZN9S20570C183v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C18__9S20570C15[] = {
  ABISELECT(6368,4688),
  ABISELECT(5968,4408),
  ABISELECT(5360,3948),
  ABISELECT(5008,3688),
  ABISELECT(5744,4240),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN9S20570C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v14Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v15Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v16Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v17Ev,
  (VTBL_ENTRY)&_ZN9S20570C183v18Ev,
};
extern void _ZN9S20570C16D1Ev();
extern void _ZN9S20570C16D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C169S20570C18__A1__9S20570C15[] = {
  ABISELECT(5968,4408),
  ABISELECT(5360,3948),
  ABISELECT(5008,3688),
  ABISELECT(5744,4240),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN9S20570C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C99S20570C169S20570C18__A1__9S20570C15[] = {
  ABISELECT(5744,4240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C99S20570C169S20570C18__A1__9S20570C15[] = {
  ABISELECT(5744,4240),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C7__9S20570C169S20570C18__A1__9S20570C15[] = {
  0,
  0,
  0,
  ABISELECT(-5008,-3688),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C169S20570C18__A1__9S20570C15[] = {
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-5360,-3948),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C169S20570C18__A1__9S20570C15[] = {
  ABISELECT(-224,-168),
  ABISELECT(-5968,-4408),
  (VTBL_ENTRY)&(_ZTI9S20570C16[0]),
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C7__9S20570C18__9S20570C15[] = {
  0,
  0,
  0,
  ABISELECT(-5008,-3688),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C18__9S20570C15[] = {
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-5360,-3948),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C18__9S20570C15[] = {
  ABISELECT(-224,-168),
  ABISELECT(-5968,-4408),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S20570C18D1Ev,_ZTv0_n16_N9S20570C18D1Ev)();
extern void ABISELECT(_ZThn6368_N9S20570C18D1Ev,_ZThn4688_N9S20570C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20570C18D0Ev,_ZTv0_n16_N9S20570C18D0Ev)();
extern void ABISELECT(_ZThn6368_N9S20570C18D0Ev,_ZThn4688_N9S20570C18D0Ev)() __attribute__((weak));
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C4__9S20570C18__9S20570C15[] = {
  0,
  ABISELECT(-6368,-4688),
  ABISELECT(-624,-448),
  ABISELECT(-6368,-4688),
  (VTBL_ENTRY)&(_ZTI9S20570C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20570C18D1Ev,_ZTv0_n16_N9S20570C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20570C18D0Ev,_ZTv0_n16_N9S20570C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern void _ZN9S20570C14D1Ev();
extern void _ZN9S20570C14D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C14__9S20570C15[] = {
  ABISELECT(2368,1768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C14[0]),
  (VTBL_ENTRY)&_ZN9S20570C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C109S20570C14__A2__9S20570C15[] = {
  ABISELECT(2368,1768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C129S20570C14__A1__9S20570C15[] = {
  ABISELECT(1184,892),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C49S20570C14__A1__9S20570C15[] = {
  ABISELECT(800,600),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C14__9S20570C15[] = {
  ABISELECT(1184,892),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20570C14[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void ABISELECT(_ZThn1568_N9S20570C14D1Ev,_ZThn1168_N9S20570C14D1Ev)();
extern void ABISELECT(_ZThn1568_N9S20570C14D0Ev,_ZThn1168_N9S20570C14D0Ev)();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C4__9S20570C14__9S20570C15[] = {
  ABISELECT(800,600),
  ABISELECT(-1568,-1168),
  (VTBL_ENTRY)&(_ZTI9S20570C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1568_N9S20570C14D1Ev,_ZThn1168_N9S20570C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1568_N9S20570C14D0Ev,_ZThn1168_N9S20570C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C15[] = {
  ABISELECT(384,292),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__9S20570C15[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C6[0]),
};
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C4__9S20570C15[] = {
  ABISELECT(-624,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
static  VTT_ENTRY vtt_S20570C15[] = {
  {&(_ZTV9S20570C15[7]),  7,84},
  {&(_tg__ZTV9S20570C16__9S20570C15[6]),  6,10},
  {&(_tg__ZTV8S20570C99S20570C16__9S20570C15[3]),  3,7},
  {&(_tg__ZTV9S20570C108S20570C99S20570C16__9S20570C15[3]),  3,6},
  {&(_tg__ZTV8S20570C7__9S20570C16__9S20570C15[5]),  5,8},
  {&(_tg__ZTV9S20570C12__9S20570C16__9S20570C15[6]),  6,9},
  {&(_tg__ZTV8S20570C6__9S20570C16__9S20570C15[3]),  3,3},
  {&(_tg__ZTV9S20570C18__9S20570C15[7]),  7,16},
  {&(_tg__ZTV9S20570C169S20570C18__A1__9S20570C15[6]),  6,10},
  {&(_tg__ZTV8S20570C99S20570C169S20570C18__A1__9S20570C15[3]),  3,7},
  {&(_tg__ZTV9S20570C108S20570C99S20570C169S20570C18__A1__9S20570C15[3]),  3,6},
  {&(_tg__ZTV8S20570C7__9S20570C169S20570C18__A1__9S20570C15[5]),  5,8},
  {&(_tg__ZTV9S20570C12__9S20570C169S20570C18__A1__9S20570C15[6]),  6,9},
  {&(_tg__ZTV8S20570C6__9S20570C169S20570C18__A1__9S20570C15[3]),  3,3},
  {&(_tg__ZTV8S20570C7__9S20570C18__9S20570C15[5]),  5,8},
  {&(_tg__ZTV9S20570C12__9S20570C18__9S20570C15[6]),  6,9},
  {&(_tg__ZTV8S20570C6__9S20570C18__9S20570C15[3]),  3,3},
  {&(_tg__ZTV8S20570C4__9S20570C18__9S20570C15[5]),  5,8},
  {&(_tg__ZTV9S20570C14__9S20570C15[3]),  3,6},
  {&(_tg__ZTV9S20570C109S20570C14__A2__9S20570C15[3]),  3,6},
  {&(_tg__ZTV9S20570C129S20570C14__A1__9S20570C15[3]),  3,6},
  {&(_tg__ZTV8S20570C49S20570C14__A1__9S20570C15[3]),  3,6},
  {&(_tg__ZTV9S20570C12__9S20570C14__9S20570C15[3]),  3,6},
  {&(_tg__ZTV8S20570C4__9S20570C14__9S20570C15[3]),  3,6},
  {&(_ZTV9S20570C15[61]),  61,84},
  {&(_ZTV9S20570C15[70]),  70,84},
  {&(_ZTV9S20570C15[76]),  76,84},
  {&(_ZTV9S20570C15[81]),  81,84},
  {&(_ZTV9S20570C15[24]),  24,84},
  {&(_ZTV9S20570C15[41]),  41,84},
  {&(_ZTV9S20570C15[47]),  47,84},
  {&(_ZTV9S20570C15[53]),  53,84},
  {&(_tg__ZTV9S20570C12__9S20570C15[3]),  3,6},
  {&(_tg__ZTV8S20570C6__9S20570C15[3]),  3,3},
  {&(_tg__ZTV8S20570C4__9S20570C15[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20570C15[];
extern  VTBL_ENTRY _ZTV9S20570C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C15[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20570C18D0Ev,_ZTv0_n16_N9S20570C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6368_N9S20570C18D0Ev,_ZThn4688_N9S20570C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20570C18D1Ev,_ZTv0_n16_N9S20570C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6368_N9S20570C18D1Ev,_ZThn4688_N9S20570C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20570C15D0Ev,_ZTv0_n16_N9S20570C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8304_N9S20570C15D0Ev,_ZThn6092_N9S20570C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20570C15D1Ev,_ZTv0_n16_N9S20570C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8304_N9S20570C15D1Ev,_ZThn6092_N9S20570C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20570C15 = {  "S20570C15", // class name
  bases_S20570C15, 27,
  &(vtc_S20570C15[0]), // expected_vtbl_contents
  &(vtt_S20570C15[0]), // expected_vtt_contents
  ABISELECT(8368,6136), // object size
  NSPAIRA(_ZTI9S20570C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20570C15),84, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20570C15),35, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20570C1  : virtual S20570C2 , virtual S20570C6 , S20570C8 , virtual S20570C11 , S20570C5 {
  void *s20570c1f0[10];
  short s20570c1f1;
  char s20570c1f2:3;
  short s20570c1f3:16;
  ::S20570C11 s20570c1f4;
  ::S20570C15 s20570c1f5;
  void *s20570c1f6;
  char s20570c1f7;
  short s20570c1f8[6];
  long s20570c1f9[2];
  virtual void  v1(); // _ZN8S20570C12v1Ev
  virtual void  v2(); // _ZN8S20570C12v2Ev
  virtual void  v3(); // _ZN8S20570C12v3Ev
  ~S20570C1(); // tgen
  S20570C1(); // tgen
};
//SIG(1 S20570C1) C1{ VBC2{ VBC3{ BC4{ VBC5{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v4 Fl[3] FL Fs Fi FL Fi} v5 v6 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v7 Fi:26 Fc[2]} VBC6{ VBC5 Fp Fi FC7{ BC5 v9 v10 v11 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} Fi Fp} BC8{ VBC5 BC9{ BC10{ VBC5 vd v8 FC5[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC5 BC7 v12 FD Fp Fs[6] Fp Fi FD Fi} BC10 vd FD[9] Fs} VBC11{ BC10 BC12{ BC7 VBC5 FC13{} FL Fi:23 Fs Fi Fl[2]} Fp[13] Fi[2] Fl Fp[2] Fs FC14{ BC10 BC12 BC4 Fi:0} Fi} BC5 v1 v2 v3 Fp[10] Fs Fc:3 Fs:16 FC11 FC15{ BC16{ VBC7 VBC12 BC9 VBC6 vd Fc:5 Fl[4] Fc[6] FC17{ vd m Fp Fl Fi Fp}} VBC4 BC18{ BC16 VBC4 v14 v15 v16 v17 v18 Fs Fc Fs[5] FC10 Fs:16 Fi} BC14 v13 Fc} Fp Fc Fs[6] Fl[2]}


void  S20570C1 ::v1(){vfunc_called(this, "_ZN8S20570C12v1Ev");}
void  S20570C1 ::v2(){vfunc_called(this, "_ZN8S20570C12v2Ev");}
void  S20570C1 ::v3(){vfunc_called(this, "_ZN8S20570C12v3Ev");}
S20570C1 ::~S20570C1(){ note_dtor("S20570C1", this);} // tgen
S20570C1 ::S20570C1(){ note_ctor("S20570C1", this);} // tgen

static void Test_S20570C1()
{
  extern Class_Descriptor cd_S20570C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1268,3705)];
    init_test(&cd_S20570C1, buf);
    S20570C1 *dp, &lv = *(dp=new (buf) S20570C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20272,14816), "sizeof(S20570C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20570C1)");
    check_base_class_offset(lv, (S20570C5*)(S20570C4*)(S20570C3*), ABISELECT(16064,11740), "S20570C1");
    check_base_class_offset(lv, (S20570C5*)(S20570C6*), ABISELECT(16064,11740), "S20570C1");
    /*is_ambiguous_... S20570C8::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C8*), ABISELECT(16064,11740), "S20570C1");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C9*)(S20570C8*), ABISELECT(16064,11740), "S20570C1");
    /*is_ambiguous_... S20570C8::S20570C10 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C8*), ABISELECT(16064,11740), "S20570C1");
    check_base_class_offset(lv, (S20570C5*)(S20570C10*)(S20570C11*), ABISELECT(16064,11740), "S20570C1");
    /*is_ambiguous_... S20570C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C12*)(S20570C11*), ABISELECT(16064,11740), "S20570C1");
    check_base_class_offset(lv, (S20570C4*)(S20570C3*), ABISELECT(15760,11532), "S20570C1");
    check_base_class_offset(lv, (S20570C3*)(S20570C2*), ABISELECT(15760,11532), "S20570C1");
    check_base_class_offset(lv, (S20570C2*), ABISELECT(15736,11520), "S20570C1");
    check_base_class_offset(lv, (S20570C6*), ABISELECT(16288,11908), "S20570C1");
    check_base_class_offset(lv, (S20570C10*)(S20570C9*)(S20570C8*), 0, "S20570C1");
    /*is_ambiguous_... S20570C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20570C9*)(S20570C8*), ABISELECT(1184,876), "S20570C1");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C9*)(S20570C8*), ABISELECT(1424,1048), "S20570C1");
    check_base_class_offset(lv, (S20570C7*)(S20570C9*)(S20570C8*), ABISELECT(1408,1044), "S20570C1");
    check_base_class_offset(lv, (S20570C9*)(S20570C8*), 0, "S20570C1");
    /*is_ambiguous_... S20570C8::S20570C10 */ AMB_check_base_class_offset(lv, (S20570C10*)(S20570C8*), ABISELECT(1856,1356), "S20570C1");
    check_base_class_offset(lv, (S20570C8*), 0, "S20570C1");
    check_base_class_offset(lv, (S20570C10*)(S20570C11*), ABISELECT(16688,12188), "S20570C1");
    check_base_class_offset(lv, (S20570C5*)(S20570C7*)(S20570C12*)(S20570C11*), ABISELECT(17888,13068), "S20570C1");
    check_base_class_offset(lv, (S20570C7*)(S20570C12*)(S20570C11*), ABISELECT(17872,13064), "S20570C1");
    check_base_class_offset(lv, (S20570C12*)(S20570C11*), ABISELECT(17872,13064), "S20570C1");
    check_base_class_offset(lv, (S20570C11*), ABISELECT(16688,12188), "S20570C1");
    /*is_ambiguous_... S20570C1::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(3200,2344), "S20570C1");
    check_field_offset(lv, s20570c1f0, ABISELECT(3424,2512), "S20570C1.s20570c1f0");
    check_field_offset(lv, s20570c1f1, ABISELECT(3504,2552), "S20570C1.s20570c1f1");
    set_bf_and_test(lv, s20570c1f2, ABISELECT(3506,2554), 0, 3, 1, "S20570C1");
    set_bf_and_test(lv, s20570c1f2, ABISELECT(3506,2554), 0, 3, hide_sll(1LL<<2), "S20570C1");
    set_bf_and_test(lv, s20570c1f3, ABISELECT(3508,2556), 0, 16, 1, "S20570C1");
    set_bf_and_test(lv, s20570c1f3, ABISELECT(3508,2556), 0, 16, hide_sll(1LL<<15), "S20570C1");
    check_field_offset(lv, s20570c1f4, ABISELECT(3520,2560), "S20570C1.s20570c1f4");
    check_field_offset(lv, s20570c1f5, ABISELECT(7328,5356), "S20570C1.s20570c1f5");
    check_field_offset(lv, s20570c1f6, ABISELECT(15696,11492), "S20570C1.s20570c1f6");
    check_field_offset(lv, s20570c1f7, ABISELECT(15704,11496), "S20570C1.s20570c1f7");
    check_field_offset(lv, s20570c1f8, ABISELECT(15706,11498), "S20570C1.s20570c1f8");
    check_field_offset(lv, s20570c1f9, ABISELECT(15720,11512), "S20570C1.s20570c1f9");
    test_class_info(&lv, &cd_S20570C1);
    dp->~S20570C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20570C1(Test_S20570C1, "S20570C1", ABISELECT(20272,14816));

#else // __cplusplus

extern void _ZN8S20570C1C1Ev();
extern void _ZN8S20570C1D1Ev();
Name_Map name_map_S20570C1[] = {
  NSPAIR(_ZN8S20570C1C1Ev),
  NSPAIR(_ZN8S20570C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C4;
extern VTBL_ENTRY _ZTI8S20570C4[];
extern  VTBL_ENTRY _ZTV8S20570C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C4[];
extern Class_Descriptor cd_S20570C3;
extern VTBL_ENTRY _ZTI8S20570C3[];
extern  VTBL_ENTRY _ZTV8S20570C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C3[];
extern Class_Descriptor cd_S20570C2;
extern VTBL_ENTRY _ZTI8S20570C2[];
extern  VTBL_ENTRY _ZTV8S20570C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C2[];
extern Class_Descriptor cd_S20570C6;
extern VTBL_ENTRY _ZTI8S20570C6[];
extern  VTBL_ENTRY _ZTV8S20570C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C6[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C9;
extern VTBL_ENTRY _ZTI8S20570C9[];
extern  VTBL_ENTRY _ZTV8S20570C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C9[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C8;
extern VTBL_ENTRY _ZTI8S20570C8[];
extern  VTBL_ENTRY _ZTV8S20570C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C8[];
extern Class_Descriptor cd_S20570C10;
extern VTBL_ENTRY _ZTI9S20570C10[];
extern  VTBL_ENTRY _ZTV9S20570C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C7;
extern VTBL_ENTRY _ZTI8S20570C7[];
extern  VTBL_ENTRY _ZTV8S20570C7[];
extern Class_Descriptor cd_S20570C12;
extern VTBL_ENTRY _ZTI9S20570C12[];
extern  VTBL_ENTRY _ZTV9S20570C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C12[];
extern Class_Descriptor cd_S20570C11;
extern VTBL_ENTRY _ZTI9S20570C11[];
extern  VTBL_ENTRY _ZTV9S20570C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20570C11[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20570C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16064,11740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20570C4,    ABISELECT(15760,11532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20570C3,    ABISELECT(15760,11532), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20570C2,    ABISELECT(15736,11520), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C6,    ABISELECT(16288,11908), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(1408,1044), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20570C10,    ABISELECT(1856,1356), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20570C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C10,    ABISELECT(16688,12188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(17888,13068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20570C7,    ABISELECT(17872,13064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20570C12,    ABISELECT(17872,13064), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20570C11,    ABISELECT(16688,12188), //bcp->offset
    49, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(3200,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20570C1[];
extern void _ZN8S20570C1D1Ev();
extern void _ZN8S20570C1D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
extern void _ZN8S20570C12v1Ev();
extern void _ZN8S20570C12v2Ev();
extern void _ZN8S20570C12v3Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
extern void ABISELECT(_ZThn1856_N8S20570C1D1Ev,_ZThn1356_N8S20570C1D1Ev)();
extern void ABISELECT(_ZThn1856_N8S20570C1D0Ev,_ZThn1356_N8S20570C1D0Ev)();
extern void _ZN9S20570C102v8Ev();
extern void ABISELECT(_ZTv0_n40_N8S20570C1D1Ev,_ZTv0_n20_N8S20570C1D1Ev)();
extern void ABISELECT(_ZThn15736_N8S20570C1D1Ev,_ZThn11520_N8S20570C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20570C1D0Ev,_ZTv0_n20_N8S20570C1D0Ev)();
extern void ABISELECT(_ZThn15736_N8S20570C1D0Ev,_ZThn11520_N8S20570C1D0Ev)() __attribute__((weak));
extern void _ZN8S20570C22v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S20570C1D1Ev,_ZTv0_n16_N8S20570C1D1Ev)();
extern void ABISELECT(_ZThn15760_N8S20570C1D1Ev,_ZThn11532_N8S20570C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20570C1D0Ev,_ZTv0_n16_N8S20570C1D0Ev)();
extern void ABISELECT(_ZThn15760_N8S20570C1D0Ev,_ZThn11532_N8S20570C1D0Ev)() __attribute__((weak));
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C32v5Ev();
extern void _ZN8S20570C32v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S20570C1D1Ev,_ZTv0_n16_N8S20570C1D1Ev)();
extern void ABISELECT(_ZThn16688_N8S20570C1D1Ev,_ZThn12188_N8S20570C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20570C1D0Ev,_ZTv0_n16_N8S20570C1D0Ev)();
extern void ABISELECT(_ZThn16688_N8S20570C1D0Ev,_ZThn12188_N8S20570C1D0Ev)() __attribute__((weak));
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY vtc_S20570C1[] = {
  ABISELECT(16688,12188),
  ABISELECT(16288,11908),
  ABISELECT(15760,11532),
  ABISELECT(15736,11520),
  ABISELECT(16064,11740),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&_ZN8S20570C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C1D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
  (VTBL_ENTRY)&_ZN8S20570C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20570C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20570C12v3Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
  ABISELECT(14208,10384),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S20570C1D1Ev,_ZThn1356_N8S20570C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S20570C1D0Ev,_ZThn1356_N8S20570C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  0,
  ABISELECT(-15736,-11520),
  ABISELECT(328,220),
  ABISELECT(24,12),
  ABISELECT(-15736,-11520),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20570C1D1Ev,_ZTv0_n20_N8S20570C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20570C1D0Ev,_ZTv0_n20_N8S20570C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-15760,-11532),
  ABISELECT(304,208),
  ABISELECT(-15760,-11532),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C1D1Ev,_ZTv0_n16_N8S20570C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C1D0Ev,_ZTv0_n16_N8S20570C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v6Ev,
  ABISELECT(-224,-168),
  ABISELECT(-16288,-11908),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  ABISELECT(1184,876),
  ABISELECT(1184,876),
  ABISELECT(1184,876),
  0,
  ABISELECT(-16688,-12188),
  ABISELECT(-624,-448),
  ABISELECT(-16688,-12188),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C1D1Ev,_ZTv0_n16_N8S20570C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C1D0Ev,_ZTv0_n16_N8S20570C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  ABISELECT(-1808,-1324),
  ABISELECT(-17872,-13064),
  (VTBL_ENTRY)&(_ZTI8S20570C1[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern VTBL_ENTRY _ZTV8S20570C1[];
extern void _ZN8S20570C8D1Ev();
extern void _ZN8S20570C8D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C8__8S20570C1[] = {
  ABISELECT(16064,11740),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C8[0]),
  (VTBL_ENTRY)&_ZN8S20570C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C8D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN8S20570C9D1Ev();
extern void _ZN8S20570C9D0Ev();
extern void _ZN9S20570C102v8Ev();
extern void _ZN8S20570C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C98S20570C8__8S20570C1[] = {
  ABISELECT(16064,11740),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C9[0]),
  (VTBL_ENTRY)&_ZN8S20570C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20570C93v12Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C98S20570C8__8S20570C1[] = {
  ABISELECT(16064,11740),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C108S20570C8__A1__8S20570C1[] = {
  ABISELECT(14208,10384),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void ABISELECT(_ZThn1856_N8S20570C8D1Ev,_ZThn1356_N8S20570C8D1Ev)();
extern void ABISELECT(_ZThn1856_N8S20570C8D0Ev,_ZThn1356_N8S20570C8D0Ev)();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C10__A1__8S20570C8__8S20570C1[] = {
  ABISELECT(14208,10384),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S20570C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S20570C8D1Ev,_ZThn1356_N8S20570C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S20570C8D0Ev,_ZThn1356_N8S20570C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C2D1Ev();
extern void _ZN8S20570C2D0Ev();
extern void _ZN8S20570C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C2__8S20570C1[] = {
  ABISELECT(328,220),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C2[0]),
  (VTBL_ENTRY)&_ZN8S20570C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C22v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20570C2D1Ev,_ZTv0_n16_N8S20570C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20570C2D1Ev,_ZThn12_N8S20570C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20570C2D0Ev,_ZTv0_n16_N8S20570C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20570C2D0Ev,_ZThn12_N8S20570C2D0Ev)() __attribute__((weak));
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C32v5Ev();
extern void _ZN8S20570C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C3__8S20570C2__8S20570C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(304,208),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20570C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C2D1Ev,_ZTv0_n16_N8S20570C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20570C2D0Ev,_ZTv0_n16_N8S20570C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v6Ev,
};
extern void _ZN8S20570C3D1Ev();
extern void _ZN8S20570C3D0Ev();
extern void _ZN8S20570C42v4Ev();
extern void _ZN8S20570C32v5Ev();
extern void _ZN8S20570C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C3__8S20570C1[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C3[0]),
  (VTBL_ENTRY)&_ZN8S20570C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20570C32v6Ev,
};
extern void _ZN8S20570C4D1Ev();
extern void _ZN8S20570C4D0Ev();
extern void _ZN8S20570C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20570C48S20570C3__8S20570C1[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C4[0]),
  (VTBL_ENTRY)&_ZN8S20570C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20570C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20570C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20570C6__8S20570C1[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20570C6[0]),
};
extern void _ZN9S20570C11D1Ev();
extern void _ZN9S20570C11D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C11__8S20570C1[] = {
  ABISELECT(-624,-448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C11[0]),
  (VTBL_ENTRY)&_ZN9S20570C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN9S20570C10D1Ev();
extern void _ZN9S20570C10D0Ev();
extern void _ZN9S20570C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C109S20570C11__A2__8S20570C1[] = {
  ABISELECT(-624,-448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C10[0]),
  (VTBL_ENTRY)&_ZN9S20570C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20570C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20570C102v8Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C129S20570C11__8S20570C1[] = {
  ABISELECT(-1808,-1324),
  0,
  (VTBL_ENTRY)&(_ZTI9S20570C12[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
extern void _ZN8S20570C72v9Ev();
extern void _ZN8S20570C73v10Ev();
extern void _ZN8S20570C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20570C12__9S20570C11__8S20570C1[] = {
  ABISELECT(-1808,-1324),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20570C11[0]),
  (VTBL_ENTRY)&_ZN8S20570C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20570C73v11Ev,
};
static  VTT_ENTRY vtt_S20570C1[] = {
  {&(_ZTV8S20570C1[7]),  7,66},
  {&(_tg__ZTV8S20570C8__8S20570C1[3]),  3,7},
  {&(_tg__ZTV8S20570C98S20570C8__8S20570C1[3]),  3,7},
  {&(_tg__ZTV9S20570C108S20570C98S20570C8__8S20570C1[3]),  3,6},
  {&(_tg__ZTV9S20570C108S20570C8__A1__8S20570C1[3]),  3,6},
  {&(_tg__ZTV9S20570C10__A1__8S20570C8__8S20570C1[3]),  3,6},
  {&(_ZTV8S20570C1[31]),  31,66},
  {&(_ZTV8S20570C1[41]),  41,66},
  {&(_ZTV8S20570C1[49]),  49,66},
  {&(_ZTV8S20570C1[22]),  22,66},
  {&(_ZTV8S20570C1[57]),  57,66},
  {&(_ZTV8S20570C1[63]),  63,66},
  {&(_tg__ZTV8S20570C2__8S20570C1[4]),  4,7},
  {&(_tg__ZTV8S20570C3__8S20570C2__8S20570C1[7]),  7,12},
  {&(_tg__ZTV8S20570C3__8S20570C1[3]),  3,8},
  {&(_tg__ZTV8S20570C48S20570C3__8S20570C1[3]),  3,6},
  {&(_tg__ZTV8S20570C6__8S20570C1[3]),  3,3},
  {&(_tg__ZTV9S20570C11__8S20570C1[3]),  3,6},
  {&(_tg__ZTV9S20570C109S20570C11__A2__8S20570C1[3]),  3,6},
  {&(_tg__ZTV9S20570C129S20570C11__8S20570C1[3]),  3,6},
  {&(_tg__ZTV9S20570C12__9S20570C11__8S20570C1[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20570C1[];
extern  VTBL_ENTRY _ZTV8S20570C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20570C1[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20570C2D0Ev,_ZTv0_n16_N8S20570C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20570C2D0Ev,_ZThn12_N8S20570C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20570C2D1Ev,_ZTv0_n16_N8S20570C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20570C2D1Ev,_ZThn12_N8S20570C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20570C1D0Ev,_ZTv0_n16_N8S20570C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16688_N8S20570C1D0Ev,_ZThn12188_N8S20570C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15760_N8S20570C1D0Ev,_ZThn11532_N8S20570C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20570C1D1Ev,_ZTv0_n16_N8S20570C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16688_N8S20570C1D1Ev,_ZThn12188_N8S20570C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15760_N8S20570C1D1Ev,_ZThn11532_N8S20570C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20570C1D0Ev,_ZTv0_n20_N8S20570C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15736_N8S20570C1D0Ev,_ZThn11520_N8S20570C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20570C1D1Ev,_ZTv0_n20_N8S20570C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15736_N8S20570C1D1Ev,_ZThn11520_N8S20570C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20570C1 = {  "S20570C1", // class name
  bases_S20570C1, 18,
  &(vtc_S20570C1[0]), // expected_vtbl_contents
  &(vtt_S20570C1[0]), // expected_vtt_contents
  ABISELECT(20272,14816), // object size
  NSPAIRA(_ZTI8S20570C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20570C1),66, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20570C1),21, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C2  : virtual S20570C5 {
  long s7388c2f0[3];
  __tsi64 s7388c2f1;
  short s7388c2f2;
  int s7388c2f3;
  __tsi64 s7388c2f4;
  int s7388c2f5;
  virtual  ~S7388C2(); // _ZN7S7388C2D2Ev
  virtual void  v1(); // _ZN7S7388C22v1Ev
  S7388C2(); // tgen
};
//SIG(-1 S7388C2) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 Fl[3] FL Fs Fi FL Fi}


 S7388C2 ::~S7388C2(){ note_dtor("S7388C2", this);}
void  S7388C2 ::v1(){vfunc_called(this, "_ZN7S7388C22v1Ev");}
S7388C2 ::S7388C2(){ note_ctor("S7388C2", this);} // tgen

static void Test_S7388C2()
{
  extern Class_Descriptor cd_S7388C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,54)];
    init_test(&cd_S7388C2, buf);
    S7388C2 *dp, &lv = *(dp=new (buf) S7388C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,212), "sizeof(S7388C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C2)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(64,44), "S7388C2");
    check_field_offset(lv, s7388c2f0, ABISELECT(8,4), "S7388C2.s7388c2f0");
    check_field_offset(lv, s7388c2f1, ABISELECT(32,16), "S7388C2.s7388c2f1");
    check_field_offset(lv, s7388c2f2, ABISELECT(40,24), "S7388C2.s7388c2f2");
    check_field_offset(lv, s7388c2f3, ABISELECT(44,28), "S7388C2.s7388c2f3");
    check_field_offset(lv, s7388c2f4, ABISELECT(48,32), "S7388C2.s7388c2f4");
    check_field_offset(lv, s7388c2f5, ABISELECT(56,40), "S7388C2.s7388c2f5");
    test_class_info(&lv, &cd_S7388C2);
    dp->~S7388C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C2(Test_S7388C2, "S7388C2", ABISELECT(288,212));

#else // __cplusplus

extern void _ZN7S7388C2C1Ev();
extern void _ZN7S7388C2D2Ev();
Name_Map name_map_S7388C2[] = {
  NSPAIR(_ZN7S7388C2C1Ev),
  NSPAIR(_ZN7S7388C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7388C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7388C2[];
extern void _ZN7S7388C2D1Ev();
extern void _ZN7S7388C2D0Ev();
extern void _ZN7S7388C22v1Ev();
static  VTBL_ENTRY vtc_S7388C2[] = {
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C2[0]),
  (VTBL_ENTRY)&_ZN7S7388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S7388C2[];
static  VTT_ENTRY vtt_S7388C2[] = {
  {&(_ZTV7S7388C2[3]),  3,6},
};
extern VTBL_ENTRY _ZTI7S7388C2[];
extern  VTBL_ENTRY _ZTV7S7388C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C2[];
Class_Descriptor cd_S7388C2 = {  "S7388C2", // class name
  bases_S7388C2, 1,
  &(vtc_S7388C2[0]), // expected_vtbl_contents
  &(vtt_S7388C2[0]), // expected_vtt_contents
  ABISELECT(288,212), // object size
  NSPAIRA(_ZTI7S7388C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7388C2),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7388C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C6  : S20570C5 {
  long double s7388c6f0;
  short s7388c6f1:16;
  int s7388c6f2[7];
  long double s7388c6f3;
  char s7388c6f4:6;
  __tsi64 s7388c6f5:64;
  __tsi64 s7388c6f6[2];
  int s7388c6f7;
  virtual void  v2(); // _ZN7S7388C62v2Ev
  virtual void  v3(); // _ZN7S7388C62v3Ev
  virtual void  v4(); // _ZN7S7388C62v4Ev
  ~S7388C6(); // tgen
  S7388C6(); // tgen
};
//SIG(-1 S7388C6) C1{ BC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi}


void  S7388C6 ::v2(){vfunc_called(this, "_ZN7S7388C62v2Ev");}
void  S7388C6 ::v3(){vfunc_called(this, "_ZN7S7388C62v3Ev");}
void  S7388C6 ::v4(){vfunc_called(this, "_ZN7S7388C62v4Ev");}
S7388C6 ::~S7388C6(){ note_dtor("S7388C6", this);} // tgen
S7388C6 ::S7388C6(){ note_ctor("S7388C6", this);} // tgen

static void Test_S7388C6()
{
  extern Class_Descriptor cd_S7388C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,66)];
    init_test(&cd_S7388C6, buf);
    S7388C6 *dp, &lv = *(dp=new (buf) S7388C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,260), "sizeof(S7388C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C6)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(16,4), "S7388C6");
    check_field_offset(lv, s7388c6f0, ABISELECT(240,172), "S7388C6.s7388c6f0");
    set_bf_and_test(lv, s7388c6f1, ABISELECT(256,184), 0, 16, 1, "S7388C6");
    set_bf_and_test(lv, s7388c6f1, ABISELECT(256,184), 0, 16, hide_sll(1LL<<15), "S7388C6");
    check_field_offset(lv, s7388c6f2, ABISELECT(260,188), "S7388C6.s7388c6f2");
    check_field_offset(lv, s7388c6f3, ABISELECT(288,216), "S7388C6.s7388c6f3");
    set_bf_and_test(lv, s7388c6f4, ABISELECT(304,228), 0, 6, 1, "S7388C6");
    set_bf_and_test(lv, s7388c6f4, ABISELECT(304,228), 0, 6, hide_sll(1LL<<5), "S7388C6");
    set_bf_and_test(lv, s7388c6f5, ABISELECT(312,232), 0, 64, 1, "S7388C6");
    set_bf_and_test(lv, s7388c6f5, ABISELECT(312,232), 0, 64, hide_sll(1LL<<63), "S7388C6");
    check_field_offset(lv, s7388c6f6, ABISELECT(320,240), "S7388C6.s7388c6f6");
    check_field_offset(lv, s7388c6f7, ABISELECT(336,256), "S7388C6.s7388c6f7");
    test_class_info(&lv, &cd_S7388C6);
    dp->~S7388C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C6(Test_S7388C6, "S7388C6", ABISELECT(352,260));

#else // __cplusplus

extern void _ZN7S7388C6C1Ev();
extern void _ZN7S7388C6D1Ev();
Name_Map name_map_S7388C6[] = {
  NSPAIR(_ZN7S7388C6C1Ev),
  NSPAIR(_ZN7S7388C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7388C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7388C6[];
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY vtc_S7388C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C6[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
Class_Descriptor cd_S7388C6 = {  "S7388C6", // class name
  bases_S7388C6, 1,
  &(vtc_S7388C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,260), // object size
  NSPAIRA(_ZTI7S7388C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7388C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S7388C7  {
  long double s7388c7f0;
  void *s7388c7f1;
  short s7388c7f2:5;
  void *s7388c7f3;
  long double s7388c7f4;
  void *s7388c7f5;
  long double s7388c7f6;
  int s7388c7f7[7];
  void *s7388c7f8;
  void *s7388c7f9;
  void  mf7388c7(); // _ZN7S7388C78mf7388c7Ev
};
//SIG(1 S7388C7) U1{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

union  S7388C8  {
  long double s7388c8f0[10];
  short s7388c8f1;
  short s7388c8f2;
  void *s7388c8f3;
  long s7388c8f4;
  void *s7388c8f5;
  long double s7388c8f6[9];
  void  mf7388c8(); // _ZN7S7388C88mf7388c8Ev
};
//SIG(1 S7388C8) U1{ m FD[10] Fs Fs Fp Fl Fp FD[9]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7388C5  : virtual S7388C6 {
  ::S7388C7 s7388c5f0[5];
  char s7388c5f1[3];
  void *s7388c5f2;
  void *s7388c5f3;
  short s7388c5f4[4];
  int s7388c5f5[6];
  ::S7388C2 s7388c5f6;
  int s7388c5f7;
  void *s7388c5f8[8];
  int s7388c5f9;
  ::S7388C8 s7388c5f10;
  char s7388c5f11;
  int s7388c5f12;
  int s7388c5f13[7];
  ~S7388C5(); // tgen
  S7388C5(); // tgen
};
//SIG(-1 S7388C5) C1{ VBC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} FU4{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}[5] Fc[3] Fp Fp Fs[4] Fi[6] FC5{ VBC3 vd v4 Fl[3] FL Fs Fi FL Fi} Fi Fp[8] Fi FU6{ m FD[10] Fs Fs Fp Fl Fp FD[9]} Fc Fi Fi[7]}


S7388C5 ::~S7388C5(){ note_dtor("S7388C5", this);} // tgen
S7388C5 ::S7388C5(){ note_ctor("S7388C5", this);} // tgen

static void Test_S7388C5()
{
  extern Class_Descriptor cd_S7388C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(74,215)];
    init_test(&cd_S7388C5, buf);
    S7388C5 *dp, &lv = *(dp=new (buf) S7388C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1168,856), "sizeof(S7388C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C5)");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*), ABISELECT(832,600), "S7388C5");
    check_base_class_offset(lv, (S7388C6*), ABISELECT(816,596), "S7388C5");
    check_field_offset(lv, s7388c5f0, ABISELECT(16,4), "S7388C5.s7388c5f0");
    check_field_offset(lv, s7388c5f1, ABISELECT(176,144), "S7388C5.s7388c5f1");
    check_field_offset(lv, s7388c5f2, ABISELECT(184,148), "S7388C5.s7388c5f2");
    check_field_offset(lv, s7388c5f3, ABISELECT(192,152), "S7388C5.s7388c5f3");
    check_field_offset(lv, s7388c5f4, ABISELECT(200,156), "S7388C5.s7388c5f4");
    check_field_offset(lv, s7388c5f5, ABISELECT(208,164), "S7388C5.s7388c5f5");
    check_field_offset(lv, s7388c5f6, ABISELECT(240,188), "S7388C5.s7388c5f6");
    check_field_offset(lv, s7388c5f7, ABISELECT(528,400), "S7388C5.s7388c5f7");
    check_field_offset(lv, s7388c5f8, ABISELECT(536,404), "S7388C5.s7388c5f8");
    check_field_offset(lv, s7388c5f9, ABISELECT(600,436), "S7388C5.s7388c5f9");
    check_field_offset(lv, s7388c5f10, ABISELECT(608,440), "S7388C5.s7388c5f10");
    check_field_offset(lv, s7388c5f11, ABISELECT(768,560), "S7388C5.s7388c5f11");
    check_field_offset(lv, s7388c5f12, ABISELECT(772,564), "S7388C5.s7388c5f12");
    check_field_offset(lv, s7388c5f13, ABISELECT(776,568), "S7388C5.s7388c5f13");
    test_class_info(&lv, &cd_S7388C5);
    dp->~S7388C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C5(Test_S7388C5, "S7388C5", ABISELECT(1168,856));

#else // __cplusplus

extern void _ZN7S7388C5C1Ev();
extern void _ZN7S7388C5D1Ev();
Name_Map name_map_S7388C5[] = {
  NSPAIR(_ZN7S7388C5C1Ev),
  NSPAIR(_ZN7S7388C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
static Base_Class bases_S7388C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(832,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(816,596), //bcp->offset
    3, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7388C5[];
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY vtc_S7388C5[] = {
  ABISELECT(816,596),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C5[0]),
  0,
  0,
  0,
  ABISELECT(-816,-596),
  (VTBL_ENTRY)&(_ZTI7S7388C5[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern VTBL_ENTRY _ZTV7S7388C5[];
static  VTT_ENTRY vtt_S7388C5[] = {
  {&(_ZTV7S7388C5[3]),  3,11},
  {&(_ZTV7S7388C5[8]),  8,11},
};
extern VTBL_ENTRY _ZTI7S7388C5[];
extern  VTBL_ENTRY _ZTV7S7388C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C5[];
Class_Descriptor cd_S7388C5 = {  "S7388C5", // class name
  bases_S7388C5, 2,
  &(vtc_S7388C5[0]), // expected_vtbl_contents
  &(vtt_S7388C5[0]), // expected_vtt_contents
  ABISELECT(1168,856), // object size
  NSPAIRA(_ZTI7S7388C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7388C5),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7388C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C13  : virtual S20570C5 {
  ::S20570C5 s7388c13f0[5];
  __tsi64 s7388c13f1;
  short s7388c13f2:5;
  char  :0;
  void *s7388c13f4;
  void *s7388c13f5;
  int s7388c13f6;
  __tsi64 s7388c13f7;
  virtual  ~S7388C13(); // _ZN8S7388C13D2Ev
  virtual void  v5(); // _ZN8S7388C132v5Ev
  S7388C13(); // tgen
};
//SIG(-1 S7388C13) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL}


 S7388C13 ::~S7388C13(){ note_dtor("S7388C13", this);}
void  S7388C13 ::v5(){vfunc_called(this, "_ZN8S7388C132v5Ev");}
S7388C13 ::S7388C13(){ note_ctor("S7388C13", this);} // tgen

static void Test_S7388C13()
{
  extern Class_Descriptor cd_S7388C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(89,262)];
    init_test(&cd_S7388C13, buf);
    S7388C13 *dp, &lv = *(dp=new (buf) S7388C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1408,1044), "sizeof(S7388C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C13)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S7388C13");
    check_field_offset(lv, s7388c13f0, ABISELECT(16,4), "S7388C13.s7388c13f0");
    check_field_offset(lv, s7388c13f1, ABISELECT(1136,844), "S7388C13.s7388c13f1");
    set_bf_and_test(lv, s7388c13f2, ABISELECT(1144,852), 0, 5, 1, "S7388C13");
    set_bf_and_test(lv, s7388c13f2, ABISELECT(1144,852), 0, 5, hide_sll(1LL<<4), "S7388C13");
    check_field_offset(lv, s7388c13f4, ABISELECT(1152,856), "S7388C13.s7388c13f4");
    check_field_offset(lv, s7388c13f5, ABISELECT(1160,860), "S7388C13.s7388c13f5");
    check_field_offset(lv, s7388c13f6, ABISELECT(1168,864), "S7388C13.s7388c13f6");
    check_field_offset(lv, s7388c13f7, ABISELECT(1176,868), "S7388C13.s7388c13f7");
    test_class_info(&lv, &cd_S7388C13);
    dp->~S7388C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C13(Test_S7388C13, "S7388C13", ABISELECT(1408,1044));

#else // __cplusplus

extern void _ZN8S7388C13C1Ev();
extern void _ZN8S7388C13D2Ev();
Name_Map name_map_S7388C13[] = {
  NSPAIR(_ZN8S7388C13C1Ev),
  NSPAIR(_ZN8S7388C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7388C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7388C13[];
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY vtc_S7388C13[] = {
  ABISELECT(1184,876),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern VTBL_ENTRY _ZTV8S7388C13[];
static  VTT_ENTRY vtt_S7388C13[] = {
  {&(_ZTV8S7388C13[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
Class_Descriptor cd_S7388C13 = {  "S7388C13", // class name
  bases_S7388C13, 1,
  &(vtc_S7388C13[0]), // expected_vtbl_contents
  &(vtt_S7388C13[0]), // expected_vtt_contents
  ABISELECT(1408,1044), // object size
  NSPAIRA(_ZTI8S7388C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7388C13),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7388C13),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C12  : S7388C13 , S20570C5 , S7388C6 {
  long double s7388c12f0;
  void *s7388c12f1;
  short s7388c12f2[6];
  void *s7388c12f3;
  int s7388c12f4;
  long double s7388c12f5;
  int s7388c12f6;
  virtual void  v6(); // _ZN8S7388C122v6Ev
  ~S7388C12(); // tgen
  S7388C12(); // tgen
};
//SIG(-1 S7388C12) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC4{ BC3 v3 v4 v5 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} v1 FD Fp Fs[6] Fp Fi FD Fi}


void  S7388C12 ::v6(){vfunc_called(this, "_ZN8S7388C122v6Ev");}
S7388C12 ::~S7388C12(){ note_dtor("S7388C12", this);} // tgen
S7388C12 ::S7388C12(){ note_ctor("S7388C12", this);} // tgen

static void Test_S7388C12()
{
  extern Class_Descriptor cd_S7388C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(131,382)];
    init_test(&cd_S7388C12, buf);
    S7388C12 *dp, &lv = *(dp=new (buf) S7388C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2080,1524), "sizeof(S7388C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C12)");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*), ABISELECT(1856,1356), "S7388C12");
    check_base_class_offset(lv, (S7388C13*), 0, "S7388C12");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S7388C12");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*), ABISELECT(1424,1048), "S7388C12");
    check_base_class_offset(lv, (S7388C6*), ABISELECT(1408,1044), "S7388C12");
    check_field_offset(lv, s7388c12f0, ABISELECT(1760,1304), "S7388C12.s7388c12f0");
    check_field_offset(lv, s7388c12f1, ABISELECT(1776,1316), "S7388C12.s7388c12f1");
    check_field_offset(lv, s7388c12f2, ABISELECT(1784,1320), "S7388C12.s7388c12f2");
    check_field_offset(lv, s7388c12f3, ABISELECT(1800,1332), "S7388C12.s7388c12f3");
    check_field_offset(lv, s7388c12f4, ABISELECT(1808,1336), "S7388C12.s7388c12f4");
    check_field_offset(lv, s7388c12f5, ABISELECT(1824,1340), "S7388C12.s7388c12f5");
    check_field_offset(lv, s7388c12f6, ABISELECT(1840,1352), "S7388C12.s7388c12f6");
    test_class_info(&lv, &cd_S7388C12);
    dp->~S7388C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C12(Test_S7388C12, "S7388C12", ABISELECT(2080,1524));

#else // __cplusplus

extern void _ZN8S7388C12C1Ev();
extern void _ZN8S7388C12D1Ev();
Name_Map name_map_S7388C12[] = {
  NSPAIR(_ZN8S7388C12C1Ev),
  NSPAIR(_ZN8S7388C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
static Base_Class bases_S7388C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1856,1356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7388C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7388C12[];
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY vtc_S7388C12[] = {
  ABISELECT(1856,1356),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern VTBL_ENTRY _ZTV8S7388C12[];
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C13__8S7388C12[] = {
  ABISELECT(1856,1356),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
static  VTT_ENTRY vtt_S7388C12[] = {
  {&(_ZTV8S7388C12[3]),  3,12},
  {&(_tg__ZTV8S7388C13__8S7388C12[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
Class_Descriptor cd_S7388C12 = {  "S7388C12", // class name
  bases_S7388C12, 5,
  &(vtc_S7388C12[0]), // expected_vtbl_contents
  &(vtt_S7388C12[0]), // expected_vtt_contents
  ABISELECT(2080,1524), // object size
  NSPAIRA(_ZTI8S7388C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7388C12),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7388C12),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C11  : virtual S20570C5 , S7388C12 , S7388C13 {
  long double s7388c11f0[9];
  short s7388c11f1;
  virtual  ~S7388C11(); // _ZN8S7388C11D2Ev
  S7388C11(); // tgen
};
//SIG(-1 S7388C11) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} BC3{ BC4{ VBC2 vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC2 BC5{ BC2 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} v5 FD Fp Fs[6] Fp Fi FD Fi} BC4 vd FD[9] Fs}


 S7388C11 ::~S7388C11(){ note_dtor("S7388C11", this);}
S7388C11 ::S7388C11(){ note_ctor("S7388C11", this);} // tgen

static void Test_S7388C11()
{
  extern Class_Descriptor cd_S7388C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(215,629)];
    init_test(&cd_S7388C11, buf);
    S7388C11 *dp, &lv = *(dp=new (buf) S7388C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3424,2512), "sizeof(S7388C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C11)");
    /*is_ambiguous_... S7388C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(3200,2344), "S7388C11");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C12*), ABISELECT(3200,2344), "S7388C11");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C13*), ABISELECT(3200,2344), "S7388C11");
    check_base_class_offset(lv, (S7388C13*)(S7388C12*), 0, "S7388C11");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C12*), ABISELECT(1184,876), "S7388C11");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C12*), ABISELECT(1424,1048), "S7388C11");
    check_base_class_offset(lv, (S7388C6*)(S7388C12*), ABISELECT(1408,1044), "S7388C11");
    check_base_class_offset(lv, (S7388C12*), 0, "S7388C11");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S7388C13*), ABISELECT(1856,1356), "S7388C11");
    check_field_offset(lv, s7388c11f0, ABISELECT(3040,2232), "S7388C11.s7388c11f0");
    check_field_offset(lv, s7388c11f1, ABISELECT(3184,2340), "S7388C11.s7388c11f1");
    test_class_info(&lv, &cd_S7388C11);
    dp->~S7388C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C11(Test_S7388C11, "S7388C11", ABISELECT(3424,2512));

#else // __cplusplus

extern void _ZN8S7388C11C1Ev();
extern void _ZN8S7388C11D2Ev();
Name_Map name_map_S7388C11[] = {
  NSPAIR(_ZN8S7388C11C1Ev),
  NSPAIR(_ZN8S7388C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C12;
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
static Base_Class bases_S7388C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3200,2344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7388C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7388C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7388C13,    ABISELECT(1856,1356), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7388C11[];
extern void _ZN8S7388C11D1Ev();
extern void _ZN8S7388C11D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev)();
extern void ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY vtc_S7388C11[] = {
  ABISELECT(3200,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&_ZN8S7388C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(1344,988),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern VTBL_ENTRY _ZTV8S7388C11[];
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C12__8S7388C11[] = {
  ABISELECT(3200,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C12__8S7388C11[] = {
  ABISELECT(3200,2344),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C13__A1__8S7388C11[] = {
  ABISELECT(1344,988),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
static  VTT_ENTRY vtt_S7388C11[] = {
  {&(_ZTV8S7388C11[3]),  3,18},
  {&(_tg__ZTV8S7388C12__8S7388C11[3]),  3,7},
  {&(_tg__ZTV8S7388C138S7388C12__8S7388C11[3]),  3,6},
  {&(_tg__ZTV8S7388C13__A1__8S7388C11[3]),  3,6},
  {&(_ZTV8S7388C11[15]),  15,18},
};
extern VTBL_ENTRY _ZTI8S7388C11[];
extern  VTBL_ENTRY _ZTV8S7388C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C11[];
Class_Descriptor cd_S7388C11 = {  "S7388C11", // class name
  bases_S7388C11, 7,
  &(vtc_S7388C11[0]), // expected_vtbl_contents
  &(vtt_S7388C11[0]), // expected_vtt_contents
  ABISELECT(3424,2512), // object size
  NSPAIRA(_ZTI8S7388C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7388C11),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7388C11),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C14  {
  long double s7388c14f0;
  int s7388c14f1;
  int s7388c14f2;
  char s7388c14f3;
  void *s7388c14f4;
  ::S20570C17 s7388c14f5;
  int s7388c14f6;
  void *s7388c14f7;
  int s7388c14f8[2];
  virtual  ~S7388C14(); // _ZN8S7388C14D1Ev
  virtual void  v9(); // _ZN8S7388C142v9Ev
  S7388C14(); // tgen
};
//SIG(-1 S7388C14) C1{ vd v1 FD Fi[2] Fc Fp FC2{ vd m Fp Fl Fi Fp} Fi Fp Fi[2]}


 S7388C14 ::~S7388C14(){ note_dtor("S7388C14", this);}
void  S7388C14 ::v9(){vfunc_called(this, "_ZN8S7388C142v9Ev");}
S7388C14 ::S7388C14(){ note_ctor("S7388C14", this);} // tgen

static void Test_S7388C14()
{
  extern Class_Descriptor cd_S7388C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S7388C14, buf);
    S7388C14 *dp, &lv = *(dp=new (buf) S7388C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S7388C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C14)");
    check_field_offset(lv, s7388c14f0, ABISELECT(16,4), "S7388C14.s7388c14f0");
    check_field_offset(lv, s7388c14f1, ABISELECT(32,16), "S7388C14.s7388c14f1");
    check_field_offset(lv, s7388c14f2, ABISELECT(36,20), "S7388C14.s7388c14f2");
    check_field_offset(lv, s7388c14f3, ABISELECT(40,24), "S7388C14.s7388c14f3");
    check_field_offset(lv, s7388c14f4, ABISELECT(48,28), "S7388C14.s7388c14f4");
    check_field_offset(lv, s7388c14f5, ABISELECT(56,32), "S7388C14.s7388c14f5");
    check_field_offset(lv, s7388c14f6, ABISELECT(96,52), "S7388C14.s7388c14f6");
    check_field_offset(lv, s7388c14f7, ABISELECT(104,56), "S7388C14.s7388c14f7");
    check_field_offset(lv, s7388c14f8, ABISELECT(112,60), "S7388C14.s7388c14f8");
    test_class_info(&lv, &cd_S7388C14);
    dp->~S7388C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C14(Test_S7388C14, "S7388C14", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S7388C14C1Ev();
extern void _ZN8S7388C14D1Ev();
Name_Map name_map_S7388C14[] = {
  NSPAIR(_ZN8S7388C14C1Ev),
  NSPAIR(_ZN8S7388C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7388C14[];
extern void _ZN8S7388C14D1Ev();
extern void _ZN8S7388C14D0Ev();
extern void _ZN8S7388C142v9Ev();
static  VTBL_ENTRY vtc_S7388C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C14[0]),
  (VTBL_ENTRY)&_ZN8S7388C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C142v9Ev,
};
extern VTBL_ENTRY _ZTI8S7388C14[];
extern  VTBL_ENTRY _ZTV8S7388C14[];
Class_Descriptor cd_S7388C14 = {  "S7388C14", // class name
  0,0,//no base classes
  &(vtc_S7388C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S7388C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7388C14),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C9  : S7388C2 , S20570C17 , virtual S7388C11 {
  void *s7388c9f0;
  int s7388c9f1;
  ::S7388C14 s7388c9f2;
  char s7388c9f3[9];
  ::S7388C8 s7388c9f4;
  __tsi64 s7388c9f5:64;
  virtual  ~S7388C9(); // _ZN7S7388C9D2Ev
  virtual void  v7(); // _ZN7S7388C92v7Ev
  S7388C9(); // tgen
};
//SIG(-1 S7388C9) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 Fl[3] FL Fs Fi FL Fi} BC4{ vd m Fp Fl Fi Fp} VBC5{ VBC3 BC6{ BC7{ VBC3 vd v3 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC8{ BC3 v4 v5 v6 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} v7 FD Fp Fs[6] Fp Fi FD Fi} BC7 vd FD[9] Fs} vd v1 Fp Fi FC9{ vd v8 FD Fi[2] Fc Fp FC4 Fi Fp Fi[2]} Fc[9] FU10{ m FD[10] Fs Fs Fp Fl Fp FD[9]} FL:64}


 S7388C9 ::~S7388C9(){ note_dtor("S7388C9", this);}
void  S7388C9 ::v7(){vfunc_called(this, "_ZN7S7388C92v7Ev");}
S7388C9 ::S7388C9(){ note_ctor("S7388C9", this);} // tgen

static void Test_S7388C9()
{
  extern Class_Descriptor cd_S7388C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(243,699)];
    init_test(&cd_S7388C9, buf);
    S7388C9 *dp, &lv = *(dp=new (buf) S7388C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3872,2792), "sizeof(S7388C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C9)");
    check_base_class_offset(lv, (S20570C5*)(S7388C2*), ABISELECT(448,280), "S7388C9");
    /*is_ambiguous_... S7388C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C11*), ABISELECT(448,280), "S7388C9");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C12*)(S7388C11*), ABISELECT(448,280), "S7388C9");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C11*), ABISELECT(448,280), "S7388C9");
    check_base_class_offset(lv, (S7388C2*), 0, "S7388C9");
    check_base_class_offset(lv, (S20570C17*), ABISELECT(64,44), "S7388C9");
    check_base_class_offset(lv, (S7388C13*)(S7388C12*)(S7388C11*), ABISELECT(672,448), "S7388C9");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C12*)(S7388C11*), ABISELECT(1856,1324), "S7388C9");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C12*)(S7388C11*), ABISELECT(2096,1496), "S7388C9");
    check_base_class_offset(lv, (S7388C6*)(S7388C12*)(S7388C11*), ABISELECT(2080,1492), "S7388C9");
    check_base_class_offset(lv, (S7388C12*)(S7388C11*), ABISELECT(672,448), "S7388C9");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S7388C13*)(S7388C11*), ABISELECT(2528,1804), "S7388C9");
    check_base_class_offset(lv, (S7388C11*), ABISELECT(672,448), "S7388C9");
    check_field_offset(lv, s7388c9f0, ABISELECT(104,64), "S7388C9.s7388c9f0");
    check_field_offset(lv, s7388c9f1, ABISELECT(112,68), "S7388C9.s7388c9f1");
    check_field_offset(lv, s7388c9f2, ABISELECT(128,72), "S7388C9.s7388c9f2");
    check_field_offset(lv, s7388c9f3, ABISELECT(256,140), "S7388C9.s7388c9f3");
    check_field_offset(lv, s7388c9f4, ABISELECT(272,152), "S7388C9.s7388c9f4");
    set_bf_and_test(lv, s7388c9f5, ABISELECT(432,272), 0, 64, 1, "S7388C9");
    set_bf_and_test(lv, s7388c9f5, ABISELECT(432,272), 0, 64, hide_sll(1LL<<63), "S7388C9");
    test_class_info(&lv, &cd_S7388C9);
    dp->~S7388C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C9(Test_S7388C9, "S7388C9", ABISELECT(3872,2792));

#else // __cplusplus

extern void _ZN7S7388C9C1Ev();
extern void _ZN7S7388C9D2Ev();
Name_Map name_map_S7388C9[] = {
  NSPAIR(_ZN7S7388C9C1Ev),
  NSPAIR(_ZN7S7388C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C2;
extern VTBL_ENTRY _ZTI7S7388C2[];
extern  VTBL_ENTRY _ZTV7S7388C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C2[];
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C12;
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S7388C11;
extern VTBL_ENTRY _ZTI8S7388C11[];
extern  VTBL_ENTRY _ZTV8S7388C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C11[];
static Base_Class bases_S7388C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(448,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C17,    ABISELECT(64,44), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7388C13,    ABISELECT(672,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1856,1324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(2096,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(2080,1492), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7388C12,    ABISELECT(672,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7388C13,    ABISELECT(2528,1804), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7388C11,    ABISELECT(672,448), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7388C9[];
extern void _ZN7S7388C9D1Ev();
extern void _ZN7S7388C9D0Ev();
extern void _ZN7S7388C22v1Ev();
extern void _ZN7S7388C92v7Ev();
extern void ABISELECT(_ZThn64_N7S7388C9D1Ev,_ZThn44_N7S7388C9D1Ev)();
extern void ABISELECT(_ZThn64_N7S7388C9D0Ev,_ZThn44_N7S7388C9D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev)();
extern void ABISELECT(_ZThn672_N7S7388C9D1Ev,_ZThn448_N7S7388C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev)();
extern void ABISELECT(_ZThn672_N7S7388C9D0Ev,_ZThn448_N7S7388C9D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C9D1Ev,_ZTvn1356_n16_N7S7388C9D1Ev)();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C9D0Ev,_ZTvn1356_n16_N7S7388C9D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY vtc_S7388C9[] = {
  ABISELECT(672,448),
  ABISELECT(448,280),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&_ZN7S7388C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7388C92v7Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7388C9D1Ev,_ZThn44_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7388C9D0Ev,_ZThn44_N7S7388C9D0Ev),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-672,-448),
  ABISELECT(-224,-168),
  ABISELECT(-672,-448),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-2080,-1492),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(-2080,-1524),
  ABISELECT(-2528,-1804),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C9D1Ev,_ZTvn1356_n16_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C9D0Ev,_ZTvn1356_n16_N7S7388C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern VTBL_ENTRY _ZTV7S7388C9[];
extern void _ZN7S7388C2D1Ev();
extern void _ZN7S7388C2D0Ev();
extern void _ZN7S7388C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C2__7S7388C9[] = {
  ABISELECT(448,280),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C2[0]),
  (VTBL_ENTRY)&_ZN7S7388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
};
extern void _ZN8S7388C11D1Ev();
extern void _ZN8S7388C11D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C11__7S7388C9[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&_ZN8S7388C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C128S7388C11__7S7388C9[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C128S7388C11__7S7388C9[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C11__A1__7S7388C9[] = {
  ABISELECT(-2080,-1524),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev)();
extern void ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C13__A1__8S7388C11__7S7388C9[] = {
  ABISELECT(-2080,-1524),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
static  VTT_ENTRY vtt_S7388C9[] = {
  {&(_ZTV7S7388C9[4]),  4,36},
  {&(_tg__ZTV7S7388C2__7S7388C9[3]),  3,6},
  {&(_ZTV7S7388C9[21]),  21,36},
  {&(_ZTV7S7388C9[27]),  27,36},
  {&(_ZTV7S7388C9[33]),  33,36},
  {&(_tg__ZTV8S7388C11__7S7388C9[3]),  3,7},
  {&(_tg__ZTV8S7388C128S7388C11__7S7388C9[3]),  3,7},
  {&(_tg__ZTV8S7388C138S7388C128S7388C11__7S7388C9[3]),  3,6},
  {&(_tg__ZTV8S7388C138S7388C11__A1__7S7388C9[3]),  3,6},
  {&(_tg__ZTV8S7388C13__A1__8S7388C11__7S7388C9[3]),  3,6},
};
extern VTBL_ENTRY _ZTI7S7388C9[];
extern  VTBL_ENTRY _ZTV7S7388C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C9[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7388C9D0Ev,_ZThn448_N7S7388C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7388C9D1Ev,_ZThn448_N7S7388C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7388C9 = {  "S7388C9", // class name
  bases_S7388C9, 10,
  &(vtc_S7388C9[0]), // expected_vtbl_contents
  &(vtt_S7388C9[0]), // expected_vtt_contents
  ABISELECT(3872,2792), // object size
  NSPAIRA(_ZTI7S7388C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7388C9),36, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7388C9),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C4  : virtual S7388C5 , virtual S7388C9 {
  ::S7388C5 s7388c4f0;
  long s7388c4f1;
  int s7388c4f2;
  char s7388c4f3;
  char s7388c4f4:4;
  __tsi64 s7388c4f5;
  virtual  ~S7388C4(); // _ZN7S7388C4D2Ev
  virtual void  v8(); // _ZN7S7388C42v8Ev
  S7388C4(); // tgen
};
//SIG(-1 S7388C4) C1{ VBC2{ VBC3{ BC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} FU5{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}[5] Fc[3] Fp Fp Fs[4] Fi[6] FC6{ VBC4 vd v5 Fl[3] FL Fs Fi FL Fi} Fi Fp[8] Fi FU7{ m FD[10] Fs Fs Fp Fl Fp FD[9]} Fc Fi Fi[7]} VBC8{ BC6 BC9{ vd m Fp Fl Fi Fp} VBC10{ VBC4 BC11{ BC12{ VBC4 vd v6 FC4[5] FL Fs:5 Fc:0 Fp Fp Fi FL} BC4 BC3 v7 FD Fp Fs[6] Fp Fi FD Fi} BC12 vd FD[9] Fs} vd v8 Fp Fi FC13{ vd v9 FD Fi Fi Fc Fp FC9 Fi Fp Fi[2]} Fc[9] FU7 FL:64} vd v1 FC2 Fl Fi Fc Fc:4 FL}


 S7388C4 ::~S7388C4(){ note_dtor("S7388C4", this);}
void  S7388C4 ::v8(){vfunc_called(this, "_ZN7S7388C42v8Ev");}
S7388C4 ::S7388C4(){ note_ctor("S7388C4", this);} // tgen

static void Test_S7388C4()
{
  extern Class_Descriptor cd_S7388C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(392,1133)];
    init_test(&cd_S7388C4, buf);
    S7388C4 *dp, &lv = *(dp=new (buf) S7388C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6256,4528), "sizeof(S7388C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C4)");
    /*is_ambiguous_... S7388C4::S7388C6 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C6*), ABISELECT(2048,1480), "S7388C4");
    check_base_class_offset(lv, (S7388C6*)(S7388C5*), ABISELECT(2032,1476), "S7388C4");
    check_base_class_offset(lv, (S7388C5*), ABISELECT(1216,880), "S7388C4");
    check_base_class_offset(lv, (S20570C5*)(S7388C2*)(S7388C9*), ABISELECT(2832,2016), "S7388C4");
    /*is_ambiguous_... S7388C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C11*), ABISELECT(2832,2016), "S7388C4");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C12*)(S7388C11*), ABISELECT(2832,2016), "S7388C4");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C11*), ABISELECT(2832,2016), "S7388C4");
    check_base_class_offset(lv, (S7388C2*)(S7388C9*), ABISELECT(2384,1736), "S7388C4");
    check_base_class_offset(lv, (S20570C17*)(S7388C9*), ABISELECT(2448,1780), "S7388C4");
    check_base_class_offset(lv, (S7388C13*)(S7388C12*)(S7388C11*), ABISELECT(3056,2184), "S7388C4");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C12*)(S7388C11*), ABISELECT(4240,3060), "S7388C4");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C12*)(S7388C11*), ABISELECT(4480,3232), "S7388C4");
    check_base_class_offset(lv, (S7388C6*)(S7388C12*)(S7388C11*), ABISELECT(4464,3228), "S7388C4");
    check_base_class_offset(lv, (S7388C12*)(S7388C11*), ABISELECT(3056,2184), "S7388C4");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S7388C13*)(S7388C11*), ABISELECT(4912,3540), "S7388C4");
    check_base_class_offset(lv, (S7388C11*)(S7388C9*), ABISELECT(3056,2184), "S7388C4");
    check_base_class_offset(lv, (S7388C9*), ABISELECT(2384,1736), "S7388C4");
    check_field_offset(lv, s7388c4f0, ABISELECT(16,4), "S7388C4.s7388c4f0");
    check_field_offset(lv, s7388c4f1, ABISELECT(1184,860), "S7388C4.s7388c4f1");
    check_field_offset(lv, s7388c4f2, ABISELECT(1192,864), "S7388C4.s7388c4f2");
    check_field_offset(lv, s7388c4f3, ABISELECT(1196,868), "S7388C4.s7388c4f3");
    set_bf_and_test(lv, s7388c4f4, ABISELECT(1197,869), 0, 4, 1, "S7388C4");
    set_bf_and_test(lv, s7388c4f4, ABISELECT(1197,869), 0, 4, hide_sll(1LL<<3), "S7388C4");
    check_field_offset(lv, s7388c4f5, ABISELECT(1200,872), "S7388C4.s7388c4f5");
    test_class_info(&lv, &cd_S7388C4);
    dp->~S7388C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C4(Test_S7388C4, "S7388C4", ABISELECT(6256,4528));

#else // __cplusplus

extern void _ZN7S7388C4C1Ev();
extern void _ZN7S7388C4D2Ev();
Name_Map name_map_S7388C4[] = {
  NSPAIR(_ZN7S7388C4C1Ev),
  NSPAIR(_ZN7S7388C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C5;
extern VTBL_ENTRY _ZTI7S7388C5[];
extern  VTBL_ENTRY _ZTV7S7388C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C2;
extern VTBL_ENTRY _ZTI7S7388C2[];
extern  VTBL_ENTRY _ZTV7S7388C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C2[];
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C12;
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S7388C11;
extern VTBL_ENTRY _ZTI8S7388C11[];
extern  VTBL_ENTRY _ZTV8S7388C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C11[];
extern Class_Descriptor cd_S7388C9;
extern VTBL_ENTRY _ZTI7S7388C9[];
extern  VTBL_ENTRY _ZTV7S7388C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C9[];
static Base_Class bases_S7388C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(2048,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(2032,1476), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7388C5,    ABISELECT(1216,880), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(2832,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7388C2,    ABISELECT(2384,1736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20570C17,    ABISELECT(2448,1780), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7388C13,    ABISELECT(3056,2184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4240,3060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4480,3232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(4464,3228), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7388C12,    ABISELECT(3056,2184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7388C13,    ABISELECT(4912,3540), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7388C11,    ABISELECT(3056,2184), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7388C9,    ABISELECT(2384,1736), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7388C4[];
extern void _ZN7S7388C4D1Ev();
extern void _ZN7S7388C4D0Ev();
extern void _ZN7S7388C42v8Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S7388C4D1Ev,_ZTv0_n20_N7S7388C4D1Ev)();
extern void ABISELECT(_ZThn2384_N7S7388C4D1Ev,_ZThn1736_N7S7388C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7388C4D0Ev,_ZTv0_n20_N7S7388C4D0Ev)();
extern void ABISELECT(_ZThn2384_N7S7388C4D0Ev,_ZThn1736_N7S7388C4D0Ev)() __attribute__((weak));
extern void _ZN7S7388C22v1Ev();
extern void _ZN7S7388C92v7Ev();
extern void ABISELECT(_ZTvn64_n40_N7S7388C4D1Ev,_ZTvn44_n20_N7S7388C4D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S7388C4D0Ev,_ZTvn44_n20_N7S7388C4D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7388C4D1Ev,_ZTv0_n16_N7S7388C4D1Ev)();
extern void ABISELECT(_ZThn3056_N7S7388C4D1Ev,_ZThn2184_N7S7388C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7388C4D0Ev,_ZTv0_n16_N7S7388C4D0Ev)();
extern void ABISELECT(_ZThn3056_N7S7388C4D0Ev,_ZThn2184_N7S7388C4D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C4D1Ev,_ZTvn1356_n16_N7S7388C4D1Ev)();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C4D0Ev,_ZTvn1356_n16_N7S7388C4D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY vtc_S7388C4[] = {
  ABISELECT(3056,2184),
  ABISELECT(2832,2016),
  ABISELECT(2384,1736),
  ABISELECT(2032,1476),
  ABISELECT(1216,880),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&_ZN7S7388C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C42v8Ev,
  ABISELECT(816,596),
  ABISELECT(-1216,-880),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  0,
  0,
  0,
  ABISELECT(-2032,-1476),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  0,
  0,
  ABISELECT(-2384,-1736),
  ABISELECT(672,448),
  ABISELECT(448,280),
  ABISELECT(-2384,-1736),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7388C4D1Ev,_ZTv0_n20_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7388C4D0Ev,_ZTv0_n20_N7S7388C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7388C92v7Ev,
  ABISELECT(-2448,-1780),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7388C4D1Ev,_ZTvn44_n20_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7388C4D0Ev,_ZTvn44_n20_N7S7388C4D0Ev),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-3056,-2184),
  ABISELECT(-224,-168),
  ABISELECT(-3056,-2184),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C4D1Ev,_ZTv0_n16_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C4D0Ev,_ZTv0_n16_N7S7388C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-4464,-3228),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(-2080,-1524),
  ABISELECT(-4912,-3540),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C4D1Ev,_ZTvn1356_n16_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C4D0Ev,_ZTvn1356_n16_N7S7388C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern VTBL_ENTRY _ZTV7S7388C4[];
static  VTBL_ENTRY _tg__ZTV7S7388C5__7S7388C4[] = {
  ABISELECT(816,596),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C5[0]),
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C6__7S7388C5__7S7388C4[] = {
  0,
  0,
  0,
  ABISELECT(-816,-596),
  (VTBL_ENTRY)&(_ZTI7S7388C5[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void _ZN7S7388C9D1Ev();
extern void _ZN7S7388C9D0Ev();
extern void _ZN7S7388C22v1Ev();
extern void _ZN7S7388C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C9__7S7388C4[] = {
  ABISELECT(672,448),
  ABISELECT(448,280),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&_ZN7S7388C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7388C92v7Ev,
};
extern void _ZN7S7388C2D1Ev();
extern void _ZN7S7388C2D0Ev();
extern void _ZN7S7388C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C27S7388C9__7S7388C4[] = {
  ABISELECT(448,280),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C2[0]),
  (VTBL_ENTRY)&_ZN7S7388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev)();
extern void ABISELECT(_ZThn672_N7S7388C9D1Ev,_ZThn448_N7S7388C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev)();
extern void ABISELECT(_ZThn672_N7S7388C9D0Ev,_ZThn448_N7S7388C9D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C11__7S7388C9__7S7388C4[] = {
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-672,-448),
  ABISELECT(-224,-168),
  ABISELECT(-672,-448),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C68S7388C128S7388C11__7S7388C9__7S7388C4[] = {
  ABISELECT(-2080,-1492),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void ABISELECT(_ZTvn1856_n32_N7S7388C9D1Ev,_ZTvn1356_n16_N7S7388C9D1Ev)();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C9D0Ev,_ZTvn1356_n16_N7S7388C9D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C11__A1__7S7388C9__7S7388C4[] = {
  ABISELECT(-2080,-1524),
  ABISELECT(-2528,-1804),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C9D1Ev,_ZTvn1356_n16_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C9D0Ev,_ZTvn1356_n16_N7S7388C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN8S7388C11D1Ev();
extern void _ZN8S7388C11D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C11__7S7388C4[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&_ZN8S7388C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C128S7388C11__7S7388C4[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C128S7388C11__7S7388C4[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C11__A1__7S7388C4[] = {
  ABISELECT(-2080,-1524),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev)();
extern void ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C13__A1__8S7388C11__7S7388C4[] = {
  ABISELECT(-2080,-1524),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
static  VTT_ENTRY vtt_S7388C4[] = {
  {&(_ZTV7S7388C4[7]),  7,60},
  {&(_ZTV7S7388C4[13]),  13,60},
  {&(_ZTV7S7388C4[18]),  18,60},
  {&(_ZTV7S7388C4[28]),  28,60},
  {&(_ZTV7S7388C4[34]),  34,60},
  {&(_ZTV7S7388C4[45]),  45,60},
  {&(_ZTV7S7388C4[51]),  51,60},
  {&(_ZTV7S7388C4[57]),  57,60},
  {&(_tg__ZTV7S7388C5__7S7388C4[3]),  3,3},
  {&(_tg__ZTV7S7388C6__7S7388C5__7S7388C4[5]),  5,8},
  {&(_tg__ZTV7S7388C9__7S7388C4[4]),  4,8},
  {&(_tg__ZTV7S7388C27S7388C9__7S7388C4[3]),  3,6},
  {&(_tg__ZTV8S7388C11__7S7388C9__7S7388C4[9]),  9,13},
  {&(_tg__ZTV7S7388C68S7388C128S7388C11__7S7388C9__7S7388C4[2]),  2,5},
  {&(_tg__ZTV8S7388C138S7388C11__A1__7S7388C9__7S7388C4[3]),  3,6},
  {&(_tg__ZTV8S7388C11__7S7388C4[3]),  3,7},
  {&(_tg__ZTV8S7388C128S7388C11__7S7388C4[3]),  3,7},
  {&(_tg__ZTV8S7388C138S7388C128S7388C11__7S7388C4[3]),  3,6},
  {&(_tg__ZTV8S7388C138S7388C11__A1__7S7388C4[3]),  3,6},
  {&(_tg__ZTV8S7388C13__A1__8S7388C11__7S7388C4[3]),  3,6},
};
extern VTBL_ENTRY _ZTI7S7388C4[];
extern  VTBL_ENTRY _ZTV7S7388C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C4[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7388C9D0Ev,_ZThn448_N7S7388C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7388C9D1Ev,_ZThn448_N7S7388C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C4D0Ev,_ZTv0_n16_N7S7388C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3056_N7S7388C4D0Ev,_ZThn2184_N7S7388C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C4D1Ev,_ZTv0_n16_N7S7388C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3056_N7S7388C4D1Ev,_ZThn2184_N7S7388C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7388C4D0Ev,_ZTv0_n20_N7S7388C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2384_N7S7388C4D0Ev,_ZThn1736_N7S7388C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7388C4D1Ev,_ZTv0_n20_N7S7388C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2384_N7S7388C4D1Ev,_ZThn1736_N7S7388C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7388C4 = {  "S7388C4", // class name
  bases_S7388C4, 14,
  &(vtc_S7388C4[0]), // expected_vtbl_contents
  &(vtt_S7388C4[0]), // expected_vtt_contents
  ABISELECT(6256,4528), // object size
  NSPAIRA(_ZTI7S7388C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7388C4),60, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7388C4),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C15  : S7388C6 , virtual S20570C5 {
  ::S5217C45 s7388c15f0;
  __tsi64 s7388c15f1;
  int s7388c15f2:23;
  short s7388c15f3;
  int s7388c15f4;
  long s7388c15f5[2];
  ~S7388C15(); // tgen
  S7388C15(); // tgen
};
//SIG(-1 S7388C15) C1{ BC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC3 FC4{} FL Fi:23 Fs Fi Fl[2]}


S7388C15 ::~S7388C15(){ note_dtor("S7388C15", this);} // tgen
S7388C15 ::S7388C15(){ note_ctor("S7388C15", this);} // tgen

static void Test_S7388C15()
{
  extern Class_Descriptor cd_S7388C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,116)];
    init_test(&cd_S7388C15, buf);
    S7388C15 *dp, &lv = *(dp=new (buf) S7388C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,460), "sizeof(S7388C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C15)");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*), ABISELECT(16,4), "S7388C15");
    check_base_class_offset(lv, (S7388C6*), 0, "S7388C15");
    /*is_ambiguous_... S7388C15::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(384,292), "S7388C15");
    check_field_offset(lv, s7388c15f0, ABISELECT(340,260), "S7388C15.s7388c15f0");
    check_field_offset(lv, s7388c15f1, ABISELECT(344,264), "S7388C15.s7388c15f1");
    set_bf_and_test(lv, s7388c15f2, ABISELECT(352,272), 0, 23, 1, "S7388C15");
    set_bf_and_test(lv, s7388c15f2, ABISELECT(352,272), 0, 23, hide_sll(1LL<<22), "S7388C15");
    check_field_offset(lv, s7388c15f3, ABISELECT(356,276), "S7388C15.s7388c15f3");
    check_field_offset(lv, s7388c15f4, ABISELECT(360,280), "S7388C15.s7388c15f4");
    check_field_offset(lv, s7388c15f5, ABISELECT(368,284), "S7388C15.s7388c15f5");
    test_class_info(&lv, &cd_S7388C15);
    dp->~S7388C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C15(Test_S7388C15, "S7388C15", ABISELECT(608,460));

#else // __cplusplus

extern void _ZN8S7388C15C1Ev();
extern void _ZN8S7388C15D1Ev();
Name_Map name_map_S7388C15[] = {
  NSPAIR(_ZN8S7388C15C1Ev),
  NSPAIR(_ZN8S7388C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7388C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7388C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(384,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7388C15[];
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY vtc_S7388C15[] = {
  ABISELECT(384,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C15[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern VTBL_ENTRY _ZTV8S7388C15[];
static  VTT_ENTRY vtt_S7388C15[] = {
  {&(_ZTV8S7388C15[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S7388C15[];
extern  VTBL_ENTRY _ZTV8S7388C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C15[];
Class_Descriptor cd_S7388C15 = {  "S7388C15", // class name
  bases_S7388C15, 3,
  &(vtc_S7388C15[0]), // expected_vtbl_contents
  &(vtt_S7388C15[0]), // expected_vtt_contents
  ABISELECT(608,460), // object size
  NSPAIRA(_ZTI8S7388C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7388C15),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7388C15),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C18  : virtual S20570C5 {
  void *s7388c18f0;
  int s7388c18f1;
  ::S7388C6 s7388c18f2;
  int s7388c18f3;
  void *s7388c18f4;
  ~S7388C18(); // tgen
  S7388C18(); // tgen
};
//SIG(-1 S7388C18) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} Fp Fi FC3{ BC2 v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} Fi Fp}


S7388C18 ::~S7388C18(){ note_dtor("S7388C18", this);} // tgen
S7388C18 ::S7388C18(){ note_ctor("S7388C18", this);} // tgen

static void Test_S7388C18()
{
  extern Class_Descriptor cd_S7388C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(40,113)];
    init_test(&cd_S7388C18, buf);
    S7388C18 *dp, &lv = *(dp=new (buf) S7388C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(624,448), "sizeof(S7388C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C18)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(400,280), "S7388C18");
    check_field_offset(lv, s7388c18f0, ABISELECT(8,4), "S7388C18.s7388c18f0");
    check_field_offset(lv, s7388c18f1, ABISELECT(16,8), "S7388C18.s7388c18f1");
    check_field_offset(lv, s7388c18f2, ABISELECT(32,12), "S7388C18.s7388c18f2");
    check_field_offset(lv, s7388c18f3, ABISELECT(384,272), "S7388C18.s7388c18f3");
    check_field_offset(lv, s7388c18f4, ABISELECT(392,276), "S7388C18.s7388c18f4");
    test_class_info(&lv, &cd_S7388C18);
    dp->~S7388C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C18(Test_S7388C18, "S7388C18", ABISELECT(624,448));

#else // __cplusplus

extern void _ZN8S7388C18C1Ev();
extern void _ZN8S7388C18D1Ev();
Name_Map name_map_S7388C18[] = {
  NSPAIR(_ZN8S7388C18C1Ev),
  NSPAIR(_ZN8S7388C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7388C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(400,280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7388C18[];
static  VTBL_ENTRY vtc_S7388C18[] = {
  ABISELECT(400,280),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C18[0]),
};
extern VTBL_ENTRY _ZTV8S7388C18[];
static  VTT_ENTRY vtt_S7388C18[] = {
  {&(_ZTV8S7388C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7388C18[];
extern  VTBL_ENTRY _ZTV8S7388C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C18[];
Class_Descriptor cd_S7388C18 = {  "S7388C18", // class name
  bases_S7388C18, 1,
  &(vtc_S7388C18[0]), // expected_vtbl_contents
  &(vtt_S7388C18[0]), // expected_vtt_contents
  ABISELECT(624,448), // object size
  NSPAIRA(_ZTI8S7388C18),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7388C18),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7388C18),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C17  : virtual S7388C6 , virtual S7388C15 , S7388C12 , virtual S7388C18 {
  char s7388c17f0:5;
  long s7388c17f1[4];
  char s7388c17f2[6];
  ::S20570C17 s7388c17f3;
  virtual  ~S7388C17(); // _ZN8S7388C17D2Ev
  S7388C17(); // tgen
};
//SIG(-1 S7388C17) C1{ VBC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC4{ BC2 VBC3 FC5{} FL Fi:23 Fs Fi Fl[2]} BC6{ BC7{ VBC3 vd v4 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC2 v5 FD Fp Fs[6] Fp Fi FD Fi} VBC8{ VBC3 Fp Fi FC2 Fi Fp} vd Fc:5 Fl[4] Fc[6] FC9{ vd m Fp Fl Fi Fp}}


 S7388C17 ::~S7388C17(){ note_dtor("S7388C17", this);}
S7388C17 ::S7388C17(){ note_ctor("S7388C17", this);} // tgen

static void Test_S7388C17()
{
  extern Class_Descriptor cd_S7388C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(207,602)];
    init_test(&cd_S7388C17, buf);
    S7388C17 *dp, &lv = *(dp=new (buf) S7388C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3296,2404), "sizeof(S7388C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C17)");
    /*is_ambiguous_... S7388C17::S7388C6 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C6*), ABISELECT(1952,1408), "S7388C17");
    /*is_ambiguous_... S7388C17::S7388C6 */ AMB_check_base_class_offset(lv, (S7388C6*), ABISELECT(1936,1404), "S7388C17");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C15*), ABISELECT(2304,1668), "S7388C17");
    check_base_class_offset(lv, (S7388C6*)(S7388C15*), ABISELECT(2288,1664), "S7388C17");
    /*is_ambiguous_... S7388C15::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C15*), ABISELECT(2672,1956), "S7388C17");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C12*), ABISELECT(2672,1956), "S7388C17");
    check_base_class_offset(lv, (S20570C5*)(S7388C18*), ABISELECT(2672,1956), "S7388C17");
    check_base_class_offset(lv, (S7388C15*), ABISELECT(2288,1664), "S7388C17");
    check_base_class_offset(lv, (S7388C13*)(S7388C12*), 0, "S7388C17");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C12*), ABISELECT(1184,876), "S7388C17");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C12*), ABISELECT(1424,1048), "S7388C17");
    check_base_class_offset(lv, (S7388C6*)(S7388C12*), ABISELECT(1408,1044), "S7388C17");
    check_base_class_offset(lv, (S7388C12*), 0, "S7388C17");
    check_base_class_offset(lv, (S7388C18*), ABISELECT(2896,2124), "S7388C17");
    set_bf_and_test(lv, s7388c17f0, ABISELECT(1844,1356), 0, 5, 1, "S7388C17");
    set_bf_and_test(lv, s7388c17f0, ABISELECT(1844,1356), 0, 5, hide_sll(1LL<<4), "S7388C17");
    check_field_offset(lv, s7388c17f1, ABISELECT(1848,1360), "S7388C17.s7388c17f1");
    check_field_offset(lv, s7388c17f2, ABISELECT(1880,1376), "S7388C17.s7388c17f2");
    check_field_offset(lv, s7388c17f3, ABISELECT(1888,1384), "S7388C17.s7388c17f3");
    test_class_info(&lv, &cd_S7388C17);
    dp->~S7388C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C17(Test_S7388C17, "S7388C17", ABISELECT(3296,2404));

#else // __cplusplus

extern void _ZN8S7388C17C1Ev();
extern void _ZN8S7388C17D2Ev();
Name_Map name_map_S7388C17[] = {
  NSPAIR(_ZN8S7388C17C1Ev),
  NSPAIR(_ZN8S7388C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C15;
extern VTBL_ENTRY _ZTI8S7388C15[];
extern  VTBL_ENTRY _ZTV8S7388C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C15[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C12;
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
extern Class_Descriptor cd_S7388C18;
extern VTBL_ENTRY _ZTI8S7388C18[];
extern  VTBL_ENTRY _ZTV8S7388C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C18[];
static Base_Class bases_S7388C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1952,1408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(1936,1404), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(2304,1668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(2288,1664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(2672,1956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7388C15,    ABISELECT(2288,1664), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7388C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(1408,1044), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7388C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7388C18,    ABISELECT(2896,2124), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7388C17[];
extern void _ZN8S7388C17D1Ev();
extern void _ZN8S7388C17D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY vtc_S7388C17[] = {
  ABISELECT(2896,2124),
  ABISELECT(2288,1664),
  ABISELECT(1936,1404),
  ABISELECT(2672,1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN8S7388C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C17D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  0,
  0,
  0,
  ABISELECT(-1936,-1404),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  0,
  0,
  0,
  ABISELECT(384,292),
  ABISELECT(-2288,-1664),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(-224,-168),
  ABISELECT(-2896,-2124),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
};
extern VTBL_ENTRY _ZTV8S7388C17[];
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C12__8S7388C17[] = {
  ABISELECT(2672,1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C12__8S7388C17[] = {
  ABISELECT(2672,1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C15__8S7388C17[] = {
  ABISELECT(384,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C15[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7388C18__8S7388C17[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C18[0]),
};
static  VTT_ENTRY vtt_S7388C17[] = {
  {&(_ZTV8S7388C17[6]),  6,35},
  {&(_tg__ZTV8S7388C12__8S7388C17[3]),  3,7},
  {&(_tg__ZTV8S7388C138S7388C12__8S7388C17[3]),  3,6},
  {&(_ZTV8S7388C17[20]),  20,35},
  {&(_ZTV8S7388C17[29]),  29,35},
  {&(_ZTV8S7388C17[35]),  35,35},
  {&(_tg__ZTV8S7388C15__8S7388C17[3]),  3,6},
  {&(_tg__ZTV8S7388C18__8S7388C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7388C17[];
extern  VTBL_ENTRY _ZTV8S7388C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C17[];
Class_Descriptor cd_S7388C17 = {  "S7388C17", // class name
  bases_S7388C17, 12,
  &(vtc_S7388C17[0]), // expected_vtbl_contents
  &(vtt_S7388C17[0]), // expected_vtt_contents
  ABISELECT(3296,2404), // object size
  NSPAIRA(_ZTI8S7388C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7388C17),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7388C17),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7388C1  : S7388C2 , S7388C4 , virtual S7388C15 , S20570C5 , virtual S7388C17 {
  long double s7388c1f0;
  void *s7388c1f1;
  virtual  ~S7388C1(); // _ZN7S7388C1D2Ev
  S7388C1(); // tgen
};
//SIG(1 S7388C1) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 Fl[3] FL Fs Fi FL Fi} BC4{ VBC5{ VBC6{ BC3 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} FU7{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}[5] Fc[3] Fp Fp Fs[4] Fi[6] FC2 Fi Fp[8] Fi FU8{ m FD[10] Fs Fs Fp Fl Fp FD[9]} Fc Fi Fi[7]} VBC9{ BC2 BC10{ vd m Fp Fl Fi Fp} VBC11{ VBC3 BC12{ BC13{ VBC3 vd v5 FC3[5] FL Fs:5 Fc:0 Fp Fp Fi FL} BC3 BC6 v6 FD Fp Fs[6] Fp Fi FD Fi} BC13 vd FD[9] Fs} vd v7 Fp Fi FC14{ vd v9 FD Fi Fi Fc Fp FC10 Fi Fp Fi[2]} Fc[9] FU8 FL:64} vd v8 FC5 Fl Fi Fc Fc:4 FL} VBC15{ BC6 VBC3 FC16{} FL Fi:23 Fs Fi Fl[2]} BC3 VBC17{ VBC6 VBC15 BC12 VBC18{ VBC3 Fp Fi FC6 Fi Fp} vd Fc:5 Fl[4] Fc[6] FC10} vd FD Fp}


 S7388C1 ::~S7388C1(){ note_dtor("S7388C1", this);}
S7388C1 ::S7388C1(){ note_ctor("S7388C1", this);} // tgen

static void Test_S7388C1()
{
  extern Class_Descriptor cd_S7388C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(582,1684)];
    init_test(&cd_S7388C1, buf);
    S7388C1 *dp, &lv = *(dp=new (buf) S7388C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9296,6732), "sizeof(S7388C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7388C1)");
    /*is_ambiguous_... S7388C1::S7388C2 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C2*), ABISELECT(1536,1108), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C2*)(S7388C9*), ABISELECT(1536,1108), "S7388C1");
    /*is_ambiguous_... S7388C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C11*), ABISELECT(1536,1108), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C12*)(S7388C11*), ABISELECT(1536,1108), "S7388C1");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C11*), ABISELECT(1536,1108), "S7388C1");
    /*is_ambiguous_... S7388C15::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C15*), ABISELECT(1536,1108), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C13*)(S7388C12*)(S7388C17*), ABISELECT(1536,1108), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C18*), ABISELECT(1536,1108), "S7388C1");
    /*is_ambiguous_... S7388C1::S7388C2 */ AMB_check_base_class_offset(lv, (S7388C2*), 0, "S7388C1");
    /*is_ambiguous_... S7388C1::S7388C6 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C6*), ABISELECT(2592,1876), "S7388C1");
    check_base_class_offset(lv, (S7388C6*)(S7388C5*), ABISELECT(2576,1872), "S7388C1");
    /*is_ambiguous_... S7388C17::S7388C6 */ AMB_check_base_class_offset(lv, (S7388C6*)(S7388C17*), ABISELECT(2576,1872), "S7388C1");
    check_base_class_offset(lv, (S7388C5*)(S7388C4*), ABISELECT(1760,1276), "S7388C1");
    check_base_class_offset(lv, (S7388C2*)(S7388C9*), ABISELECT(2928,2132), "S7388C1");
    check_base_class_offset(lv, (S20570C17*)(S7388C9*), ABISELECT(2992,2176), "S7388C1");
    check_base_class_offset(lv, (S7388C13*)(S7388C12*)(S7388C11*), ABISELECT(3376,2412), "S7388C1");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C12*)(S7388C11*), ABISELECT(4560,3288), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C12*)(S7388C11*), ABISELECT(4800,3460), "S7388C1");
    check_base_class_offset(lv, (S7388C6*)(S7388C12*)(S7388C11*), ABISELECT(4784,3456), "S7388C1");
    check_base_class_offset(lv, (S7388C12*)(S7388C11*), ABISELECT(3376,2412), "S7388C1");
    /*is_ambiguous_... S7388C11::S7388C13 */ AMB_check_base_class_offset(lv, (S7388C13*)(S7388C11*), ABISELECT(5232,3768), "S7388C1");
    check_base_class_offset(lv, (S7388C11*)(S7388C9*), ABISELECT(3376,2412), "S7388C1");
    check_base_class_offset(lv, (S7388C9*)(S7388C4*), ABISELECT(2928,2132), "S7388C1");
    check_base_class_offset(lv, (S7388C4*), ABISELECT(64,44), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C15*), ABISELECT(6592,4760), "S7388C1");
    check_base_class_offset(lv, (S7388C6*)(S7388C15*), ABISELECT(6576,4756), "S7388C1");
    check_base_class_offset(lv, (S7388C15*), ABISELECT(6576,4756), "S7388C1");
    check_base_class_offset(lv, (S7388C15*)(S7388C17*), ABISELECT(6576,4756), "S7388C1");
    /*is_ambiguous_... S7388C1::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(1280,924), "S7388C1");
    check_base_class_offset(lv, (S7388C13*)(S7388C12*)(S7388C17*), ABISELECT(6960,5048), "S7388C1");
    /*is_ambiguous_... S7388C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7388C12*)(S7388C17*), ABISELECT(8144,5924), "S7388C1");
    check_base_class_offset(lv, (S20570C5*)(S7388C6*)(S7388C12*)(S7388C17*), ABISELECT(8384,6096), "S7388C1");
    check_base_class_offset(lv, (S7388C6*)(S7388C12*)(S7388C17*), ABISELECT(8368,6092), "S7388C1");
    check_base_class_offset(lv, (S7388C12*)(S7388C17*), ABISELECT(6960,5048), "S7388C1");
    check_base_class_offset(lv, (S7388C18*)(S7388C17*), ABISELECT(8896,6452), "S7388C1");
    check_base_class_offset(lv, (S7388C17*), ABISELECT(6960,5048), "S7388C1");
    check_field_offset(lv, s7388c1f0, ABISELECT(1504,1092), "S7388C1.s7388c1f0");
    check_field_offset(lv, s7388c1f1, ABISELECT(1520,1104), "S7388C1.s7388c1f1");
    test_class_info(&lv, &cd_S7388C1);
    dp->~S7388C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7388C1(Test_S7388C1, "S7388C1", ABISELECT(9296,6732));

#else // __cplusplus

extern void _ZN7S7388C1C1Ev();
extern void _ZN7S7388C1D2Ev();
Name_Map name_map_S7388C1[] = {
  NSPAIR(_ZN7S7388C1C1Ev),
  NSPAIR(_ZN7S7388C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C2;
extern VTBL_ENTRY _ZTI7S7388C2[];
extern  VTBL_ENTRY _ZTV7S7388C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C2[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C5;
extern VTBL_ENTRY _ZTI7S7388C5[];
extern  VTBL_ENTRY _ZTV7S7388C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C5[];
extern Class_Descriptor cd_S7388C2;
extern VTBL_ENTRY _ZTI7S7388C2[];
extern  VTBL_ENTRY _ZTV7S7388C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C2[];
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C12;
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S7388C11;
extern VTBL_ENTRY _ZTI8S7388C11[];
extern  VTBL_ENTRY _ZTV8S7388C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C11[];
extern Class_Descriptor cd_S7388C9;
extern VTBL_ENTRY _ZTI7S7388C9[];
extern  VTBL_ENTRY _ZTV7S7388C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C9[];
extern Class_Descriptor cd_S7388C4;
extern VTBL_ENTRY _ZTI7S7388C4[];
extern  VTBL_ENTRY _ZTV7S7388C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C4[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C15;
extern VTBL_ENTRY _ZTI8S7388C15[];
extern  VTBL_ENTRY _ZTV8S7388C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C15[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C13;
extern VTBL_ENTRY _ZTI8S7388C13[];
extern  VTBL_ENTRY _ZTV8S7388C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7388C6;
extern VTBL_ENTRY _ZTI7S7388C6[];
extern  VTBL_ENTRY _ZTV7S7388C6[];
extern Class_Descriptor cd_S7388C12;
extern VTBL_ENTRY _ZTI8S7388C12[];
extern  VTBL_ENTRY _ZTV8S7388C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C12[];
extern Class_Descriptor cd_S7388C18;
extern VTBL_ENTRY _ZTI8S7388C18[];
extern  VTBL_ENTRY _ZTV8S7388C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C18[];
extern Class_Descriptor cd_S7388C17;
extern VTBL_ENTRY _ZTI8S7388C17[];
extern  VTBL_ENTRY _ZTV8S7388C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7388C17[];
static Base_Class bases_S7388C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1536,1108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(2592,1876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(2576,1872), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7388C5,    ABISELECT(1760,1276), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7388C2,    ABISELECT(2928,2132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20570C17,    ABISELECT(2992,2176), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7388C13,    ABISELECT(3376,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4560,3288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4800,3460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(4784,3456), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7388C12,    ABISELECT(3376,2412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7388C13,    ABISELECT(5232,3768), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7388C11,    ABISELECT(3376,2412), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7388C9,    ABISELECT(2928,2132), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7388C4,    ABISELECT(64,44), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(6592,4760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(6576,4756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7388C15,    ABISELECT(6576,4756), //bcp->offset
    73, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(1280,924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7388C13,    ABISELECT(6960,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(8144,5924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(8384,6096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7388C6,    ABISELECT(8368,6092), //bcp->offset
    98, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7388C12,    ABISELECT(6960,5048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7388C18,    ABISELECT(8896,6452), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7388C17,    ABISELECT(6960,5048), //bcp->offset
    82, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7388C1[];
extern void _ZN7S7388C1D1Ev();
extern void _ZN7S7388C1D0Ev();
extern void _ZN7S7388C22v1Ev();
extern void ABISELECT(_ZThn64_N7S7388C1D1Ev,_ZThn44_N7S7388C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7388C1D0Ev,_ZThn44_N7S7388C1D0Ev)();
extern void _ZN7S7388C42v8Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S7388C1D1Ev,_ZTv0_n20_N7S7388C1D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7388C1D1Ev,_ZThn2132_N7S7388C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7388C1D0Ev,_ZTv0_n20_N7S7388C1D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7388C1D0Ev,_ZThn2132_N7S7388C1D0Ev)() __attribute__((weak));
extern void _ZN7S7388C22v1Ev();
extern void _ZN7S7388C92v7Ev();
extern void ABISELECT(_ZTvn64_n40_N7S7388C1D1Ev,_ZTvn44_n20_N7S7388C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S7388C1D0Ev,_ZTvn44_n20_N7S7388C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7388C1D1Ev,_ZTv0_n16_N7S7388C1D1Ev)();
extern void ABISELECT(_ZThn3376_N7S7388C1D1Ev,_ZThn2412_N7S7388C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7388C1D0Ev,_ZTv0_n16_N7S7388C1D0Ev)();
extern void ABISELECT(_ZThn3376_N7S7388C1D0Ev,_ZThn2412_N7S7388C1D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C1D1Ev,_ZTvn1356_n16_N7S7388C1D1Ev)();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C1D0Ev,_ZTvn1356_n16_N7S7388C1D0Ev)();
extern void _ZN8S7388C132v5Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
extern void ABISELECT(_ZTv0_n56_N7S7388C1D1Ev,_ZTv0_n28_N7S7388C1D1Ev)();
extern void ABISELECT(_ZThn6960_N7S7388C1D1Ev,_ZThn5048_N7S7388C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7388C1D0Ev,_ZTv0_n28_N7S7388C1D0Ev)();
extern void ABISELECT(_ZThn6960_N7S7388C1D0Ev,_ZThn5048_N7S7388C1D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY vtc_S7388C1[] = {
  ABISELECT(8896,6452),
  ABISELECT(6960,5048),
  ABISELECT(6576,4756),
  ABISELECT(3376,2412),
  ABISELECT(2928,2132),
  ABISELECT(2576,1872),
  ABISELECT(1760,1276),
  ABISELECT(1536,1108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&_ZN7S7388C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  ABISELECT(3312,2368),
  ABISELECT(1472,1064),
  ABISELECT(2864,2088),
  ABISELECT(2512,1828),
  ABISELECT(1696,1232),
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7388C1D1Ev,_ZThn44_N7S7388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7388C1D0Ev,_ZThn44_N7S7388C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7388C42v8Ev,
  ABISELECT(816,596),
  ABISELECT(-1760,-1276),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  0,
  0,
  0,
  ABISELECT(-2576,-1872),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  0,
  0,
  ABISELECT(-2928,-2132),
  ABISELECT(448,280),
  ABISELECT(-1392,-1024),
  ABISELECT(-2928,-2132),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7388C1D1Ev,_ZTv0_n20_N7S7388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7388C1D0Ev,_ZTv0_n20_N7S7388C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7388C92v7Ev,
  ABISELECT(-2992,-2176),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7388C1D1Ev,_ZTvn44_n20_N7S7388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7388C1D0Ev,_ZTvn44_n20_N7S7388C1D0Ev),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-3376,-2412),
  ABISELECT(-1840,-1304),
  ABISELECT(-3376,-2412),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C1D1Ev,_ZTv0_n16_N7S7388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C1D0Ev,_ZTv0_n16_N7S7388C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-4784,-3456),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(-3696,-2660),
  ABISELECT(-5232,-3768),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C1D1Ev,_ZTvn1356_n16_N7S7388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C1D0Ev,_ZTvn1356_n16_N7S7388C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  0,
  0,
  0,
  ABISELECT(-5040,-3648),
  ABISELECT(-6576,-4756),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-6960,-5048),
  ABISELECT(1936,1404),
  ABISELECT(-384,-292),
  ABISELECT(-4384,-3176),
  ABISELECT(-5424,-3940),
  ABISELECT(-6960,-5048),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7388C1D1Ev,_ZTv0_n28_N7S7388C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7388C1D0Ev,_ZTv0_n28_N7S7388C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
  ABISELECT(-8368,-6092),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
  ABISELECT(-7360,-5344),
  ABISELECT(-8896,-6452),
  (VTBL_ENTRY)&(_ZTI7S7388C1[0]),
};
extern VTBL_ENTRY _ZTV7S7388C1[];
extern void _ZN7S7388C2D1Ev();
extern void _ZN7S7388C2D0Ev();
extern void _ZN7S7388C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C2__7S7388C1[] = {
  ABISELECT(1536,1108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C2[0]),
  (VTBL_ENTRY)&_ZN7S7388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
};
extern void _ZN7S7388C4D1Ev();
extern void _ZN7S7388C4D0Ev();
extern void _ZN7S7388C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C4__7S7388C1[] = {
  ABISELECT(3312,2368),
  ABISELECT(1472,1064),
  ABISELECT(2864,2088),
  ABISELECT(2512,1828),
  ABISELECT(1696,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&_ZN7S7388C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C42v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7388C5__7S7388C4__7S7388C1[] = {
  ABISELECT(816,596),
  ABISELECT(-1696,-1232),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C6__7S7388C4__7S7388C1[] = {
  0,
  0,
  0,
  ABISELECT(-2512,-1828),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7388C4D1Ev,_ZTv0_n20_N7S7388C4D1Ev)();
extern void ABISELECT(_ZThn2864_N7S7388C4D1Ev,_ZThn2088_N7S7388C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7388C4D0Ev,_ZTv0_n20_N7S7388C4D0Ev)();
extern void ABISELECT(_ZThn2864_N7S7388C4D0Ev,_ZThn2088_N7S7388C4D0Ev)() __attribute__((weak));
extern void _ZN7S7388C22v1Ev();
extern void _ZN7S7388C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C9__7S7388C4__7S7388C1[] = {
  0,
  0,
  ABISELECT(-2864,-2088),
  ABISELECT(448,280),
  ABISELECT(-1392,-1024),
  ABISELECT(-2864,-2088),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7388C4D1Ev,_ZTv0_n20_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7388C4D0Ev,_ZTv0_n20_N7S7388C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7388C92v7Ev,
};
extern void ABISELECT(_ZTvn64_n40_N7S7388C4D1Ev,_ZTvn44_n20_N7S7388C4D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S7388C4D0Ev,_ZTvn44_n20_N7S7388C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20570C177S7388C9__7S7388C4__7S7388C1[] = {
  ABISELECT(-2928,-2132),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7388C4D1Ev,_ZTvn44_n20_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7388C4D0Ev,_ZTvn44_n20_N7S7388C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7388C4D1Ev,_ZTv0_n16_N7S7388C4D1Ev)();
extern void ABISELECT(_ZThn3312_N7S7388C4D1Ev,_ZThn2368_N7S7388C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7388C4D0Ev,_ZTv0_n16_N7S7388C4D0Ev)();
extern void ABISELECT(_ZThn3312_N7S7388C4D0Ev,_ZThn2368_N7S7388C4D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C11__7S7388C4__7S7388C1[] = {
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-3312,-2368),
  ABISELECT(-1840,-1304),
  ABISELECT(-3312,-2368),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C4D1Ev,_ZTv0_n16_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C4D0Ev,_ZTv0_n16_N7S7388C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C68S7388C128S7388C11__A1__7S7388C4__7S7388C1[] = {
  ABISELECT(-4720,-3412),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void ABISELECT(_ZTvn1856_n32_N7S7388C4D1Ev,_ZTvn1356_n16_N7S7388C4D1Ev)();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C4D0Ev,_ZTvn1356_n16_N7S7388C4D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C11__A1__7S7388C4__7S7388C1[] = {
  ABISELECT(-3696,-2660),
  ABISELECT(-5168,-3724),
  (VTBL_ENTRY)&(_ZTI7S7388C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C4D1Ev,_ZTvn1356_n16_N7S7388C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C4D0Ev,_ZTvn1356_n16_N7S7388C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7388C5__7S7388C1[] = {
  ABISELECT(816,596),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C5[0]),
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C6__7S7388C5__7S7388C1[] = {
  0,
  0,
  0,
  ABISELECT(-816,-596),
  (VTBL_ENTRY)&(_ZTI7S7388C5[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void _ZN7S7388C9D1Ev();
extern void _ZN7S7388C9D0Ev();
extern void _ZN7S7388C22v1Ev();
extern void _ZN7S7388C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C9__7S7388C1[] = {
  ABISELECT(448,280),
  ABISELECT(-1392,-1024),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&_ZN7S7388C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7388C92v7Ev,
};
extern void _ZN7S7388C2D1Ev();
extern void _ZN7S7388C2D0Ev();
extern void _ZN7S7388C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C27S7388C9__A1__7S7388C1[] = {
  ABISELECT(-1392,-1024),
  0,
  (VTBL_ENTRY)&(_ZTI7S7388C2[0]),
  (VTBL_ENTRY)&_ZN7S7388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7388C22v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev)();
extern void ABISELECT(_ZThn448_N7S7388C9D1Ev,_ZThn280_N7S7388C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev)();
extern void ABISELECT(_ZThn448_N7S7388C9D0Ev,_ZThn280_N7S7388C9D0Ev)() __attribute__((weak));
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C11__7S7388C9__7S7388C1[] = {
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-448,-280),
  ABISELECT(-1840,-1304),
  ABISELECT(-448,-280),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C68S7388C128S7388C11__7S7388C9__7S7388C1[] = {
  ABISELECT(-1856,-1324),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void ABISELECT(_ZTvn1856_n32_N7S7388C9D1Ev,_ZTvn1356_n16_N7S7388C9D1Ev)();
extern void ABISELECT(_ZTvn1856_n32_N7S7388C9D0Ev,_ZTvn1356_n16_N7S7388C9D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C11__A1__7S7388C9__7S7388C1[] = {
  ABISELECT(-3696,-2660),
  ABISELECT(-2304,-1636),
  (VTBL_ENTRY)&(_ZTI7S7388C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C9D1Ev,_ZTvn1356_n16_N7S7388C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1856_n32_N7S7388C9D0Ev,_ZTvn1356_n16_N7S7388C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN8S7388C11D1Ev();
extern void _ZN8S7388C11D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C11__7S7388C1[] = {
  ABISELECT(-1840,-1304),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&_ZN8S7388C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C128S7388C11__7S7388C1[] = {
  ABISELECT(-1840,-1304),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C128S7388C11__7S7388C1[] = {
  ABISELECT(-1840,-1304),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C11__A1__7S7388C1[] = {
  ABISELECT(-3696,-2660),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev)();
extern void ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev)();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C13__A1__8S7388C11__7S7388C1[] = {
  ABISELECT(-3696,-2660),
  ABISELECT(-1856,-1356),
  (VTBL_ENTRY)&(_ZTI8S7388C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D1Ev,_ZThn1356_N8S7388C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1856_N8S7388C11D0Ev,_ZThn1356_N8S7388C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C15__7S7388C1[] = {
  ABISELECT(-5040,-3648),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C15[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void _ZN8S7388C17D1Ev();
extern void _ZN8S7388C17D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C17__7S7388C1[] = {
  ABISELECT(1936,1404),
  ABISELECT(-384,-292),
  ABISELECT(-4384,-3176),
  ABISELECT(-5424,-3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN8S7388C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C17D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C12D1Ev();
extern void _ZN8S7388C12D0Ev();
extern void _ZN8S7388C132v5Ev();
extern void _ZN8S7388C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C128S7388C17__A1__7S7388C1[] = {
  ABISELECT(-5424,-3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C12[0]),
  (VTBL_ENTRY)&_ZN8S7388C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7388C122v6Ev,
};
extern void _ZN8S7388C13D1Ev();
extern void _ZN8S7388C13D0Ev();
extern void _ZN8S7388C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C138S7388C128S7388C17__A2__7S7388C1[] = {
  ABISELECT(-5424,-3940),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C13[0]),
  (VTBL_ENTRY)&_ZN8S7388C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7388C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7388C132v5Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7388C6__8S7388C17__7S7388C1[] = {
  0,
  0,
  0,
  ABISELECT(4384,3176),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
extern void _ZN7S7388C62v2Ev();
extern void _ZN7S7388C62v3Ev();
extern void _ZN7S7388C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7388C15__8S7388C17__7S7388C1[] = {
  0,
  0,
  0,
  ABISELECT(-5040,-3648),
  ABISELECT(384,292),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
  (VTBL_ENTRY)&_ZN7S7388C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7388C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7388C18__8S7388C17__7S7388C1[] = {
  ABISELECT(-7360,-5344),
  ABISELECT(-1936,-1404),
  (VTBL_ENTRY)&(_ZTI8S7388C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7388C18__7S7388C1[] = {
  ABISELECT(-7360,-5344),
  0,
  (VTBL_ENTRY)&(_ZTI8S7388C18[0]),
};
static  VTT_ENTRY vtt_S7388C1[] = {
  {&(_ZTV7S7388C1[10]),  10,106},
  {&(_tg__ZTV7S7388C2__7S7388C1[3]),  3,6},
  {&(_tg__ZTV7S7388C4__7S7388C1[7]),  7,10},
  {&(_tg__ZTV7S7388C5__7S7388C4__7S7388C1[3]),  3,3},
  {&(_tg__ZTV7S7388C6__7S7388C4__7S7388C1[5]),  5,8},
  {&(_tg__ZTV7S7388C9__7S7388C4__7S7388C1[7]),  7,11},
  {&(_tg__ZTV9S20570C177S7388C9__7S7388C4__7S7388C1[2]),  2,4},
  {&(_tg__ZTV8S7388C11__7S7388C4__7S7388C1[9]),  9,13},
  {&(_tg__ZTV7S7388C68S7388C128S7388C11__A1__7S7388C4__7S7388C1[2]),  2,5},
  {&(_tg__ZTV8S7388C138S7388C11__A1__7S7388C4__7S7388C1[3]),  3,6},
  {&(_ZTV7S7388C1[20]),  20,106},
  {&(_ZTV7S7388C1[26]),  26,106},
  {&(_ZTV7S7388C1[31]),  31,106},
  {&(_ZTV7S7388C1[41]),  41,106},
  {&(_ZTV7S7388C1[47]),  47,106},
  {&(_ZTV7S7388C1[58]),  58,106},
  {&(_ZTV7S7388C1[64]),  64,106},
  {&(_ZTV7S7388C1[70]),  70,106},
  {&(_ZTV7S7388C1[79]),  79,106},
  {&(_ZTV7S7388C1[94]),  94,106},
  {&(_ZTV7S7388C1[100]),  100,106},
  {&(_ZTV7S7388C1[106]),  106,106},
  {&(_tg__ZTV7S7388C5__7S7388C1[3]),  3,3},
  {&(_tg__ZTV7S7388C6__7S7388C5__7S7388C1[5]),  5,8},
  {&(_tg__ZTV7S7388C9__7S7388C1[4]),  4,8},
  {&(_tg__ZTV7S7388C27S7388C9__A1__7S7388C1[3]),  3,6},
  {&(_tg__ZTV8S7388C11__7S7388C9__7S7388C1[9]),  9,13},
  {&(_tg__ZTV7S7388C68S7388C128S7388C11__7S7388C9__7S7388C1[2]),  2,5},
  {&(_tg__ZTV8S7388C138S7388C11__A1__7S7388C9__7S7388C1[3]),  3,6},
  {&(_tg__ZTV8S7388C11__7S7388C1[3]),  3,7},
  {&(_tg__ZTV8S7388C128S7388C11__7S7388C1[3]),  3,7},
  {&(_tg__ZTV8S7388C138S7388C128S7388C11__7S7388C1[3]),  3,6},
  {&(_tg__ZTV8S7388C138S7388C11__A1__7S7388C1[3]),  3,6},
  {&(_tg__ZTV8S7388C13__A1__8S7388C11__7S7388C1[3]),  3,6},
  {&(_tg__ZTV8S7388C15__7S7388C1[3]),  3,6},
  {&(_tg__ZTV8S7388C17__7S7388C1[6]),  6,10},
  {&(_tg__ZTV8S7388C128S7388C17__A1__7S7388C1[3]),  3,7},
  {&(_tg__ZTV8S7388C138S7388C128S7388C17__A2__7S7388C1[3]),  3,6},
  {&(_tg__ZTV7S7388C6__8S7388C17__7S7388C1[5]),  5,8},
  {&(_tg__ZTV8S7388C15__8S7388C17__7S7388C1[6]),  6,9},
  {&(_tg__ZTV8S7388C18__8S7388C17__7S7388C1[3]),  3,3},
  {&(_tg__ZTV8S7388C18__7S7388C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7388C1[];
extern  VTBL_ENTRY _ZTV7S7388C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7388C1[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C9D0Ev,_ZTv0_n16_N7S7388C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7388C9D0Ev,_ZThn280_N7S7388C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C9D1Ev,_ZTv0_n16_N7S7388C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7388C9D1Ev,_ZThn280_N7S7388C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C4D0Ev,_ZTv0_n16_N7S7388C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3312_N7S7388C4D0Ev,_ZThn2368_N7S7388C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C4D1Ev,_ZTv0_n16_N7S7388C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3312_N7S7388C4D1Ev,_ZThn2368_N7S7388C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7388C4D0Ev,_ZTv0_n20_N7S7388C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2864_N7S7388C4D0Ev,_ZThn2088_N7S7388C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7388C4D1Ev,_ZTv0_n20_N7S7388C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2864_N7S7388C4D1Ev,_ZThn2088_N7S7388C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7388C1D0Ev,_ZTv0_n28_N7S7388C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6960_N7S7388C1D0Ev,_ZThn5048_N7S7388C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7388C1D1Ev,_ZTv0_n28_N7S7388C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6960_N7S7388C1D1Ev,_ZThn5048_N7S7388C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C1D0Ev,_ZTv0_n16_N7S7388C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3376_N7S7388C1D0Ev,_ZThn2412_N7S7388C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7388C1D1Ev,_ZTv0_n16_N7S7388C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3376_N7S7388C1D1Ev,_ZThn2412_N7S7388C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7388C1D0Ev,_ZTv0_n20_N7S7388C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7388C1D0Ev,_ZThn2132_N7S7388C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7388C1D1Ev,_ZTv0_n20_N7S7388C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7388C1D1Ev,_ZThn2132_N7S7388C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7388C1 = {  "S7388C1", // class name
  bases_S7388C1, 27,
  &(vtc_S7388C1[0]), // expected_vtbl_contents
  &(vtt_S7388C1[0]), // expected_vtt_contents
  ABISELECT(9296,6732), // object size
  NSPAIRA(_ZTI7S7388C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7388C1),106, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7388C1),42, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C4  : virtual S20570C5 {
  __tsi64 s20571c4f0[4];
  short s20571c4f1;
  int s20571c4f2;
  __tsi64 s20571c4f3;
  int s20571c4f4;
  virtual  ~S20571C4(); // _ZN8S20571C4D2Ev
  virtual void  v4(); // _ZN8S20571C42v4Ev
  S20571C4(); // tgen
};
//SIG(-1 S20571C4) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FL[4] Fs Fi FL Fi}


 S20571C4 ::~S20571C4(){ note_dtor("S20571C4", this);}
void  S20571C4 ::v4(){vfunc_called(this, "_ZN8S20571C42v4Ev");}
S20571C4 ::S20571C4(){ note_ctor("S20571C4", this);} // tgen

static void Test_S20571C4()
{
  extern Class_Descriptor cd_S20571C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,57)];
    init_test(&cd_S20571C4, buf);
    S20571C4 *dp, &lv = *(dp=new (buf) S20571C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,224), "sizeof(S20571C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C4)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(64,56), "S20571C4");
    check_field_offset(lv, s20571c4f0, ABISELECT(8,4), "S20571C4.s20571c4f0");
    check_field_offset(lv, s20571c4f1, ABISELECT(40,36), "S20571C4.s20571c4f1");
    check_field_offset(lv, s20571c4f2, ABISELECT(44,40), "S20571C4.s20571c4f2");
    check_field_offset(lv, s20571c4f3, ABISELECT(48,44), "S20571C4.s20571c4f3");
    check_field_offset(lv, s20571c4f4, ABISELECT(56,52), "S20571C4.s20571c4f4");
    test_class_info(&lv, &cd_S20571C4);
    dp->~S20571C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C4(Test_S20571C4, "S20571C4", ABISELECT(288,224));

#else // __cplusplus

extern void _ZN8S20571C4C1Ev();
extern void _ZN8S20571C4D2Ev();
Name_Map name_map_S20571C4[] = {
  NSPAIR(_ZN8S20571C4C1Ev),
  NSPAIR(_ZN8S20571C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20571C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C4[];
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY vtc_S20571C4[] = {
  ABISELECT(64,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20571C4[];
static  VTT_ENTRY vtt_S20571C4[] = {
  {&(_ZTV8S20571C4[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
Class_Descriptor cd_S20571C4 = {  "S20571C4", // class name
  bases_S20571C4, 1,
  &(vtc_S20571C4[0]), // expected_vtbl_contents
  &(vtt_S20571C4[0]), // expected_vtt_contents
  ABISELECT(288,224), // object size
  NSPAIRA(_ZTI8S20571C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20571C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C3  : S20571C4 {
  int s20571c3f0;
  void *s20571c3f1;
  int s20571c3f2;
  long double s20571c3f3[9];
  long s20571c3f4;
  int s20571c3f5;
  __tsi64 s20571c3f6;
  void *s20571c3f7[5];
  __tsi64 s20571c3f8;
  virtual void  v5(); // _ZN8S20571C32v5Ev
  virtual void  v6(); // _ZN8S20571C32v6Ev
  ~S20571C3(); // tgen
  S20571C3(); // tgen
};
//SIG(-1 S20571C3) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v3 FL[4] Fs Fi FL Fi} v1 v2 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL}


void  S20571C3 ::v5(){vfunc_called(this, "_ZN8S20571C32v5Ev");}
void  S20571C3 ::v6(){vfunc_called(this, "_ZN8S20571C32v6Ev");}
S20571C3 ::~S20571C3(){ note_dtor("S20571C3", this);} // tgen
S20571C3 ::S20571C3(){ note_ctor("S20571C3", this);} // tgen

static void Test_S20571C3()
{
  extern Class_Descriptor cd_S20571C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,98)];
    init_test(&cd_S20571C3, buf);
    S20571C3 *dp, &lv = *(dp=new (buf) S20571C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,388), "sizeof(S20571C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C3)");
    check_base_class_offset(lv, (S20570C5*)(S20571C4*), ABISELECT(304,220), "S20571C3");
    check_base_class_offset(lv, (S20571C4*), 0, "S20571C3");
    check_field_offset(lv, s20571c3f0, ABISELECT(60,56), "S20571C3.s20571c3f0");
    check_field_offset(lv, s20571c3f1, ABISELECT(64,60), "S20571C3.s20571c3f1");
    check_field_offset(lv, s20571c3f2, ABISELECT(72,64), "S20571C3.s20571c3f2");
    check_field_offset(lv, s20571c3f3, ABISELECT(80,68), "S20571C3.s20571c3f3");
    check_field_offset(lv, s20571c3f4, ABISELECT(224,176), "S20571C3.s20571c3f4");
    check_field_offset(lv, s20571c3f5, ABISELECT(232,180), "S20571C3.s20571c3f5");
    check_field_offset(lv, s20571c3f6, ABISELECT(240,184), "S20571C3.s20571c3f6");
    check_field_offset(lv, s20571c3f7, ABISELECT(248,192), "S20571C3.s20571c3f7");
    check_field_offset(lv, s20571c3f8, ABISELECT(288,212), "S20571C3.s20571c3f8");
    test_class_info(&lv, &cd_S20571C3);
    dp->~S20571C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C3(Test_S20571C3, "S20571C3", ABISELECT(528,388));

#else // __cplusplus

extern void _ZN8S20571C3C1Ev();
extern void _ZN8S20571C3D1Ev();
Name_Map name_map_S20571C3[] = {
  NSPAIR(_ZN8S20571C3C1Ev),
  NSPAIR(_ZN8S20571C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
static Base_Class bases_S20571C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(304,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20571C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C3[];
extern void _ZN8S20571C3D1Ev();
extern void _ZN8S20571C3D0Ev();
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C32v5Ev();
extern void _ZN8S20571C32v6Ev();
static  VTBL_ENTRY vtc_S20571C3[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C3[0]),
  (VTBL_ENTRY)&_ZN8S20571C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v6Ev,
};
extern VTBL_ENTRY _ZTV8S20571C3[];
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C4__8S20571C3[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
static  VTT_ENTRY vtt_S20571C3[] = {
  {&(_ZTV8S20571C3[3]),  3,8},
  {&(_tg__ZTV8S20571C4__8S20571C3[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20571C3[];
extern  VTBL_ENTRY _ZTV8S20571C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C3[];
Class_Descriptor cd_S20571C3 = {  "S20571C3", // class name
  bases_S20571C3, 2,
  &(vtc_S20571C3[0]), // expected_vtbl_contents
  &(vtt_S20571C3[0]), // expected_vtt_contents
  ABISELECT(528,388), // object size
  NSPAIRA(_ZTI8S20571C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20571C3),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C2  : virtual S20571C3 {
  int s20571c2f0:26;
  char s20571c2f1[2];
  virtual  ~S20571C2(); // _ZN8S20571C2D2Ev
  virtual void  v7(); // _ZN8S20571C22v7Ev
  S20571C2(); // tgen
};
//SIG(-1 S20571C2) C1{ VBC2{ BC3{ VBC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FL[4] Fs Fi FL Fi} v3 v4 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v1 Fi:26 Fc[2]}


 S20571C2 ::~S20571C2(){ note_dtor("S20571C2", this);}
void  S20571C2 ::v7(){vfunc_called(this, "_ZN8S20571C22v7Ev");}
S20571C2 ::S20571C2(){ note_ctor("S20571C2", this);} // tgen

static void Test_S20571C2()
{
  extern Class_Descriptor cd_S20571C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(35,101)];
    init_test(&cd_S20571C2, buf);
    S20571C2 *dp, &lv = *(dp=new (buf) S20571C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,400), "sizeof(S20571C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C2)");
    check_base_class_offset(lv, (S20570C5*)(S20571C4*)(S20571C3*), ABISELECT(320,232), "S20571C2");
    check_base_class_offset(lv, (S20571C4*)(S20571C3*), ABISELECT(16,12), "S20571C2");
    check_base_class_offset(lv, (S20571C3*), ABISELECT(16,12), "S20571C2");
    set_bf_and_test(lv, s20571c2f0, ABISELECT(8,4), 0, 26, 1, "S20571C2");
    set_bf_and_test(lv, s20571c2f0, ABISELECT(8,4), 0, 26, hide_sll(1LL<<25), "S20571C2");
    check_field_offset(lv, s20571c2f1, ABISELECT(12,8), "S20571C2.s20571c2f1");
    test_class_info(&lv, &cd_S20571C2);
    dp->~S20571C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C2(Test_S20571C2, "S20571C2", ABISELECT(544,400));

#else // __cplusplus

extern void _ZN8S20571C2C1Ev();
extern void _ZN8S20571C2D2Ev();
Name_Map name_map_S20571C2[] = {
  NSPAIR(_ZN8S20571C2C1Ev),
  NSPAIR(_ZN8S20571C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
extern Class_Descriptor cd_S20571C3;
extern VTBL_ENTRY _ZTI8S20571C3[];
extern  VTBL_ENTRY _ZTV8S20571C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C3[];
static Base_Class bases_S20571C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(320,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20571C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20571C3,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C2[];
extern void _ZN8S20571C2D1Ev();
extern void _ZN8S20571C2D0Ev();
extern void _ZN8S20571C22v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S20571C2D1Ev,_ZTv0_n16_N8S20571C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20571C2D1Ev,_ZThn12_N8S20571C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20571C2D0Ev,_ZTv0_n16_N8S20571C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20571C2D0Ev,_ZThn12_N8S20571C2D0Ev)() __attribute__((weak));
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C32v5Ev();
extern void _ZN8S20571C32v6Ev();
static  VTBL_ENTRY vtc_S20571C2[] = {
  ABISELECT(320,232),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C2[0]),
  (VTBL_ENTRY)&_ZN8S20571C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(304,220),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20571C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C2D1Ev,_ZTv0_n16_N8S20571C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C2D0Ev,_ZTv0_n16_N8S20571C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v6Ev,
};
extern VTBL_ENTRY _ZTV8S20571C2[];
extern void _ZN8S20571C3D1Ev();
extern void _ZN8S20571C3D0Ev();
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C32v5Ev();
extern void _ZN8S20571C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C3__8S20571C2[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C3[0]),
  (VTBL_ENTRY)&_ZN8S20571C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v6Ev,
};
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C48S20571C3__8S20571C2[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
static  VTT_ENTRY vtt_S20571C2[] = {
  {&(_ZTV8S20571C2[4]),  4,19},
  {&(_ZTV8S20571C2[14]),  14,19},
  {&(_tg__ZTV8S20571C3__8S20571C2[3]),  3,8},
  {&(_tg__ZTV8S20571C48S20571C3__8S20571C2[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20571C2[];
extern  VTBL_ENTRY _ZTV8S20571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C2[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20571C2D0Ev,_ZTv0_n16_N8S20571C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20571C2D0Ev,_ZThn12_N8S20571C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20571C2D1Ev,_ZTv0_n16_N8S20571C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20571C2D1Ev,_ZThn12_N8S20571C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20571C2 = {  "S20571C2", // class name
  bases_S20571C2, 3,
  &(vtc_S20571C2[0]), // expected_vtbl_contents
  &(vtt_S20571C2[0]), // expected_vtt_contents
  ABISELECT(544,400), // object size
  NSPAIRA(_ZTI8S20571C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20571C2),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C7  : S20570C5 {
  long double s20571c7f0;
  short s20571c7f1:16;
  int s20571c7f2[7];
  long double s20571c7f3;
  char s20571c7f4:6;
  int s20571c7f5:32;
  __tsi64 s20571c7f6[2];
  int s20571c7f7;
  virtual void  v9(); // _ZN8S20571C72v9Ev
  virtual void  v10(); // _ZN8S20571C73v10Ev
  virtual void  v11(); // _ZN8S20571C73v11Ev
  ~S20571C7(); // tgen
  S20571C7(); // tgen
};
//SIG(-1 S20571C7) C1{ BC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi}


void  S20571C7 ::v9(){vfunc_called(this, "_ZN8S20571C72v9Ev");}
void  S20571C7 ::v10(){vfunc_called(this, "_ZN8S20571C73v10Ev");}
void  S20571C7 ::v11(){vfunc_called(this, "_ZN8S20571C73v11Ev");}
S20571C7 ::~S20571C7(){ note_dtor("S20571C7", this);} // tgen
S20571C7 ::S20571C7(){ note_ctor("S20571C7", this);} // tgen

static void Test_S20571C7()
{
  extern Class_Descriptor cd_S20571C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,65)];
    init_test(&cd_S20571C7, buf);
    S20571C7 *dp, &lv = *(dp=new (buf) S20571C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,256), "sizeof(S20571C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C7)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(16,4), "S20571C7");
    check_field_offset(lv, s20571c7f0, ABISELECT(240,172), "S20571C7.s20571c7f0");
    set_bf_and_test(lv, s20571c7f1, ABISELECT(256,184), 0, 16, 1, "S20571C7");
    set_bf_and_test(lv, s20571c7f1, ABISELECT(256,184), 0, 16, hide_sll(1LL<<15), "S20571C7");
    check_field_offset(lv, s20571c7f2, ABISELECT(260,188), "S20571C7.s20571c7f2");
    check_field_offset(lv, s20571c7f3, ABISELECT(288,216), "S20571C7.s20571c7f3");
    set_bf_and_test(lv, s20571c7f4, ABISELECT(304,228), 0, 6, 1, "S20571C7");
    set_bf_and_test(lv, s20571c7f4, ABISELECT(304,228), 0, 6, hide_sll(1LL<<5), "S20571C7");
    set_bf_and_test(lv, s20571c7f5, ABISELECT(308,232), 0, 32, 1, "S20571C7");
    set_bf_and_test(lv, s20571c7f5, ABISELECT(308,232), 0, 32, hide_sll(1LL<<31), "S20571C7");
    check_field_offset(lv, s20571c7f6, ABISELECT(312,236), "S20571C7.s20571c7f6");
    check_field_offset(lv, s20571c7f7, ABISELECT(328,252), "S20571C7.s20571c7f7");
    test_class_info(&lv, &cd_S20571C7);
    dp->~S20571C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C7(Test_S20571C7, "S20571C7", ABISELECT(336,256));

#else // __cplusplus

extern void _ZN8S20571C7C1Ev();
extern void _ZN8S20571C7D1Ev();
Name_Map name_map_S20571C7[] = {
  NSPAIR(_ZN8S20571C7C1Ev),
  NSPAIR(_ZN8S20571C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20571C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C7[];
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY vtc_S20571C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C7[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
Class_Descriptor cd_S20571C7 = {  "S20571C7", // class name
  bases_S20571C7, 1,
  &(vtc_S20571C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,256), // object size
  NSPAIRA(_ZTI8S20571C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20571C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C6  : virtual S20570C5 {
  void *s20571c6f0;
  int s20571c6f1;
  ::S20571C7 s20571c6f2;
  int s20571c6f3;
  void *s20571c6f4;
  ~S20571C6(); // tgen
  S20571C6(); // tgen
};
//SIG(-1 S20571C6) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} Fp Fi FC3{ BC2 v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} Fi Fp}


S20571C6 ::~S20571C6(){ note_dtor("S20571C6", this);} // tgen
S20571C6 ::S20571C6(){ note_ctor("S20571C6", this);} // tgen

static void Test_S20571C6()
{
  extern Class_Descriptor cd_S20571C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,112)];
    init_test(&cd_S20571C6, buf);
    S20571C6 *dp, &lv = *(dp=new (buf) S20571C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,444), "sizeof(S20571C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C6)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(384,276), "S20571C6");
    check_field_offset(lv, s20571c6f0, ABISELECT(8,4), "S20571C6.s20571c6f0");
    check_field_offset(lv, s20571c6f1, ABISELECT(16,8), "S20571C6.s20571c6f1");
    check_field_offset(lv, s20571c6f2, ABISELECT(32,12), "S20571C6.s20571c6f2");
    check_field_offset(lv, s20571c6f3, ABISELECT(368,268), "S20571C6.s20571c6f3");
    check_field_offset(lv, s20571c6f4, ABISELECT(376,272), "S20571C6.s20571c6f4");
    test_class_info(&lv, &cd_S20571C6);
    dp->~S20571C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C6(Test_S20571C6, "S20571C6", ABISELECT(608,444));

#else // __cplusplus

extern void _ZN8S20571C6C1Ev();
extern void _ZN8S20571C6D1Ev();
Name_Map name_map_S20571C6[] = {
  NSPAIR(_ZN8S20571C6C1Ev),
  NSPAIR(_ZN8S20571C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20571C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(384,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C6[];
static  VTBL_ENTRY vtc_S20571C6[] = {
  ABISELECT(384,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C6[0]),
};
extern VTBL_ENTRY _ZTV8S20571C6[];
static  VTT_ENTRY vtt_S20571C6[] = {
  {&(_ZTV8S20571C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20571C6[];
extern  VTBL_ENTRY _ZTV8S20571C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C6[];
Class_Descriptor cd_S20571C6 = {  "S20571C6", // class name
  bases_S20571C6, 1,
  &(vtc_S20571C6[0]), // expected_vtbl_contents
  &(vtt_S20571C6[0]), // expected_vtt_contents
  ABISELECT(608,444), // object size
  NSPAIRA(_ZTI8S20571C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20571C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C10  : virtual S20570C5 {
  ::S20570C5 s20571c10f0[5];
  __tsi64 s20571c10f1;
  short s20571c10f2:5;
  char  :0;
  void *s20571c10f4[2];
  int s20571c10f5;
  __tsi64 s20571c10f6;
  virtual  ~S20571C10(); // _ZN9S20571C10D2Ev
  virtual void  v8(); // _ZN9S20571C102v8Ev
  S20571C10(); // tgen
};
//SIG(-1 S20571C10) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL}


 S20571C10 ::~S20571C10(){ note_dtor("S20571C10", this);}
void  S20571C10 ::v8(){vfunc_called(this, "_ZN9S20571C102v8Ev");}
S20571C10 ::S20571C10(){ note_ctor("S20571C10", this);} // tgen

static void Test_S20571C10()
{
  extern Class_Descriptor cd_S20571C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(89,262)];
    init_test(&cd_S20571C10, buf);
    S20571C10 *dp, &lv = *(dp=new (buf) S20571C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1408,1044), "sizeof(S20571C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C10)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S20571C10");
    check_field_offset(lv, s20571c10f0, ABISELECT(16,4), "S20571C10.s20571c10f0");
    check_field_offset(lv, s20571c10f1, ABISELECT(1136,844), "S20571C10.s20571c10f1");
    set_bf_and_test(lv, s20571c10f2, ABISELECT(1144,852), 0, 5, 1, "S20571C10");
    set_bf_and_test(lv, s20571c10f2, ABISELECT(1144,852), 0, 5, hide_sll(1LL<<4), "S20571C10");
    check_field_offset(lv, s20571c10f4, ABISELECT(1152,856), "S20571C10.s20571c10f4");
    check_field_offset(lv, s20571c10f5, ABISELECT(1168,864), "S20571C10.s20571c10f5");
    check_field_offset(lv, s20571c10f6, ABISELECT(1176,868), "S20571C10.s20571c10f6");
    test_class_info(&lv, &cd_S20571C10);
    dp->~S20571C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C10(Test_S20571C10, "S20571C10", ABISELECT(1408,1044));

#else // __cplusplus

extern void _ZN9S20571C10C1Ev();
extern void _ZN9S20571C10D2Ev();
Name_Map name_map_S20571C10[] = {
  NSPAIR(_ZN9S20571C10C1Ev),
  NSPAIR(_ZN9S20571C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20571C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C10[];
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY vtc_S20571C10[] = {
  ABISELECT(1184,876),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern VTBL_ENTRY _ZTV9S20571C10[];
static  VTT_ENTRY vtt_S20571C10[] = {
  {&(_ZTV9S20571C10[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
Class_Descriptor cd_S20571C10 = {  "S20571C10", // class name
  bases_S20571C10, 1,
  &(vtc_S20571C10[0]), // expected_vtbl_contents
  &(vtt_S20571C10[0]), // expected_vtt_contents
  ABISELECT(1408,1044), // object size
  NSPAIRA(_ZTI9S20571C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20571C10),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C10),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C9  : S20571C10 , S20570C5 , S20571C7 {
  long double s20571c9f0;
  void *s20571c9f1;
  short s20571c9f2[6];
  void *s20571c9f3;
  int s20571c9f4;
  long double s20571c9f5;
  int s20571c9f6;
  virtual void  v12(); // _ZN8S20571C93v12Ev
  ~S20571C9(); // tgen
  S20571C9(); // tgen
};
//SIG(-1 S20571C9) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC4{ BC3 v3 v4 v5 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} v1 FD Fp Fs[6] Fp Fi FD Fi}


void  S20571C9 ::v12(){vfunc_called(this, "_ZN8S20571C93v12Ev");}
S20571C9 ::~S20571C9(){ note_dtor("S20571C9", this);} // tgen
S20571C9 ::S20571C9(){ note_ctor("S20571C9", this);} // tgen

static void Test_S20571C9()
{
  extern Class_Descriptor cd_S20571C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(130,381)];
    init_test(&cd_S20571C9, buf);
    S20571C9 *dp, &lv = *(dp=new (buf) S20571C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2064,1520), "sizeof(S20571C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C9)");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*), ABISELECT(1840,1352), "S20571C9");
    check_base_class_offset(lv, (S20571C10*), 0, "S20571C9");
    /*is_ambiguous_... S20571C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S20571C9");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*), ABISELECT(1424,1048), "S20571C9");
    check_base_class_offset(lv, (S20571C7*), ABISELECT(1408,1044), "S20571C9");
    check_field_offset(lv, s20571c9f0, ABISELECT(1744,1300), "S20571C9.s20571c9f0");
    check_field_offset(lv, s20571c9f1, ABISELECT(1760,1312), "S20571C9.s20571c9f1");
    check_field_offset(lv, s20571c9f2, ABISELECT(1768,1316), "S20571C9.s20571c9f2");
    check_field_offset(lv, s20571c9f3, ABISELECT(1784,1328), "S20571C9.s20571c9f3");
    check_field_offset(lv, s20571c9f4, ABISELECT(1792,1332), "S20571C9.s20571c9f4");
    check_field_offset(lv, s20571c9f5, ABISELECT(1808,1336), "S20571C9.s20571c9f5");
    check_field_offset(lv, s20571c9f6, ABISELECT(1824,1348), "S20571C9.s20571c9f6");
    test_class_info(&lv, &cd_S20571C9);
    dp->~S20571C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C9(Test_S20571C9, "S20571C9", ABISELECT(2064,1520));

#else // __cplusplus

extern void _ZN8S20571C9C1Ev();
extern void _ZN8S20571C9D1Ev();
Name_Map name_map_S20571C9[] = {
  NSPAIR(_ZN8S20571C9C1Ev),
  NSPAIR(_ZN8S20571C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
static Base_Class bases_S20571C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1840,1352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C9[];
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY vtc_S20571C9[] = {
  ABISELECT(1840,1352),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern VTBL_ENTRY _ZTV8S20571C9[];
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C10__8S20571C9[] = {
  ABISELECT(1840,1352),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
static  VTT_ENTRY vtt_S20571C9[] = {
  {&(_ZTV8S20571C9[3]),  3,12},
  {&(_tg__ZTV9S20571C10__8S20571C9[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
Class_Descriptor cd_S20571C9 = {  "S20571C9", // class name
  bases_S20571C9, 5,
  &(vtc_S20571C9[0]), // expected_vtbl_contents
  &(vtt_S20571C9[0]), // expected_vtt_contents
  ABISELECT(2064,1520), // object size
  NSPAIRA(_ZTI8S20571C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20571C9),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C8  : virtual S20570C5 , S20571C9 , S20571C10 {
  long double s20571c8f0[9];
  short s20571c8f1;
  virtual  ~S20571C8(); // _ZN8S20571C8D2Ev
  S20571C8(); // tgen
};
//SIG(-1 S20571C8) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} BC3{ BC4{ VBC2 vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC2 BC5{ BC2 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} v5 FD Fp Fs[6] Fp Fi FD Fi} BC4 vd FD[9] Fs}


 S20571C8 ::~S20571C8(){ note_dtor("S20571C8", this);}
S20571C8 ::S20571C8(){ note_ctor("S20571C8", this);} // tgen

static void Test_S20571C8()
{
  extern Class_Descriptor cd_S20571C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(214,628)];
    init_test(&cd_S20571C8, buf);
    S20571C8 *dp, &lv = *(dp=new (buf) S20571C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3408,2508), "sizeof(S20571C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C8)");
    /*is_ambiguous_... S20571C8::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(3184,2340), "S20571C8");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C9*), ABISELECT(3184,2340), "S20571C8");
    /*is_ambiguous_... S20571C8::S20571C10 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C10*), ABISELECT(3184,2340), "S20571C8");
    check_base_class_offset(lv, (S20571C10*)(S20571C9*), 0, "S20571C8");
    /*is_ambiguous_... S20571C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C9*), ABISELECT(1184,876), "S20571C8");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C9*), ABISELECT(1424,1048), "S20571C8");
    check_base_class_offset(lv, (S20571C7*)(S20571C9*), ABISELECT(1408,1044), "S20571C8");
    check_base_class_offset(lv, (S20571C9*), 0, "S20571C8");
    /*is_ambiguous_... S20571C8::S20571C10 */ AMB_check_base_class_offset(lv, (S20571C10*), ABISELECT(1840,1352), "S20571C8");
    check_field_offset(lv, s20571c8f0, ABISELECT(3024,2228), "S20571C8.s20571c8f0");
    check_field_offset(lv, s20571c8f1, ABISELECT(3168,2336), "S20571C8.s20571c8f1");
    test_class_info(&lv, &cd_S20571C8);
    dp->~S20571C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C8(Test_S20571C8, "S20571C8", ABISELECT(3408,2508));

#else // __cplusplus

extern void _ZN8S20571C8C1Ev();
extern void _ZN8S20571C8D2Ev();
Name_Map name_map_S20571C8[] = {
  NSPAIR(_ZN8S20571C8C1Ev),
  NSPAIR(_ZN8S20571C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C9;
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
static Base_Class bases_S20571C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3184,2340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20571C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C10,    ABISELECT(1840,1352), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C8[];
extern void _ZN8S20571C8D1Ev();
extern void _ZN8S20571C8D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZThn1840_N8S20571C8D1Ev,_ZThn1352_N8S20571C8D1Ev)();
extern void ABISELECT(_ZThn1840_N8S20571C8D0Ev,_ZThn1352_N8S20571C8D0Ev)();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY vtc_S20571C8[] = {
  ABISELECT(3184,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C8[0]),
  (VTBL_ENTRY)&_ZN8S20571C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C8D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S20571C8[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(1344,988),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S20571C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S20571C8D1Ev,_ZThn1352_N8S20571C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S20571C8D0Ev,_ZThn1352_N8S20571C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern VTBL_ENTRY _ZTV8S20571C8[];
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C9__8S20571C8[] = {
  ABISELECT(3184,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C9__8S20571C8[] = {
  ABISELECT(3184,2340),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C10__A1__8S20571C8[] = {
  ABISELECT(1344,988),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
static  VTT_ENTRY vtt_S20571C8[] = {
  {&(_ZTV8S20571C8[3]),  3,18},
  {&(_tg__ZTV8S20571C9__8S20571C8[3]),  3,7},
  {&(_tg__ZTV9S20571C108S20571C9__8S20571C8[3]),  3,6},
  {&(_tg__ZTV9S20571C10__A1__8S20571C8[3]),  3,6},
  {&(_ZTV8S20571C8[15]),  15,18},
};
extern VTBL_ENTRY _ZTI8S20571C8[];
extern  VTBL_ENTRY _ZTV8S20571C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C8[];
Class_Descriptor cd_S20571C8 = {  "S20571C8", // class name
  bases_S20571C8, 7,
  &(vtc_S20571C8[0]), // expected_vtbl_contents
  &(vtt_S20571C8[0]), // expected_vtt_contents
  ABISELECT(3408,2508), // object size
  NSPAIRA(_ZTI8S20571C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20571C8),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C8),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C12  : S20571C7 , virtual S20570C5 {
  ::S5217C45 s20571c12f0;
  __tsi64 s20571c12f1;
  int s20571c12f2:23;
  short s20571c12f3;
  int s20571c12f4;
  __tsi64 s20571c12f5[2];
  ~S20571C12(); // tgen
  S20571C12(); // tgen
};
//SIG(-1 S20571C12) C1{ BC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC3 FC4{} FL Fi:23 Fs Fi FL[2]}


S20571C12 ::~S20571C12(){ note_dtor("S20571C12", this);} // tgen
S20571C12 ::S20571C12(){ note_ctor("S20571C12", this);} // tgen

static void Test_S20571C12()
{
  extern Class_Descriptor cd_S20571C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,117)];
    init_test(&cd_S20571C12, buf);
    S20571C12 *dp, &lv = *(dp=new (buf) S20571C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,464), "sizeof(S20571C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C12)");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*), ABISELECT(16,4), "S20571C12");
    check_base_class_offset(lv, (S20571C7*), 0, "S20571C12");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(384,296), "S20571C12");
    check_field_offset(lv, s20571c12f0, ABISELECT(332,256), "S20571C12.s20571c12f0");
    check_field_offset(lv, s20571c12f1, ABISELECT(336,260), "S20571C12.s20571c12f1");
    set_bf_and_test(lv, s20571c12f2, ABISELECT(344,268), 0, 23, 1, "S20571C12");
    set_bf_and_test(lv, s20571c12f2, ABISELECT(344,268), 0, 23, hide_sll(1LL<<22), "S20571C12");
    check_field_offset(lv, s20571c12f3, ABISELECT(348,272), "S20571C12.s20571c12f3");
    check_field_offset(lv, s20571c12f4, ABISELECT(352,276), "S20571C12.s20571c12f4");
    check_field_offset(lv, s20571c12f5, ABISELECT(360,280), "S20571C12.s20571c12f5");
    test_class_info(&lv, &cd_S20571C12);
    dp->~S20571C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C12(Test_S20571C12, "S20571C12", ABISELECT(608,464));

#else // __cplusplus

extern void _ZN9S20571C12C1Ev();
extern void _ZN9S20571C12D1Ev();
Name_Map name_map_S20571C12[] = {
  NSPAIR(_ZN9S20571C12C1Ev),
  NSPAIR(_ZN9S20571C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20571C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20571C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(384,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C12[];
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY vtc_S20571C12[] = {
  ABISELECT(384,296),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern VTBL_ENTRY _ZTV9S20571C12[];
static  VTT_ENTRY vtt_S20571C12[] = {
  {&(_ZTV9S20571C12[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
Class_Descriptor cd_S20571C12 = {  "S20571C12", // class name
  bases_S20571C12, 3,
  &(vtc_S20571C12[0]), // expected_vtbl_contents
  &(vtt_S20571C12[0]), // expected_vtt_contents
  ABISELECT(608,464), // object size
  NSPAIRA(_ZTI9S20571C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20571C12),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C12),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C14  : S20571C10 , S20571C12 , S20571C4 {
  int  :0;
  ~S20571C14(); // tgen
  S20571C14(); // tgen
};
//SIG(-1 S20571C14) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4{ BC5{ BC3 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC3 FC6{} FL Fi:23 Fs Fi FL[2]} BC7{ VBC3 vd v5 FL[4] Fs Fi FL Fi} Fi:0}


S20571C14 ::~S20571C14(){ note_dtor("S20571C14", this);} // tgen
S20571C14 ::S20571C14(){ note_ctor("S20571C14", this);} // tgen

static void Test_S20571C14()
{
  extern Class_Descriptor cd_S20571C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(117,350)];
    init_test(&cd_S20571C14, buf);
    S20571C14 *dp, &lv = *(dp=new (buf) S20571C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1856,1396), "sizeof(S20571C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C14)");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*), ABISELECT(1632,1228), "S20571C14");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*), ABISELECT(1632,1228), "S20571C14");
    check_base_class_offset(lv, (S20570C5*)(S20571C4*), ABISELECT(1632,1228), "S20571C14");
    check_base_class_offset(lv, (S20571C10*), 0, "S20571C14");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*), ABISELECT(1200,880), "S20571C14");
    check_base_class_offset(lv, (S20571C7*)(S20571C12*), ABISELECT(1184,876), "S20571C14");
    check_base_class_offset(lv, (S20571C12*), ABISELECT(1184,876), "S20571C14");
    check_base_class_offset(lv, (S20571C4*), ABISELECT(1560,1172), "S20571C14");
    test_class_info(&lv, &cd_S20571C14);
    dp->~S20571C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C14(Test_S20571C14, "S20571C14", ABISELECT(1856,1396));

#else // __cplusplus

extern void _ZN9S20571C14C1Ev();
extern void _ZN9S20571C14D1Ev();
Name_Map name_map_S20571C14[] = {
  NSPAIR(_ZN9S20571C14C1Ev),
  NSPAIR(_ZN9S20571C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
static Base_Class bases_S20571C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1632,1228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1200,880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20571C12,    ABISELECT(1184,876), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C4,    ABISELECT(1560,1172), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C14[];
extern void _ZN9S20571C14D1Ev();
extern void _ZN9S20571C14D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZThn1560_N9S20571C14D1Ev,_ZThn1172_N9S20571C14D1Ev)();
extern void ABISELECT(_ZThn1560_N9S20571C14D0Ev,_ZThn1172_N9S20571C14D0Ev)();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY vtc_S20571C14[] = {
  ABISELECT(1632,1228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C14[0]),
  (VTBL_ENTRY)&_ZN9S20571C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  ABISELECT(448,352),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20571C14[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(72,56),
  ABISELECT(-1560,-1172),
  (VTBL_ENTRY)&(_ZTI9S20571C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1560_N9S20571C14D1Ev,_ZThn1172_N9S20571C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1560_N9S20571C14D0Ev,_ZThn1172_N9S20571C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20571C14[];
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C10__9S20571C14[] = {
  ABISELECT(1632,1228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C14[] = {
  ABISELECT(448,352),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C4__9S20571C14[] = {
  ABISELECT(72,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
static  VTT_ENTRY vtt_S20571C14[] = {
  {&(_ZTV9S20571C14[3]),  3,18},
  {&(_tg__ZTV9S20571C10__9S20571C14[3]),  3,6},
  {&(_tg__ZTV9S20571C12__9S20571C14[3]),  3,6},
  {&(_tg__ZTV8S20571C4__9S20571C14[3]),  3,6},
  {&(_ZTV9S20571C14[9]),  9,18},
  {&(_ZTV9S20571C14[15]),  15,18},
};
extern VTBL_ENTRY _ZTI9S20571C14[];
extern  VTBL_ENTRY _ZTV9S20571C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C14[];
Class_Descriptor cd_S20571C14 = {  "S20571C14", // class name
  bases_S20571C14, 6,
  &(vtc_S20571C14[0]), // expected_vtbl_contents
  &(vtt_S20571C14[0]), // expected_vtt_contents
  ABISELECT(1856,1396), // object size
  NSPAIRA(_ZTI9S20571C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20571C14),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C14),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C11  : S20571C10 , S20571C12 {
  void *s20571c11f0[13];
  int s20571c11f1[2];
  long s20571c11f2;
  void *s20571c11f3[2];
  short s20571c11f4;
  ::S20571C14 s20571c11f5;
  int s20571c11f6;
  ~S20571C11(); // tgen
  S20571C11(); // tgen
};
//SIG(-1 S20571C11) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4{ BC5{ BC3 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC3 FC6{} FL Fi:23 Fs Fi FL[2]} Fp[13] Fi[2] Fl Fp[2] Fs FC7{ BC2 BC4 BC8{ VBC3 vd v5 FL[4] Fs Fi FL Fi} Fi:0} Fi}


S20571C11 ::~S20571C11(){ note_dtor("S20571C11", this);} // tgen
S20571C11 ::S20571C11(){ note_ctor("S20571C11", this);} // tgen

static void Test_S20571C11()
{
  extern Class_Descriptor cd_S20571C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(239,705)];
    init_test(&cd_S20571C11, buf);
    S20571C11 *dp, &lv = *(dp=new (buf) S20571C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3808,2816), "sizeof(S20571C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C11)");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*), ABISELECT(3584,2648), "S20571C11");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*), ABISELECT(3584,2648), "S20571C11");
    check_base_class_offset(lv, (S20571C10*), 0, "S20571C11");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*), ABISELECT(1200,880), "S20571C11");
    check_base_class_offset(lv, (S20571C7*)(S20571C12*), ABISELECT(1184,876), "S20571C11");
    check_base_class_offset(lv, (S20571C12*), ABISELECT(1184,876), "S20571C11");
    check_field_offset(lv, s20571c11f0, ABISELECT(1560,1172), "S20571C11.s20571c11f0");
    check_field_offset(lv, s20571c11f1, ABISELECT(1664,1224), "S20571C11.s20571c11f1");
    check_field_offset(lv, s20571c11f2, ABISELECT(1672,1232), "S20571C11.s20571c11f2");
    check_field_offset(lv, s20571c11f3, ABISELECT(1680,1236), "S20571C11.s20571c11f3");
    check_field_offset(lv, s20571c11f4, ABISELECT(1696,1244), "S20571C11.s20571c11f4");
    check_field_offset(lv, s20571c11f5, ABISELECT(1712,1248), "S20571C11.s20571c11f5");
    check_field_offset(lv, s20571c11f6, ABISELECT(3568,2644), "S20571C11.s20571c11f6");
    test_class_info(&lv, &cd_S20571C11);
    dp->~S20571C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C11(Test_S20571C11, "S20571C11", ABISELECT(3808,2816));

#else // __cplusplus

extern void _ZN9S20571C11C1Ev();
extern void _ZN9S20571C11D1Ev();
Name_Map name_map_S20571C11[] = {
  NSPAIR(_ZN9S20571C11C1Ev),
  NSPAIR(_ZN9S20571C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
static Base_Class bases_S20571C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3584,2648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1200,880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20571C12,    ABISELECT(1184,876), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C11[];
extern void _ZN9S20571C11D1Ev();
extern void _ZN9S20571C11D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY vtc_S20571C11[] = {
  ABISELECT(3584,2648),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C11[0]),
  (VTBL_ENTRY)&_ZN9S20571C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  ABISELECT(2400,1772),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20571C11[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern VTBL_ENTRY _ZTV9S20571C11[];
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C10__9S20571C11[] = {
  ABISELECT(3584,2648),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C11[] = {
  ABISELECT(2400,1772),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTT_ENTRY vtt_S20571C11[] = {
  {&(_ZTV9S20571C11[3]),  3,12},
  {&(_tg__ZTV9S20571C10__9S20571C11[3]),  3,6},
  {&(_tg__ZTV9S20571C12__9S20571C11[3]),  3,6},
  {&(_ZTV9S20571C11[9]),  9,12},
};
extern VTBL_ENTRY _ZTI9S20571C11[];
extern  VTBL_ENTRY _ZTV9S20571C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C11[];
Class_Descriptor cd_S20571C11 = {  "S20571C11", // class name
  bases_S20571C11, 5,
  &(vtc_S20571C11[0]), // expected_vtbl_contents
  &(vtt_S20571C11[0]), // expected_vtt_contents
  ABISELECT(3808,2816), // object size
  NSPAIRA(_ZTI9S20571C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20571C11),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C11),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C16  : virtual S20571C7 , virtual S20571C12 , S20571C9 , virtual S20571C6 {
  char s20571c16f0:5;
  __tsi64 s20571c16f1[4];
  char s20571c16f2[6];
  ::S20570C17 s20571c16f3;
  virtual  ~S20571C16(); // _ZN9S20571C16D2Ev
  S20571C16(); // tgen
};
//SIG(-1 S20571C16) C1{ VBC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC4{ BC2 VBC3 FC5{} FL Fi:23 Fs Fi FL[2]} BC6{ BC7{ VBC3 vd v4 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC2 v5 FD Fp Fs[6] Fp Fi FD Fi} VBC8{ VBC3 Fp Fi FC2 Fi Fp} vd Fc:5 FL[4] Fc[6] FC9{ vd m Fp Fl Fi Fp}}


 S20571C16 ::~S20571C16(){ note_dtor("S20571C16", this);}
S20571C16 ::S20571C16(){ note_ctor("S20571C16", this);} // tgen

static void Test_S20571C16()
{
  extern Class_Descriptor cd_S20571C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(204,604)];
    init_test(&cd_S20571C16, buf);
    S20571C16 *dp, &lv = *(dp=new (buf) S20571C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3248,2412), "sizeof(S20571C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C16)");
    /*is_ambiguous_... S20571C16::S20571C7 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C7*), ABISELECT(1936,1420), "S20571C16");
    /*is_ambiguous_... S20571C16::S20571C7 */ AMB_check_base_class_offset(lv, (S20571C7*), ABISELECT(1920,1416), "S20571C16");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*), ABISELECT(2272,1676), "S20571C16");
    check_base_class_offset(lv, (S20571C7*)(S20571C12*), ABISELECT(2256,1672), "S20571C16");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*), ABISELECT(2640,1968), "S20571C16");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C9*), ABISELECT(2640,1968), "S20571C16");
    check_base_class_offset(lv, (S20570C5*)(S20571C6*), ABISELECT(2640,1968), "S20571C16");
    check_base_class_offset(lv, (S20571C12*), ABISELECT(2256,1672), "S20571C16");
    check_base_class_offset(lv, (S20571C10*)(S20571C9*), 0, "S20571C16");
    /*is_ambiguous_... S20571C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C9*), ABISELECT(1184,876), "S20571C16");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C9*), ABISELECT(1424,1048), "S20571C16");
    check_base_class_offset(lv, (S20571C7*)(S20571C9*), ABISELECT(1408,1044), "S20571C16");
    check_base_class_offset(lv, (S20571C9*), 0, "S20571C16");
    check_base_class_offset(lv, (S20571C6*), ABISELECT(2864,2136), "S20571C16");
    set_bf_and_test(lv, s20571c16f0, ABISELECT(1828,1352), 0, 5, 1, "S20571C16");
    set_bf_and_test(lv, s20571c16f0, ABISELECT(1828,1352), 0, 5, hide_sll(1LL<<4), "S20571C16");
    check_field_offset(lv, s20571c16f1, ABISELECT(1832,1356), "S20571C16.s20571c16f1");
    check_field_offset(lv, s20571c16f2, ABISELECT(1864,1388), "S20571C16.s20571c16f2");
    check_field_offset(lv, s20571c16f3, ABISELECT(1872,1396), "S20571C16.s20571c16f3");
    test_class_info(&lv, &cd_S20571C16);
    dp->~S20571C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C16(Test_S20571C16, "S20571C16", ABISELECT(3248,2412));

#else // __cplusplus

extern void _ZN9S20571C16C1Ev();
extern void _ZN9S20571C16D2Ev();
Name_Map name_map_S20571C16[] = {
  NSPAIR(_ZN9S20571C16C1Ev),
  NSPAIR(_ZN9S20571C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C9;
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
extern Class_Descriptor cd_S20571C6;
extern VTBL_ENTRY _ZTI8S20571C6[];
extern  VTBL_ENTRY _ZTV8S20571C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C6[];
static Base_Class bases_S20571C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1936,1420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1920,1416), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(2272,1676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(2256,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(2640,1968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20571C12,    ABISELECT(2256,1672), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1408,1044), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20571C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C6,    ABISELECT(2864,2136), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C16[];
extern void _ZN9S20571C16D1Ev();
extern void _ZN9S20571C16D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY vtc_S20571C16[] = {
  ABISELECT(2864,2136),
  ABISELECT(2256,1672),
  ABISELECT(1920,1416),
  ABISELECT(2640,1968),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN9S20571C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  0,
  0,
  0,
  ABISELECT(-1920,-1416),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-2256,-1672),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(-224,-168),
  ABISELECT(-2864,-2136),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
};
extern VTBL_ENTRY _ZTV9S20571C16[];
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C9__9S20571C16[] = {
  ABISELECT(2640,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C9__9S20571C16[] = {
  ABISELECT(2640,1968),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C16[] = {
  ABISELECT(384,296),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C16[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C6[0]),
};
static  VTT_ENTRY vtt_S20571C16[] = {
  {&(_ZTV9S20571C16[6]),  6,35},
  {&(_tg__ZTV8S20571C9__9S20571C16[3]),  3,7},
  {&(_tg__ZTV9S20571C108S20571C9__9S20571C16[3]),  3,6},
  {&(_ZTV9S20571C16[20]),  20,35},
  {&(_ZTV9S20571C16[29]),  29,35},
  {&(_ZTV9S20571C16[35]),  35,35},
  {&(_tg__ZTV9S20571C12__9S20571C16[3]),  3,6},
  {&(_tg__ZTV8S20571C6__9S20571C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20571C16[];
extern  VTBL_ENTRY _ZTV9S20571C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C16[];
Class_Descriptor cd_S20571C16 = {  "S20571C16", // class name
  bases_S20571C16, 12,
  &(vtc_S20571C16[0]), // expected_vtbl_contents
  &(vtt_S20571C16[0]), // expected_vtt_contents
  ABISELECT(3248,2412), // object size
  NSPAIRA(_ZTI9S20571C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20571C16),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C16),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C18  : S20571C16 , virtual S20571C4 {
  short s20571c18f0;
  char s20571c18f1;
  short s20571c18f2[5];
  ::S20571C10 s20571c18f3;
  short s20571c18f4:16;
  int s20571c18f5;
  virtual void  v14(); // _ZN9S20571C183v14Ev
  virtual void  v15(); // _ZN9S20571C183v15Ev
  virtual void  v16(); // _ZN9S20571C183v16Ev
  virtual void  v17(); // _ZN9S20571C183v17Ev
  virtual void  v18(); // _ZN9S20571C183v18Ev
  ~S20571C18(); // tgen
  S20571C18(); // tgen
};
//SIG(-1 S20571C18) C1{ BC2{ VBC3{ BC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v6 v7 v8 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC5{ BC3 VBC4 FC6{} FL Fi:23 Fs Fi FL[2]} BC7{ BC8{ VBC4 vd v9 FC4[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4 BC3 v10 FD Fp Fs[6] Fp Fi FD Fi} VBC9{ VBC4 Fp Fi FC3 Fi Fp} vd Fc:5 FL[4] Fc[6] FC10{ vd m Fp Fl Fi Fp}} VBC11{ VBC4 vd v11 FL[4] Fs Fi FL Fi} v1 v2 v3 v4 v5 Fs Fc Fs[5] FC8 Fs:16 Fi}


void  S20571C18 ::v14(){vfunc_called(this, "_ZN9S20571C183v14Ev");}
void  S20571C18 ::v15(){vfunc_called(this, "_ZN9S20571C183v15Ev");}
void  S20571C18 ::v16(){vfunc_called(this, "_ZN9S20571C183v16Ev");}
void  S20571C18 ::v17(){vfunc_called(this, "_ZN9S20571C183v17Ev");}
void  S20571C18 ::v18(){vfunc_called(this, "_ZN9S20571C183v18Ev");}
S20571C18 ::~S20571C18(){ note_dtor("S20571C18", this);} // tgen
S20571C18 ::S20571C18(){ note_ctor("S20571C18", this);} // tgen

static void Test_S20571C18()
{
  extern Class_Descriptor cd_S20571C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(298,885)];
    init_test(&cd_S20571C18, buf);
    S20571C18 *dp, &lv = *(dp=new (buf) S20571C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4752,3536), "sizeof(S20571C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C18)");
    /*is_ambiguous_... S20571C18::S20571C7 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C7*), ABISELECT(3376,2488), "S20571C18");
    /*is_ambiguous_... S20571C16::S20571C7 */ AMB_check_base_class_offset(lv, (S20571C7*)(S20571C16*), ABISELECT(3360,2484), "S20571C18");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*), ABISELECT(3712,2744), "S20571C18");
    check_base_class_offset(lv, (S20571C7*)(S20571C12*), ABISELECT(3696,2740), "S20571C18");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*), ABISELECT(4080,3036), "S20571C18");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C9*)(S20571C16*), ABISELECT(4080,3036), "S20571C18");
    check_base_class_offset(lv, (S20570C5*)(S20571C6*), ABISELECT(4080,3036), "S20571C18");
    check_base_class_offset(lv, (S20570C5*)(S20571C4*), ABISELECT(4080,3036), "S20571C18");
    check_base_class_offset(lv, (S20571C12*)(S20571C16*), ABISELECT(3696,2740), "S20571C18");
    check_base_class_offset(lv, (S20571C10*)(S20571C9*)(S20571C16*), 0, "S20571C18");
    /*is_ambiguous_... S20571C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C9*)(S20571C16*), ABISELECT(1184,876), "S20571C18");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C9*)(S20571C16*), ABISELECT(1424,1048), "S20571C18");
    check_base_class_offset(lv, (S20571C7*)(S20571C9*)(S20571C16*), ABISELECT(1408,1044), "S20571C18");
    check_base_class_offset(lv, (S20571C9*)(S20571C16*), 0, "S20571C18");
    check_base_class_offset(lv, (S20571C6*)(S20571C16*), ABISELECT(4304,3204), "S20571C18");
    check_base_class_offset(lv, (S20571C16*), 0, "S20571C18");
    check_base_class_offset(lv, (S20571C4*), ABISELECT(4688,3480), "S20571C18");
    check_field_offset(lv, s20571c18f0, ABISELECT(1912,1416), "S20571C18.s20571c18f0");
    check_field_offset(lv, s20571c18f1, ABISELECT(1914,1418), "S20571C18.s20571c18f1");
    check_field_offset(lv, s20571c18f2, ABISELECT(1916,1420), "S20571C18.s20571c18f2");
    check_field_offset(lv, s20571c18f3, ABISELECT(1936,1432), "S20571C18.s20571c18f3");
    set_bf_and_test(lv, s20571c18f4, ABISELECT(3344,2476), 0, 16, 1, "S20571C18");
    set_bf_and_test(lv, s20571c18f4, ABISELECT(3344,2476), 0, 16, hide_sll(1LL<<15), "S20571C18");
    check_field_offset(lv, s20571c18f5, ABISELECT(3348,2480), "S20571C18.s20571c18f5");
    test_class_info(&lv, &cd_S20571C18);
    dp->~S20571C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C18(Test_S20571C18, "S20571C18", ABISELECT(4752,3536));

#else // __cplusplus

extern void _ZN9S20571C18C1Ev();
extern void _ZN9S20571C18D1Ev();
Name_Map name_map_S20571C18[] = {
  NSPAIR(_ZN9S20571C18C1Ev),
  NSPAIR(_ZN9S20571C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C9;
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
extern Class_Descriptor cd_S20571C6;
extern VTBL_ENTRY _ZTI8S20571C6[];
extern  VTBL_ENTRY _ZTV8S20571C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C6[];
extern Class_Descriptor cd_S20571C16;
extern VTBL_ENTRY _ZTI9S20571C16[];
extern  VTBL_ENTRY _ZTV9S20571C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C16[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
static Base_Class bases_S20571C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3376,2488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(3360,2484), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C5,    ABISELECT(3712,2744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(3696,2740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4080,3036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20571C12,    ABISELECT(3696,2740), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1408,1044), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20571C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20571C6,    ABISELECT(4304,3204), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20571C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C4,    ABISELECT(4688,3480), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C18[];
extern void _ZN9S20571C18D1Ev();
extern void _ZN9S20571C18D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN9S20571C183v14Ev();
extern void _ZN9S20571C183v15Ev();
extern void _ZN9S20571C183v16Ev();
extern void _ZN9S20571C183v17Ev();
extern void _ZN9S20571C183v18Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZTv0_n32_N9S20571C18D1Ev,_ZTv0_n16_N9S20571C18D1Ev)();
extern void ABISELECT(_ZThn4688_N9S20571C18D1Ev,_ZThn3480_N9S20571C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20571C18D0Ev,_ZTv0_n16_N9S20571C18D0Ev)();
extern void ABISELECT(_ZThn4688_N9S20571C18D0Ev,_ZThn3480_N9S20571C18D0Ev)() __attribute__((weak));
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY vtc_S20571C18[] = {
  ABISELECT(4688,3480),
  ABISELECT(4304,3204),
  ABISELECT(3696,2740),
  ABISELECT(3360,2484),
  ABISELECT(4080,3036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN9S20571C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v14Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v15Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v16Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v17Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v18Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  0,
  0,
  0,
  ABISELECT(-3360,-2484),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-3696,-2740),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(-224,-168),
  ABISELECT(-4304,-3204),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  0,
  ABISELECT(-4688,-3480),
  ABISELECT(-608,-444),
  ABISELECT(-4688,-3480),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20571C18D1Ev,_ZTv0_n16_N9S20571C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20571C18D0Ev,_ZTv0_n16_N9S20571C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20571C18[];
extern void _ZN9S20571C16D1Ev();
extern void _ZN9S20571C16D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C16__9S20571C18[] = {
  ABISELECT(4304,3204),
  ABISELECT(3696,2740),
  ABISELECT(3360,2484),
  ABISELECT(4080,3036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN9S20571C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C99S20571C16__9S20571C18[] = {
  ABISELECT(4080,3036),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C99S20571C16__9S20571C18[] = {
  ABISELECT(4080,3036),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C7__9S20571C16__9S20571C18[] = {
  0,
  0,
  0,
  ABISELECT(-3360,-2484),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C16__9S20571C18[] = {
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-3696,-2740),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C16__9S20571C18[] = {
  ABISELECT(-224,-168),
  ABISELECT(-4304,-3204),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C18[] = {
  ABISELECT(384,296),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C18[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C6[0]),
};
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C4__9S20571C18[] = {
  ABISELECT(-608,-444),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
static  VTT_ENTRY vtt_S20571C18[] = {
  {&(_ZTV9S20571C18[7]),  7,49},
  {&(_tg__ZTV9S20571C16__9S20571C18[6]),  6,10},
  {&(_tg__ZTV8S20571C99S20571C16__9S20571C18[3]),  3,7},
  {&(_tg__ZTV9S20571C108S20571C99S20571C16__9S20571C18[3]),  3,6},
  {&(_tg__ZTV8S20571C7__9S20571C16__9S20571C18[5]),  5,8},
  {&(_tg__ZTV9S20571C12__9S20571C16__9S20571C18[6]),  6,9},
  {&(_tg__ZTV8S20571C6__9S20571C16__9S20571C18[3]),  3,3},
  {&(_ZTV9S20571C18[26]),  26,49},
  {&(_ZTV9S20571C18[35]),  35,49},
  {&(_ZTV9S20571C18[41]),  41,49},
  {&(_ZTV9S20571C18[46]),  46,49},
  {&(_tg__ZTV9S20571C12__9S20571C18[3]),  3,6},
  {&(_tg__ZTV8S20571C6__9S20571C18[3]),  3,3},
  {&(_tg__ZTV8S20571C4__9S20571C18[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20571C18[];
extern  VTBL_ENTRY _ZTV9S20571C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C18[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20571C18D0Ev,_ZTv0_n16_N9S20571C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N9S20571C18D0Ev,_ZThn3480_N9S20571C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20571C18D1Ev,_ZTv0_n16_N9S20571C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N9S20571C18D1Ev,_ZThn3480_N9S20571C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20571C18 = {  "S20571C18", // class name
  bases_S20571C18, 14,
  &(vtc_S20571C18[0]), // expected_vtbl_contents
  &(vtt_S20571C18[0]), // expected_vtt_contents
  ABISELECT(4752,3536), // object size
  NSPAIRA(_ZTI9S20571C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20571C18),49, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C18),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C15  : S20571C16 , virtual S20571C4 , S20571C18 , S20571C14 {
  char s20571c15f0;
  virtual void  v13(); // _ZN9S20571C153v13Ev
  ~S20571C15(); // tgen
  S20571C15(); // tgen
};
//SIG(-1 S20571C15) C1{ BC2{ VBC3{ BC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC5{ BC3 VBC4 FC6{} FL Fi:23 Fs Fi FL[2]} BC7{ BC8{ VBC4 vd v5 FC4[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC4 BC3 v6 FD Fp Fs[6] Fp Fi FD Fi} VBC9{ VBC4 Fp Fi FC3 Fi Fp} vd Fc:5 FL[4] Fc[6] FC10{ vd m Fp Fl Fi Fp}} VBC11{ VBC4 vd v7 FL[4] Fs Fi FL Fi} BC12{ BC2 VBC11 v8 v9 v10 v11 v12 Fs Fc Fs[5] FC8 Fs:16 Fi} BC13{ BC8 BC5 BC11 Fi:0} v1 Fc}


void  S20571C15 ::v13(){vfunc_called(this, "_ZN9S20571C153v13Ev");}
S20571C15 ::~S20571C15(){ note_dtor("S20571C15", this);} // tgen
S20571C15 ::S20571C15(){ note_ctor("S20571C15", this);} // tgen

static void Test_S20571C15()
{
  extern Class_Descriptor cd_S20571C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(520,1547)];
    init_test(&cd_S20571C15, buf);
    S20571C15 *dp, &lv = *(dp=new (buf) S20571C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8304,6184), "sizeof(S20571C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C15)");
    /*is_ambiguous_... S20571C15::S20571C7 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C7*), ABISELECT(6928,5136), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C7*)(S20571C16*), ABISELECT(6912,5132), "S20571C15");
    /*is_ambiguous_... S20571C16::S20571C7 */ AMB_check_base_class_offset(lv, (S20571C7*)(S20571C16*)(S20571C18*), ABISELECT(6912,5132), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C12 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*), ABISELECT(7264,5392), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C12 */ AMB_check_base_class_offset(lv, (S20571C7*)(S20571C12*), ABISELECT(7248,5388), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C12 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*), ABISELECT(7632,5684), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C9*)(S20571C16*), ABISELECT(7632,5684), "S20571C15");
    check_base_class_offset(lv, (S20570C5*)(S20571C6*), ABISELECT(7632,5684), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C4 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C4*), ABISELECT(7632,5684), "S20571C15");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C9*)(S20571C16*)(S20571C18*), ABISELECT(7632,5684), "S20571C15");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C14*), ABISELECT(7632,5684), "S20571C15");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*)(S20571C14*), ABISELECT(7632,5684), "S20571C15");
    check_base_class_offset(lv, (S20570C5*)(S20571C4*)(S20571C14*), ABISELECT(7632,5684), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C12*)(S20571C16*), ABISELECT(7248,5388), "S20571C15");
    check_base_class_offset(lv, (S20571C12*)(S20571C16*)(S20571C18*), ABISELECT(7248,5388), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C10*)(S20571C9*)(S20571C16*), 0, "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C9*)(S20571C16*), ABISELECT(1184,876), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C9*)(S20571C16*), ABISELECT(1424,1048), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C7*)(S20571C9*)(S20571C16*), ABISELECT(1408,1044), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C9*)(S20571C16*), 0, "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C6*)(S20571C16*), ABISELECT(7856,5852), "S20571C15");
    check_base_class_offset(lv, (S20571C6*)(S20571C16*)(S20571C18*), ABISELECT(7856,5852), "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C16 */ AMB_check_base_class_offset(lv, (S20571C16*), 0, "S20571C15");
    /*is_ambiguous_... S20571C15::S20571C4 */ AMB_check_base_class_offset(lv, (S20571C4*), ABISELECT(8240,6128), "S20571C15");
    check_base_class_offset(lv, (S20571C4*)(S20571C18*), ABISELECT(8240,6128), "S20571C15");
    check_base_class_offset(lv, (S20571C10*)(S20571C9*)(S20571C16*)(S20571C18*), ABISELECT(1920,1416), "S20571C15");
    /*is_ambiguous_... S20571C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C9*)(S20571C16*)(S20571C18*), ABISELECT(3104,2292), "S20571C15");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C9*)(S20571C16*)(S20571C18*), ABISELECT(3344,2464), "S20571C15");
    check_base_class_offset(lv, (S20571C7*)(S20571C9*)(S20571C16*)(S20571C18*), ABISELECT(3328,2460), "S20571C15");
    check_base_class_offset(lv, (S20571C9*)(S20571C16*)(S20571C18*), ABISELECT(1920,1416), "S20571C15");
    check_base_class_offset(lv, (S20571C16*)(S20571C18*), ABISELECT(1920,1416), "S20571C15");
    check_base_class_offset(lv, (S20571C18*), ABISELECT(1920,1416), "S20571C15");
    check_base_class_offset(lv, (S20571C10*)(S20571C14*), ABISELECT(5280,3900), "S20571C15");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*)(S20571C14*), ABISELECT(6480,4780), "S20571C15");
    check_base_class_offset(lv, (S20571C7*)(S20571C12*)(S20571C14*), ABISELECT(6464,4776), "S20571C15");
    check_base_class_offset(lv, (S20571C12*)(S20571C14*), ABISELECT(6464,4776), "S20571C15");
    check_base_class_offset(lv, (S20571C4*)(S20571C14*), ABISELECT(6840,5072), "S20571C15");
    check_base_class_offset(lv, (S20571C14*), ABISELECT(5280,3900), "S20571C15");
    check_field_offset(lv, s20571c15f0, ABISELECT(6900,5128), "S20571C15.s20571c15f0");
    test_class_info(&lv, &cd_S20571C15);
    dp->~S20571C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C15(Test_S20571C15, "S20571C15", ABISELECT(8304,6184));

#else // __cplusplus

extern void _ZN9S20571C15C1Ev();
extern void _ZN9S20571C15D1Ev();
Name_Map name_map_S20571C15[] = {
  NSPAIR(_ZN9S20571C15C1Ev),
  NSPAIR(_ZN9S20571C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C9;
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
extern Class_Descriptor cd_S20571C6;
extern VTBL_ENTRY _ZTI8S20571C6[];
extern  VTBL_ENTRY _ZTV8S20571C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C6[];
extern Class_Descriptor cd_S20571C16;
extern VTBL_ENTRY _ZTI9S20571C16[];
extern  VTBL_ENTRY _ZTV9S20571C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C16[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C9;
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
extern Class_Descriptor cd_S20571C16;
extern VTBL_ENTRY _ZTI9S20571C16[];
extern  VTBL_ENTRY _ZTV9S20571C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C16[];
extern Class_Descriptor cd_S20571C18;
extern VTBL_ENTRY _ZTI9S20571C18[];
extern  VTBL_ENTRY _ZTV9S20571C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C18[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
extern Class_Descriptor cd_S20571C14;
extern VTBL_ENTRY _ZTI9S20571C14[];
extern  VTBL_ENTRY _ZTV9S20571C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C14[];
static Base_Class bases_S20571C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(6928,5136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(6912,5132), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20570C5,    ABISELECT(7264,5392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(7248,5388), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(7632,5684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20571C12,    ABISELECT(7248,5388), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1408,1044), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20571C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20571C6,    ABISELECT(7856,5852), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20571C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C4,    ABISELECT(8240,6128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20571C10,    ABISELECT(1920,1416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(3104,2292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(3344,2464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(3328,2460), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20571C9,    ABISELECT(1920,1416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20571C16,    ABISELECT(1920,1416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20571C18,    ABISELECT(1920,1416), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C10,    ABISELECT(5280,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(6480,4780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(6464,4776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20571C12,    ABISELECT(6464,4776), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20571C4,    ABISELECT(6840,5072), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20571C14,    ABISELECT(5280,3900), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20571C15[];
extern void _ZN9S20571C15D1Ev();
extern void _ZN9S20571C15D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN9S20571C153v13Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZThn1920_N9S20571C15D1Ev,_ZThn1416_N9S20571C15D1Ev)();
extern void ABISELECT(_ZThn1920_N9S20571C15D0Ev,_ZThn1416_N9S20571C15D0Ev)();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN9S20571C183v14Ev();
extern void _ZN9S20571C183v15Ev();
extern void _ZN9S20571C183v16Ev();
extern void _ZN9S20571C183v17Ev();
extern void _ZN9S20571C183v18Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZThn5280_N9S20571C15D1Ev,_ZThn3900_N9S20571C15D1Ev)();
extern void ABISELECT(_ZThn5280_N9S20571C15D0Ev,_ZThn3900_N9S20571C15D0Ev)();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZThn6840_N9S20571C15D1Ev,_ZThn5072_N9S20571C15D1Ev)();
extern void ABISELECT(_ZThn6840_N9S20571C15D0Ev,_ZThn5072_N9S20571C15D0Ev)();
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZTv0_n32_N9S20571C15D1Ev,_ZTv0_n16_N9S20571C15D1Ev)();
extern void ABISELECT(_ZThn8240_N9S20571C15D1Ev,_ZThn6128_N9S20571C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20571C15D0Ev,_ZTv0_n16_N9S20571C15D0Ev)();
extern void ABISELECT(_ZThn8240_N9S20571C15D0Ev,_ZThn6128_N9S20571C15D0Ev)() __attribute__((weak));
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY vtc_S20571C15[] = {
  ABISELECT(8240,6128),
  ABISELECT(7856,5852),
  ABISELECT(7248,5388),
  ABISELECT(6912,5132),
  ABISELECT(7632,5684),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&_ZN9S20571C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20571C153v13Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(6320,4712),
  ABISELECT(5936,4436),
  ABISELECT(5328,3972),
  ABISELECT(4992,3716),
  ABISELECT(5712,4268),
  ABISELECT(-1920,-1416),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S20571C15D1Ev,_ZThn1416_N9S20571C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1920_N9S20571C15D0Ev,_ZThn1416_N9S20571C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v14Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v15Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v16Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v17Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v18Ev,
  ABISELECT(-3328,-2460),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(2352,1784),
  ABISELECT(-5280,-3900),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5280_N9S20571C15D1Ev,_ZThn3900_N9S20571C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5280_N9S20571C15D0Ev,_ZThn3900_N9S20571C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  ABISELECT(1168,908),
  ABISELECT(-6464,-4776),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(792,612),
  ABISELECT(-6840,-5072),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6840_N9S20571C15D1Ev,_ZThn5072_N9S20571C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6840_N9S20571C15D0Ev,_ZThn5072_N9S20571C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-6912,-5132),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-7248,-5388),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(-224,-168),
  ABISELECT(-7856,-5852),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  0,
  ABISELECT(-8240,-6128),
  ABISELECT(-608,-444),
  ABISELECT(-8240,-6128),
  (VTBL_ENTRY)&(_ZTI9S20571C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20571C15D1Ev,_ZTv0_n16_N9S20571C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20571C15D0Ev,_ZTv0_n16_N9S20571C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern VTBL_ENTRY _ZTV9S20571C15[];
extern void _ZN9S20571C16D1Ev();
extern void _ZN9S20571C16D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C16__9S20571C15[] = {
  ABISELECT(7856,5852),
  ABISELECT(7248,5388),
  ABISELECT(6912,5132),
  ABISELECT(7632,5684),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN9S20571C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C99S20571C16__9S20571C15[] = {
  ABISELECT(7632,5684),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C99S20571C16__9S20571C15[] = {
  ABISELECT(7632,5684),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C7__9S20571C16__9S20571C15[] = {
  0,
  0,
  0,
  ABISELECT(-6912,-5132),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C16__9S20571C15[] = {
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-7248,-5388),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C16__9S20571C15[] = {
  ABISELECT(-224,-168),
  ABISELECT(-7856,-5852),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
};
extern void _ZN9S20571C18D1Ev();
extern void _ZN9S20571C18D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN9S20571C183v14Ev();
extern void _ZN9S20571C183v15Ev();
extern void _ZN9S20571C183v16Ev();
extern void _ZN9S20571C183v17Ev();
extern void _ZN9S20571C183v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C18__9S20571C15[] = {
  ABISELECT(6320,4712),
  ABISELECT(5936,4436),
  ABISELECT(5328,3972),
  ABISELECT(4992,3716),
  ABISELECT(5712,4268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN9S20571C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v14Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v15Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v16Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v17Ev,
  (VTBL_ENTRY)&_ZN9S20571C183v18Ev,
};
extern void _ZN9S20571C16D1Ev();
extern void _ZN9S20571C16D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C169S20571C18__A1__9S20571C15[] = {
  ABISELECT(5936,4436),
  ABISELECT(5328,3972),
  ABISELECT(4992,3716),
  ABISELECT(5712,4268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN9S20571C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C99S20571C169S20571C18__A1__9S20571C15[] = {
  ABISELECT(5712,4268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C99S20571C169S20571C18__A1__9S20571C15[] = {
  ABISELECT(5712,4268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C7__9S20571C169S20571C18__A1__9S20571C15[] = {
  0,
  0,
  0,
  ABISELECT(-4992,-3716),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C169S20571C18__A1__9S20571C15[] = {
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-5328,-3972),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C169S20571C18__A1__9S20571C15[] = {
  ABISELECT(-224,-168),
  ABISELECT(-5936,-4436),
  (VTBL_ENTRY)&(_ZTI9S20571C16[0]),
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C7__9S20571C18__9S20571C15[] = {
  0,
  0,
  0,
  ABISELECT(-4992,-3716),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C18__9S20571C15[] = {
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-5328,-3972),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C18__9S20571C15[] = {
  ABISELECT(-224,-168),
  ABISELECT(-5936,-4436),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S20571C18D1Ev,_ZTv0_n16_N9S20571C18D1Ev)();
extern void ABISELECT(_ZThn6320_N9S20571C18D1Ev,_ZThn4712_N9S20571C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20571C18D0Ev,_ZTv0_n16_N9S20571C18D0Ev)();
extern void ABISELECT(_ZThn6320_N9S20571C18D0Ev,_ZThn4712_N9S20571C18D0Ev)() __attribute__((weak));
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C4__9S20571C18__9S20571C15[] = {
  0,
  ABISELECT(-6320,-4712),
  ABISELECT(-608,-444),
  ABISELECT(-6320,-4712),
  (VTBL_ENTRY)&(_ZTI9S20571C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20571C18D1Ev,_ZTv0_n16_N9S20571C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20571C18D0Ev,_ZTv0_n16_N9S20571C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern void _ZN9S20571C14D1Ev();
extern void _ZN9S20571C14D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C14__9S20571C15[] = {
  ABISELECT(2352,1784),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C14[0]),
  (VTBL_ENTRY)&_ZN9S20571C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C109S20571C14__A2__9S20571C15[] = {
  ABISELECT(2352,1784),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C129S20571C14__A1__9S20571C15[] = {
  ABISELECT(1168,908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C49S20571C14__A1__9S20571C15[] = {
  ABISELECT(792,612),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C14__9S20571C15[] = {
  ABISELECT(1168,908),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20571C14[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void ABISELECT(_ZThn1560_N9S20571C14D1Ev,_ZThn1172_N9S20571C14D1Ev)();
extern void ABISELECT(_ZThn1560_N9S20571C14D0Ev,_ZThn1172_N9S20571C14D0Ev)();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C4__9S20571C14__9S20571C15[] = {
  ABISELECT(792,612),
  ABISELECT(-1560,-1172),
  (VTBL_ENTRY)&(_ZTI9S20571C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1560_N9S20571C14D1Ev,_ZThn1172_N9S20571C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1560_N9S20571C14D0Ev,_ZThn1172_N9S20571C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C15[] = {
  ABISELECT(384,296),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__9S20571C15[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C6[0]),
};
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C4__9S20571C15[] = {
  ABISELECT(-608,-444),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
static  VTT_ENTRY vtt_S20571C15[] = {
  {&(_ZTV9S20571C15[7]),  7,84},
  {&(_tg__ZTV9S20571C16__9S20571C15[6]),  6,10},
  {&(_tg__ZTV8S20571C99S20571C16__9S20571C15[3]),  3,7},
  {&(_tg__ZTV9S20571C108S20571C99S20571C16__9S20571C15[3]),  3,6},
  {&(_tg__ZTV8S20571C7__9S20571C16__9S20571C15[5]),  5,8},
  {&(_tg__ZTV9S20571C12__9S20571C16__9S20571C15[6]),  6,9},
  {&(_tg__ZTV8S20571C6__9S20571C16__9S20571C15[3]),  3,3},
  {&(_tg__ZTV9S20571C18__9S20571C15[7]),  7,16},
  {&(_tg__ZTV9S20571C169S20571C18__A1__9S20571C15[6]),  6,10},
  {&(_tg__ZTV8S20571C99S20571C169S20571C18__A1__9S20571C15[3]),  3,7},
  {&(_tg__ZTV9S20571C108S20571C99S20571C169S20571C18__A1__9S20571C15[3]),  3,6},
  {&(_tg__ZTV8S20571C7__9S20571C169S20571C18__A1__9S20571C15[5]),  5,8},
  {&(_tg__ZTV9S20571C12__9S20571C169S20571C18__A1__9S20571C15[6]),  6,9},
  {&(_tg__ZTV8S20571C6__9S20571C169S20571C18__A1__9S20571C15[3]),  3,3},
  {&(_tg__ZTV8S20571C7__9S20571C18__9S20571C15[5]),  5,8},
  {&(_tg__ZTV9S20571C12__9S20571C18__9S20571C15[6]),  6,9},
  {&(_tg__ZTV8S20571C6__9S20571C18__9S20571C15[3]),  3,3},
  {&(_tg__ZTV8S20571C4__9S20571C18__9S20571C15[5]),  5,8},
  {&(_tg__ZTV9S20571C14__9S20571C15[3]),  3,6},
  {&(_tg__ZTV9S20571C109S20571C14__A2__9S20571C15[3]),  3,6},
  {&(_tg__ZTV9S20571C129S20571C14__A1__9S20571C15[3]),  3,6},
  {&(_tg__ZTV8S20571C49S20571C14__A1__9S20571C15[3]),  3,6},
  {&(_tg__ZTV9S20571C12__9S20571C14__9S20571C15[3]),  3,6},
  {&(_tg__ZTV8S20571C4__9S20571C14__9S20571C15[3]),  3,6},
  {&(_ZTV9S20571C15[61]),  61,84},
  {&(_ZTV9S20571C15[70]),  70,84},
  {&(_ZTV9S20571C15[76]),  76,84},
  {&(_ZTV9S20571C15[81]),  81,84},
  {&(_ZTV9S20571C15[24]),  24,84},
  {&(_ZTV9S20571C15[41]),  41,84},
  {&(_ZTV9S20571C15[47]),  47,84},
  {&(_ZTV9S20571C15[53]),  53,84},
  {&(_tg__ZTV9S20571C12__9S20571C15[3]),  3,6},
  {&(_tg__ZTV8S20571C6__9S20571C15[3]),  3,3},
  {&(_tg__ZTV8S20571C4__9S20571C15[3]),  3,6},
};
extern VTBL_ENTRY _ZTI9S20571C15[];
extern  VTBL_ENTRY _ZTV9S20571C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C15[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20571C18D0Ev,_ZTv0_n16_N9S20571C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N9S20571C18D0Ev,_ZThn4712_N9S20571C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20571C18D1Ev,_ZTv0_n16_N9S20571C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6320_N9S20571C18D1Ev,_ZThn4712_N9S20571C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20571C15D0Ev,_ZTv0_n16_N9S20571C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8240_N9S20571C15D0Ev,_ZThn6128_N9S20571C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20571C15D1Ev,_ZTv0_n16_N9S20571C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8240_N9S20571C15D1Ev,_ZThn6128_N9S20571C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20571C15 = {  "S20571C15", // class name
  bases_S20571C15, 27,
  &(vtc_S20571C15[0]), // expected_vtbl_contents
  &(vtt_S20571C15[0]), // expected_vtt_contents
  ABISELECT(8304,6184), // object size
  NSPAIRA(_ZTI9S20571C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20571C15),84, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20571C15),35, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20571C1  : virtual S20571C2 , virtual S20571C6 , S20571C8 , virtual S20571C11 , S20570C5 {
  void *s20571c1f0[10];
  short s20571c1f1;
  char s20571c1f2:3;
  short s20571c1f3:16;
  ::S20571C11 s20571c1f4;
  ::S20571C15 s20571c1f5;
  void *s20571c1f6;
  char s20571c1f7;
  short s20571c1f8[6];
  long s20571c1f9[2];
  virtual void  v1(); // _ZN8S20571C12v1Ev
  virtual void  v2(); // _ZN8S20571C12v2Ev
  virtual void  v3(); // _ZN8S20571C12v3Ev
  ~S20571C1(); // tgen
  S20571C1(); // tgen
};
//SIG(1 S20571C1) C1{ VBC2{ VBC3{ BC4{ VBC5{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v4 FL[4] Fs Fi FL Fi} v5 v6 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v7 Fi:26 Fc[2]} VBC6{ VBC5 Fp Fi FC7{ BC5 v9 v10 v11 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} Fi Fp} BC8{ VBC5 BC9{ BC10{ VBC5 vd v8 FC5[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC5 BC7 v12 FD Fp Fs[6] Fp Fi FD Fi} BC10 vd FD[9] Fs} VBC11{ BC10 BC12{ BC7 VBC5 FC13{} FL Fi:23 Fs Fi FL[2]} Fp[13] Fi[2] Fl Fp[2] Fs FC14{ BC10 BC12 BC4 Fi:0} Fi} BC5 v1 v2 v3 Fp[10] Fs Fc:3 Fs:16 FC11 FC15{ BC16{ VBC7 VBC12 BC9 VBC6 vd Fc:5 FL[4] Fc[6] FC17{ vd m Fp Fl Fi Fp}} VBC4 BC18{ BC16 VBC4 v14 v15 v16 v17 v18 Fs Fc Fs[5] FC10 Fs:16 Fi} BC14 v13 Fc} Fp Fc Fs[6] Fl[2]}


void  S20571C1 ::v1(){vfunc_called(this, "_ZN8S20571C12v1Ev");}
void  S20571C1 ::v2(){vfunc_called(this, "_ZN8S20571C12v2Ev");}
void  S20571C1 ::v3(){vfunc_called(this, "_ZN8S20571C12v3Ev");}
S20571C1 ::~S20571C1(){ note_dtor("S20571C1", this);} // tgen
S20571C1 ::S20571C1(){ note_ctor("S20571C1", this);} // tgen

static void Test_S20571C1()
{
  extern Class_Descriptor cd_S20571C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1262,3728)];
    init_test(&cd_S20571C1, buf);
    S20571C1 *dp, &lv = *(dp=new (buf) S20571C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20176,14908), "sizeof(S20571C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20571C1)");
    check_base_class_offset(lv, (S20570C5*)(S20571C4*)(S20571C3*), ABISELECT(15984,11816), "S20571C1");
    check_base_class_offset(lv, (S20570C5*)(S20571C6*), ABISELECT(15984,11816), "S20571C1");
    /*is_ambiguous_... S20571C8::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C8*), ABISELECT(15984,11816), "S20571C1");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C9*)(S20571C8*), ABISELECT(15984,11816), "S20571C1");
    /*is_ambiguous_... S20571C8::S20571C10 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C8*), ABISELECT(15984,11816), "S20571C1");
    check_base_class_offset(lv, (S20570C5*)(S20571C10*)(S20571C11*), ABISELECT(15984,11816), "S20571C1");
    /*is_ambiguous_... S20571C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C12*)(S20571C11*), ABISELECT(15984,11816), "S20571C1");
    check_base_class_offset(lv, (S20571C4*)(S20571C3*), ABISELECT(15680,11596), "S20571C1");
    check_base_class_offset(lv, (S20571C3*)(S20571C2*), ABISELECT(15680,11596), "S20571C1");
    check_base_class_offset(lv, (S20571C2*), ABISELECT(15656,11584), "S20571C1");
    check_base_class_offset(lv, (S20571C6*), ABISELECT(16208,11984), "S20571C1");
    check_base_class_offset(lv, (S20571C10*)(S20571C9*)(S20571C8*), 0, "S20571C1");
    /*is_ambiguous_... S20571C9::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S20571C9*)(S20571C8*), ABISELECT(1184,876), "S20571C1");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C9*)(S20571C8*), ABISELECT(1424,1048), "S20571C1");
    check_base_class_offset(lv, (S20571C7*)(S20571C9*)(S20571C8*), ABISELECT(1408,1044), "S20571C1");
    check_base_class_offset(lv, (S20571C9*)(S20571C8*), 0, "S20571C1");
    /*is_ambiguous_... S20571C8::S20571C10 */ AMB_check_base_class_offset(lv, (S20571C10*)(S20571C8*), ABISELECT(1840,1352), "S20571C1");
    check_base_class_offset(lv, (S20571C8*), 0, "S20571C1");
    check_base_class_offset(lv, (S20571C10*)(S20571C11*), ABISELECT(16592,12260), "S20571C1");
    check_base_class_offset(lv, (S20570C5*)(S20571C7*)(S20571C12*)(S20571C11*), ABISELECT(17792,13140), "S20571C1");
    check_base_class_offset(lv, (S20571C7*)(S20571C12*)(S20571C11*), ABISELECT(17776,13136), "S20571C1");
    check_base_class_offset(lv, (S20571C12*)(S20571C11*), ABISELECT(17776,13136), "S20571C1");
    check_base_class_offset(lv, (S20571C11*), ABISELECT(16592,12260), "S20571C1");
    /*is_ambiguous_... S20571C1::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(3184,2340), "S20571C1");
    check_field_offset(lv, s20571c1f0, ABISELECT(3408,2508), "S20571C1.s20571c1f0");
    check_field_offset(lv, s20571c1f1, ABISELECT(3488,2548), "S20571C1.s20571c1f1");
    set_bf_and_test(lv, s20571c1f2, ABISELECT(3490,2550), 0, 3, 1, "S20571C1");
    set_bf_and_test(lv, s20571c1f2, ABISELECT(3490,2550), 0, 3, hide_sll(1LL<<2), "S20571C1");
    set_bf_and_test(lv, s20571c1f3, ABISELECT(3492,2552), 0, 16, 1, "S20571C1");
    set_bf_and_test(lv, s20571c1f3, ABISELECT(3492,2552), 0, 16, hide_sll(1LL<<15), "S20571C1");
    check_field_offset(lv, s20571c1f4, ABISELECT(3504,2556), "S20571C1.s20571c1f4");
    check_field_offset(lv, s20571c1f5, ABISELECT(7312,5372), "S20571C1.s20571c1f5");
    check_field_offset(lv, s20571c1f6, ABISELECT(15616,11556), "S20571C1.s20571c1f6");
    check_field_offset(lv, s20571c1f7, ABISELECT(15624,11560), "S20571C1.s20571c1f7");
    check_field_offset(lv, s20571c1f8, ABISELECT(15626,11562), "S20571C1.s20571c1f8");
    check_field_offset(lv, s20571c1f9, ABISELECT(15640,11576), "S20571C1.s20571c1f9");
    test_class_info(&lv, &cd_S20571C1);
    dp->~S20571C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20571C1(Test_S20571C1, "S20571C1", ABISELECT(20176,14908));

#else // __cplusplus

extern void _ZN8S20571C1C1Ev();
extern void _ZN8S20571C1D1Ev();
Name_Map name_map_S20571C1[] = {
  NSPAIR(_ZN8S20571C1C1Ev),
  NSPAIR(_ZN8S20571C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C4;
extern VTBL_ENTRY _ZTI8S20571C4[];
extern  VTBL_ENTRY _ZTV8S20571C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C4[];
extern Class_Descriptor cd_S20571C3;
extern VTBL_ENTRY _ZTI8S20571C3[];
extern  VTBL_ENTRY _ZTV8S20571C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C3[];
extern Class_Descriptor cd_S20571C2;
extern VTBL_ENTRY _ZTI8S20571C2[];
extern  VTBL_ENTRY _ZTV8S20571C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C2[];
extern Class_Descriptor cd_S20571C6;
extern VTBL_ENTRY _ZTI8S20571C6[];
extern  VTBL_ENTRY _ZTV8S20571C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C6[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C9;
extern VTBL_ENTRY _ZTI8S20571C9[];
extern  VTBL_ENTRY _ZTV8S20571C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C9[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20571C8;
extern VTBL_ENTRY _ZTI8S20571C8[];
extern  VTBL_ENTRY _ZTV8S20571C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C8[];
extern Class_Descriptor cd_S20571C10;
extern VTBL_ENTRY _ZTI9S20571C10[];
extern  VTBL_ENTRY _ZTV9S20571C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C10[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20571C7;
extern VTBL_ENTRY _ZTI8S20571C7[];
extern  VTBL_ENTRY _ZTV8S20571C7[];
extern Class_Descriptor cd_S20571C12;
extern VTBL_ENTRY _ZTI9S20571C12[];
extern  VTBL_ENTRY _ZTV9S20571C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C12[];
extern Class_Descriptor cd_S20571C11;
extern VTBL_ENTRY _ZTI9S20571C11[];
extern  VTBL_ENTRY _ZTV9S20571C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20571C11[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S20571C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(15984,11816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20571C4,    ABISELECT(15680,11596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20571C3,    ABISELECT(15680,11596), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20571C2,    ABISELECT(15656,11584), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20571C6,    ABISELECT(16208,11984), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20571C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(1408,1044), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20571C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20571C10,    ABISELECT(1840,1352), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20571C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20571C10,    ABISELECT(16592,12260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(17792,13140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20571C7,    ABISELECT(17776,13136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20571C12,    ABISELECT(17776,13136), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20571C11,    ABISELECT(16592,12260), //bcp->offset
    49, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(3184,2340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20571C1[];
extern void _ZN8S20571C1D1Ev();
extern void _ZN8S20571C1D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
extern void _ZN8S20571C12v1Ev();
extern void _ZN8S20571C12v2Ev();
extern void _ZN8S20571C12v3Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
extern void ABISELECT(_ZThn1840_N8S20571C1D1Ev,_ZThn1352_N8S20571C1D1Ev)();
extern void ABISELECT(_ZThn1840_N8S20571C1D0Ev,_ZThn1352_N8S20571C1D0Ev)();
extern void _ZN9S20571C102v8Ev();
extern void ABISELECT(_ZTv0_n40_N8S20571C1D1Ev,_ZTv0_n20_N8S20571C1D1Ev)();
extern void ABISELECT(_ZThn15656_N8S20571C1D1Ev,_ZThn11584_N8S20571C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20571C1D0Ev,_ZTv0_n20_N8S20571C1D0Ev)();
extern void ABISELECT(_ZThn15656_N8S20571C1D0Ev,_ZThn11584_N8S20571C1D0Ev)() __attribute__((weak));
extern void _ZN8S20571C22v7Ev();
extern void ABISELECT(_ZTv0_n32_N8S20571C1D1Ev,_ZTv0_n16_N8S20571C1D1Ev)();
extern void ABISELECT(_ZThn15680_N8S20571C1D1Ev,_ZThn11596_N8S20571C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20571C1D0Ev,_ZTv0_n16_N8S20571C1D0Ev)();
extern void ABISELECT(_ZThn15680_N8S20571C1D0Ev,_ZThn11596_N8S20571C1D0Ev)() __attribute__((weak));
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C32v5Ev();
extern void _ZN8S20571C32v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S20571C1D1Ev,_ZTv0_n16_N8S20571C1D1Ev)();
extern void ABISELECT(_ZThn16592_N8S20571C1D1Ev,_ZThn12260_N8S20571C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20571C1D0Ev,_ZTv0_n16_N8S20571C1D0Ev)();
extern void ABISELECT(_ZThn16592_N8S20571C1D0Ev,_ZThn12260_N8S20571C1D0Ev)() __attribute__((weak));
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY vtc_S20571C1[] = {
  ABISELECT(16592,12260),
  ABISELECT(16208,11984),
  ABISELECT(15680,11596),
  ABISELECT(15656,11584),
  ABISELECT(15984,11816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&_ZN8S20571C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C1D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
  (VTBL_ENTRY)&_ZN8S20571C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20571C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20571C12v3Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
  ABISELECT(14144,10464),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S20571C1D1Ev,_ZThn1352_N8S20571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S20571C1D0Ev,_ZThn1352_N8S20571C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  0,
  ABISELECT(-15656,-11584),
  ABISELECT(328,232),
  ABISELECT(24,12),
  ABISELECT(-15656,-11584),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20571C1D1Ev,_ZTv0_n20_N8S20571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20571C1D0Ev,_ZTv0_n20_N8S20571C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-15680,-11596),
  ABISELECT(304,220),
  ABISELECT(-15680,-11596),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C1D1Ev,_ZTv0_n16_N8S20571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C1D0Ev,_ZTv0_n16_N8S20571C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v6Ev,
  ABISELECT(-224,-168),
  ABISELECT(-16208,-11984),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  ABISELECT(1184,876),
  ABISELECT(1184,876),
  ABISELECT(1184,876),
  0,
  ABISELECT(-16592,-12260),
  ABISELECT(-608,-444),
  ABISELECT(-16592,-12260),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C1D1Ev,_ZTv0_n16_N8S20571C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C1D0Ev,_ZTv0_n16_N8S20571C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  ABISELECT(-1792,-1320),
  ABISELECT(-17776,-13136),
  (VTBL_ENTRY)&(_ZTI8S20571C1[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern VTBL_ENTRY _ZTV8S20571C1[];
extern void _ZN8S20571C8D1Ev();
extern void _ZN8S20571C8D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C8__8S20571C1[] = {
  ABISELECT(15984,11816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C8[0]),
  (VTBL_ENTRY)&_ZN8S20571C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C8D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN8S20571C9D1Ev();
extern void _ZN8S20571C9D0Ev();
extern void _ZN9S20571C102v8Ev();
extern void _ZN8S20571C93v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C98S20571C8__8S20571C1[] = {
  ABISELECT(15984,11816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C9[0]),
  (VTBL_ENTRY)&_ZN8S20571C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C9D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
  (VTBL_ENTRY)&_ZN8S20571C93v12Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C98S20571C8__8S20571C1[] = {
  ABISELECT(15984,11816),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C108S20571C8__A1__8S20571C1[] = {
  ABISELECT(14144,10464),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void ABISELECT(_ZThn1840_N8S20571C8D1Ev,_ZThn1352_N8S20571C8D1Ev)();
extern void ABISELECT(_ZThn1840_N8S20571C8D0Ev,_ZThn1352_N8S20571C8D0Ev)();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C10__A1__8S20571C8__8S20571C1[] = {
  ABISELECT(14144,10464),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S20571C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S20571C8D1Ev,_ZThn1352_N8S20571C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S20571C8D0Ev,_ZThn1352_N8S20571C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C2D1Ev();
extern void _ZN8S20571C2D0Ev();
extern void _ZN8S20571C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C2__8S20571C1[] = {
  ABISELECT(328,232),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C2[0]),
  (VTBL_ENTRY)&_ZN8S20571C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C22v7Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20571C2D1Ev,_ZTv0_n16_N8S20571C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20571C2D1Ev,_ZThn12_N8S20571C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20571C2D0Ev,_ZTv0_n16_N8S20571C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20571C2D0Ev,_ZThn12_N8S20571C2D0Ev)() __attribute__((weak));
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C32v5Ev();
extern void _ZN8S20571C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C3__8S20571C2__8S20571C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(304,220),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20571C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C2D1Ev,_ZTv0_n16_N8S20571C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20571C2D0Ev,_ZTv0_n16_N8S20571C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v6Ev,
};
extern void _ZN8S20571C3D1Ev();
extern void _ZN8S20571C3D0Ev();
extern void _ZN8S20571C42v4Ev();
extern void _ZN8S20571C32v5Ev();
extern void _ZN8S20571C32v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C3__8S20571C1[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C3[0]),
  (VTBL_ENTRY)&_ZN8S20571C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20571C32v6Ev,
};
extern void _ZN8S20571C4D1Ev();
extern void _ZN8S20571C4D0Ev();
extern void _ZN8S20571C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20571C48S20571C3__8S20571C1[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C4[0]),
  (VTBL_ENTRY)&_ZN8S20571C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20571C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20571C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20571C6__8S20571C1[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20571C6[0]),
};
extern void _ZN9S20571C11D1Ev();
extern void _ZN9S20571C11D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C11__8S20571C1[] = {
  ABISELECT(-608,-444),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C11[0]),
  (VTBL_ENTRY)&_ZN9S20571C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C11D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN9S20571C10D1Ev();
extern void _ZN9S20571C10D0Ev();
extern void _ZN9S20571C102v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C109S20571C11__A2__8S20571C1[] = {
  ABISELECT(-608,-444),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C10[0]),
  (VTBL_ENTRY)&_ZN9S20571C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20571C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20571C102v8Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C129S20571C11__8S20571C1[] = {
  ABISELECT(-1792,-1320),
  0,
  (VTBL_ENTRY)&(_ZTI9S20571C12[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
extern void _ZN8S20571C72v9Ev();
extern void _ZN8S20571C73v10Ev();
extern void _ZN8S20571C73v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20571C12__9S20571C11__8S20571C1[] = {
  ABISELECT(-1792,-1320),
  ABISELECT(-1184,-876),
  (VTBL_ENTRY)&(_ZTI9S20571C11[0]),
  (VTBL_ENTRY)&_ZN8S20571C72v9Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20571C73v11Ev,
};
static  VTT_ENTRY vtt_S20571C1[] = {
  {&(_ZTV8S20571C1[7]),  7,66},
  {&(_tg__ZTV8S20571C8__8S20571C1[3]),  3,7},
  {&(_tg__ZTV8S20571C98S20571C8__8S20571C1[3]),  3,7},
  {&(_tg__ZTV9S20571C108S20571C98S20571C8__8S20571C1[3]),  3,6},
  {&(_tg__ZTV9S20571C108S20571C8__A1__8S20571C1[3]),  3,6},
  {&(_tg__ZTV9S20571C10__A1__8S20571C8__8S20571C1[3]),  3,6},
  {&(_ZTV8S20571C1[31]),  31,66},
  {&(_ZTV8S20571C1[41]),  41,66},
  {&(_ZTV8S20571C1[49]),  49,66},
  {&(_ZTV8S20571C1[22]),  22,66},
  {&(_ZTV8S20571C1[57]),  57,66},
  {&(_ZTV8S20571C1[63]),  63,66},
  {&(_tg__ZTV8S20571C2__8S20571C1[4]),  4,7},
  {&(_tg__ZTV8S20571C3__8S20571C2__8S20571C1[7]),  7,12},
  {&(_tg__ZTV8S20571C3__8S20571C1[3]),  3,8},
  {&(_tg__ZTV8S20571C48S20571C3__8S20571C1[3]),  3,6},
  {&(_tg__ZTV8S20571C6__8S20571C1[3]),  3,3},
  {&(_tg__ZTV9S20571C11__8S20571C1[3]),  3,6},
  {&(_tg__ZTV9S20571C109S20571C11__A2__8S20571C1[3]),  3,6},
  {&(_tg__ZTV9S20571C129S20571C11__8S20571C1[3]),  3,6},
  {&(_tg__ZTV9S20571C12__9S20571C11__8S20571C1[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S20571C1[];
extern  VTBL_ENTRY _ZTV8S20571C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20571C1[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20571C2D0Ev,_ZTv0_n16_N8S20571C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20571C2D0Ev,_ZThn12_N8S20571C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20571C2D1Ev,_ZTv0_n16_N8S20571C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20571C2D1Ev,_ZThn12_N8S20571C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20571C1D0Ev,_ZTv0_n16_N8S20571C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16592_N8S20571C1D0Ev,_ZThn12260_N8S20571C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15680_N8S20571C1D0Ev,_ZThn11596_N8S20571C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20571C1D1Ev,_ZTv0_n16_N8S20571C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16592_N8S20571C1D1Ev,_ZThn12260_N8S20571C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15680_N8S20571C1D1Ev,_ZThn11596_N8S20571C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20571C1D0Ev,_ZTv0_n20_N8S20571C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15656_N8S20571C1D0Ev,_ZThn11584_N8S20571C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20571C1D1Ev,_ZTv0_n20_N8S20571C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn15656_N8S20571C1D1Ev,_ZThn11584_N8S20571C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20571C1 = {  "S20571C1", // class name
  bases_S20571C1, 18,
  &(vtc_S20571C1[0]), // expected_vtbl_contents
  &(vtt_S20571C1[0]), // expected_vtt_contents
  ABISELECT(20176,14908), // object size
  NSPAIRA(_ZTI8S20571C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20571C1),66, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20571C1),21, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C2  : virtual S20570C5 {
  __tsi64 s7389c2f0[4];
  short s7389c2f1;
  int s7389c2f2;
  __tsi64 s7389c2f3;
  int s7389c2f4;
  virtual  ~S7389C2(); // _ZN7S7389C2D2Ev
  virtual void  v1(); // _ZN7S7389C22v1Ev
  S7389C2(); // tgen
};
//SIG(-1 S7389C2) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FL[4] Fs Fi FL Fi}


 S7389C2 ::~S7389C2(){ note_dtor("S7389C2", this);}
void  S7389C2 ::v1(){vfunc_called(this, "_ZN7S7389C22v1Ev");}
S7389C2 ::S7389C2(){ note_ctor("S7389C2", this);} // tgen

static void Test_S7389C2()
{
  extern Class_Descriptor cd_S7389C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,57)];
    init_test(&cd_S7389C2, buf);
    S7389C2 *dp, &lv = *(dp=new (buf) S7389C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,224), "sizeof(S7389C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C2)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(64,56), "S7389C2");
    check_field_offset(lv, s7389c2f0, ABISELECT(8,4), "S7389C2.s7389c2f0");
    check_field_offset(lv, s7389c2f1, ABISELECT(40,36), "S7389C2.s7389c2f1");
    check_field_offset(lv, s7389c2f2, ABISELECT(44,40), "S7389C2.s7389c2f2");
    check_field_offset(lv, s7389c2f3, ABISELECT(48,44), "S7389C2.s7389c2f3");
    check_field_offset(lv, s7389c2f4, ABISELECT(56,52), "S7389C2.s7389c2f4");
    test_class_info(&lv, &cd_S7389C2);
    dp->~S7389C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C2(Test_S7389C2, "S7389C2", ABISELECT(288,224));

#else // __cplusplus

extern void _ZN7S7389C2C1Ev();
extern void _ZN7S7389C2D2Ev();
Name_Map name_map_S7389C2[] = {
  NSPAIR(_ZN7S7389C2C1Ev),
  NSPAIR(_ZN7S7389C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7389C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7389C2[];
extern void _ZN7S7389C2D1Ev();
extern void _ZN7S7389C2D0Ev();
extern void _ZN7S7389C22v1Ev();
static  VTBL_ENTRY vtc_S7389C2[] = {
  ABISELECT(64,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C2[0]),
  (VTBL_ENTRY)&_ZN7S7389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S7389C2[];
static  VTT_ENTRY vtt_S7389C2[] = {
  {&(_ZTV7S7389C2[3]),  3,6},
};
extern VTBL_ENTRY _ZTI7S7389C2[];
extern  VTBL_ENTRY _ZTV7S7389C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C2[];
Class_Descriptor cd_S7389C2 = {  "S7389C2", // class name
  bases_S7389C2, 1,
  &(vtc_S7389C2[0]), // expected_vtbl_contents
  &(vtt_S7389C2[0]), // expected_vtt_contents
  ABISELECT(288,224), // object size
  NSPAIRA(_ZTI7S7389C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7389C2),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7389C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C6  : S20570C5 {
  long double s7389c6f0;
  short s7389c6f1:16;
  int s7389c6f2[7];
  long double s7389c6f3;
  char s7389c6f4:6;
  int s7389c6f5:32;
  __tsi64 s7389c6f6[2];
  int s7389c6f7;
  virtual void  v2(); // _ZN7S7389C62v2Ev
  virtual void  v3(); // _ZN7S7389C62v3Ev
  virtual void  v4(); // _ZN7S7389C62v4Ev
  ~S7389C6(); // tgen
  S7389C6(); // tgen
};
//SIG(-1 S7389C6) C1{ BC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi}


void  S7389C6 ::v2(){vfunc_called(this, "_ZN7S7389C62v2Ev");}
void  S7389C6 ::v3(){vfunc_called(this, "_ZN7S7389C62v3Ev");}
void  S7389C6 ::v4(){vfunc_called(this, "_ZN7S7389C62v4Ev");}
S7389C6 ::~S7389C6(){ note_dtor("S7389C6", this);} // tgen
S7389C6 ::S7389C6(){ note_ctor("S7389C6", this);} // tgen

static void Test_S7389C6()
{
  extern Class_Descriptor cd_S7389C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,65)];
    init_test(&cd_S7389C6, buf);
    S7389C6 *dp, &lv = *(dp=new (buf) S7389C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,256), "sizeof(S7389C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C6)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(16,4), "S7389C6");
    check_field_offset(lv, s7389c6f0, ABISELECT(240,172), "S7389C6.s7389c6f0");
    set_bf_and_test(lv, s7389c6f1, ABISELECT(256,184), 0, 16, 1, "S7389C6");
    set_bf_and_test(lv, s7389c6f1, ABISELECT(256,184), 0, 16, hide_sll(1LL<<15), "S7389C6");
    check_field_offset(lv, s7389c6f2, ABISELECT(260,188), "S7389C6.s7389c6f2");
    check_field_offset(lv, s7389c6f3, ABISELECT(288,216), "S7389C6.s7389c6f3");
    set_bf_and_test(lv, s7389c6f4, ABISELECT(304,228), 0, 6, 1, "S7389C6");
    set_bf_and_test(lv, s7389c6f4, ABISELECT(304,228), 0, 6, hide_sll(1LL<<5), "S7389C6");
    set_bf_and_test(lv, s7389c6f5, ABISELECT(308,232), 0, 32, 1, "S7389C6");
    set_bf_and_test(lv, s7389c6f5, ABISELECT(308,232), 0, 32, hide_sll(1LL<<31), "S7389C6");
    check_field_offset(lv, s7389c6f6, ABISELECT(312,236), "S7389C6.s7389c6f6");
    check_field_offset(lv, s7389c6f7, ABISELECT(328,252), "S7389C6.s7389c6f7");
    test_class_info(&lv, &cd_S7389C6);
    dp->~S7389C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C6(Test_S7389C6, "S7389C6", ABISELECT(336,256));

#else // __cplusplus

extern void _ZN7S7389C6C1Ev();
extern void _ZN7S7389C6D1Ev();
Name_Map name_map_S7389C6[] = {
  NSPAIR(_ZN7S7389C6C1Ev),
  NSPAIR(_ZN7S7389C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7389C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7389C6[];
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY vtc_S7389C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C6[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
Class_Descriptor cd_S7389C6 = {  "S7389C6", // class name
  bases_S7389C6, 1,
  &(vtc_S7389C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,256), // object size
  NSPAIRA(_ZTI7S7389C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7389C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C5  : virtual S7389C6 {
  ::S7388C7 s7389c5f0[5];
  char s7389c5f1[3];
  void *s7389c5f2;
  void *s7389c5f3;
  short s7389c5f4[4];
  int s7389c5f5[6];
  ::S7389C2 s7389c5f6;
  int s7389c5f7;
  void *s7389c5f8[8];
  int s7389c5f9;
  ::S7388C8 s7389c5f10;
  char s7389c5f11;
  int s7389c5f12;
  int s7389c5f13[7];
  ~S7389C5(); // tgen
  S7389C5(); // tgen
};
//SIG(-1 S7389C5) C1{ VBC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} FU4{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}[5] Fc[3] Fp Fp Fs[4] Fi[6] FC5{ VBC3 vd v4 FL[4] Fs Fi FL Fi} Fi Fp[8] Fi FU6{ m FD[10] Fs Fs Fp Fl Fp FD[9]} Fc Fi Fi[7]}


S7389C5 ::~S7389C5(){ note_dtor("S7389C5", this);} // tgen
S7389C5 ::S7389C5(){ note_ctor("S7389C5", this);} // tgen

static void Test_S7389C5()
{
  extern Class_Descriptor cd_S7389C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(73,217)];
    init_test(&cd_S7389C5, buf);
    S7389C5 *dp, &lv = *(dp=new (buf) S7389C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1152,864), "sizeof(S7389C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C5)");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*), ABISELECT(832,612), "S7389C5");
    check_base_class_offset(lv, (S7389C6*), ABISELECT(816,608), "S7389C5");
    check_field_offset(lv, s7389c5f0, ABISELECT(16,4), "S7389C5.s7389c5f0");
    check_field_offset(lv, s7389c5f1, ABISELECT(176,144), "S7389C5.s7389c5f1");
    check_field_offset(lv, s7389c5f2, ABISELECT(184,148), "S7389C5.s7389c5f2");
    check_field_offset(lv, s7389c5f3, ABISELECT(192,152), "S7389C5.s7389c5f3");
    check_field_offset(lv, s7389c5f4, ABISELECT(200,156), "S7389C5.s7389c5f4");
    check_field_offset(lv, s7389c5f5, ABISELECT(208,164), "S7389C5.s7389c5f5");
    check_field_offset(lv, s7389c5f6, ABISELECT(240,188), "S7389C5.s7389c5f6");
    check_field_offset(lv, s7389c5f7, ABISELECT(528,412), "S7389C5.s7389c5f7");
    check_field_offset(lv, s7389c5f8, ABISELECT(536,416), "S7389C5.s7389c5f8");
    check_field_offset(lv, s7389c5f9, ABISELECT(600,448), "S7389C5.s7389c5f9");
    check_field_offset(lv, s7389c5f10, ABISELECT(608,452), "S7389C5.s7389c5f10");
    check_field_offset(lv, s7389c5f11, ABISELECT(768,572), "S7389C5.s7389c5f11");
    check_field_offset(lv, s7389c5f12, ABISELECT(772,576), "S7389C5.s7389c5f12");
    check_field_offset(lv, s7389c5f13, ABISELECT(776,580), "S7389C5.s7389c5f13");
    test_class_info(&lv, &cd_S7389C5);
    dp->~S7389C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C5(Test_S7389C5, "S7389C5", ABISELECT(1152,864));

#else // __cplusplus

extern void _ZN7S7389C5C1Ev();
extern void _ZN7S7389C5D1Ev();
Name_Map name_map_S7389C5[] = {
  NSPAIR(_ZN7S7389C5C1Ev),
  NSPAIR(_ZN7S7389C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
static Base_Class bases_S7389C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(832,612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(816,608), //bcp->offset
    3, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7389C5[];
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY vtc_S7389C5[] = {
  ABISELECT(816,608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C5[0]),
  0,
  0,
  0,
  ABISELECT(-816,-608),
  (VTBL_ENTRY)&(_ZTI7S7389C5[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern VTBL_ENTRY _ZTV7S7389C5[];
static  VTT_ENTRY vtt_S7389C5[] = {
  {&(_ZTV7S7389C5[3]),  3,11},
  {&(_ZTV7S7389C5[8]),  8,11},
};
extern VTBL_ENTRY _ZTI7S7389C5[];
extern  VTBL_ENTRY _ZTV7S7389C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C5[];
Class_Descriptor cd_S7389C5 = {  "S7389C5", // class name
  bases_S7389C5, 2,
  &(vtc_S7389C5[0]), // expected_vtbl_contents
  &(vtt_S7389C5[0]), // expected_vtt_contents
  ABISELECT(1152,864), // object size
  NSPAIRA(_ZTI7S7389C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7389C5),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7389C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C13  : virtual S20570C5 {
  ::S20570C5 s7389c13f0[5];
  __tsi64 s7389c13f1;
  short s7389c13f2:5;
  char  :0;
  void *s7389c13f4;
  void *s7389c13f5;
  int s7389c13f6;
  __tsi64 s7389c13f7;
  virtual  ~S7389C13(); // _ZN8S7389C13D2Ev
  virtual void  v5(); // _ZN8S7389C132v5Ev
  S7389C13(); // tgen
};
//SIG(-1 S7389C13) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL}


 S7389C13 ::~S7389C13(){ note_dtor("S7389C13", this);}
void  S7389C13 ::v5(){vfunc_called(this, "_ZN8S7389C132v5Ev");}
S7389C13 ::S7389C13(){ note_ctor("S7389C13", this);} // tgen

static void Test_S7389C13()
{
  extern Class_Descriptor cd_S7389C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(89,262)];
    init_test(&cd_S7389C13, buf);
    S7389C13 *dp, &lv = *(dp=new (buf) S7389C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1408,1044), "sizeof(S7389C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C13)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S7389C13");
    check_field_offset(lv, s7389c13f0, ABISELECT(16,4), "S7389C13.s7389c13f0");
    check_field_offset(lv, s7389c13f1, ABISELECT(1136,844), "S7389C13.s7389c13f1");
    set_bf_and_test(lv, s7389c13f2, ABISELECT(1144,852), 0, 5, 1, "S7389C13");
    set_bf_and_test(lv, s7389c13f2, ABISELECT(1144,852), 0, 5, hide_sll(1LL<<4), "S7389C13");
    check_field_offset(lv, s7389c13f4, ABISELECT(1152,856), "S7389C13.s7389c13f4");
    check_field_offset(lv, s7389c13f5, ABISELECT(1160,860), "S7389C13.s7389c13f5");
    check_field_offset(lv, s7389c13f6, ABISELECT(1168,864), "S7389C13.s7389c13f6");
    check_field_offset(lv, s7389c13f7, ABISELECT(1176,868), "S7389C13.s7389c13f7");
    test_class_info(&lv, &cd_S7389C13);
    dp->~S7389C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C13(Test_S7389C13, "S7389C13", ABISELECT(1408,1044));

#else // __cplusplus

extern void _ZN8S7389C13C1Ev();
extern void _ZN8S7389C13D2Ev();
Name_Map name_map_S7389C13[] = {
  NSPAIR(_ZN8S7389C13C1Ev),
  NSPAIR(_ZN8S7389C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7389C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7389C13[];
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY vtc_S7389C13[] = {
  ABISELECT(1184,876),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern VTBL_ENTRY _ZTV8S7389C13[];
static  VTT_ENTRY vtt_S7389C13[] = {
  {&(_ZTV8S7389C13[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
Class_Descriptor cd_S7389C13 = {  "S7389C13", // class name
  bases_S7389C13, 1,
  &(vtc_S7389C13[0]), // expected_vtbl_contents
  &(vtt_S7389C13[0]), // expected_vtt_contents
  ABISELECT(1408,1044), // object size
  NSPAIRA(_ZTI8S7389C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7389C13),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7389C13),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C12  : S7389C13 , S20570C5 , S7389C6 {
  long double s7389c12f0;
  void *s7389c12f1;
  short s7389c12f2[6];
  void *s7389c12f3;
  int s7389c12f4;
  long double s7389c12f5;
  int s7389c12f6;
  virtual void  v6(); // _ZN8S7389C122v6Ev
  ~S7389C12(); // tgen
  S7389C12(); // tgen
};
//SIG(-1 S7389C12) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC4{ BC3 v3 v4 v5 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} v1 FD Fp Fs[6] Fp Fi FD Fi}


void  S7389C12 ::v6(){vfunc_called(this, "_ZN8S7389C122v6Ev");}
S7389C12 ::~S7389C12(){ note_dtor("S7389C12", this);} // tgen
S7389C12 ::S7389C12(){ note_ctor("S7389C12", this);} // tgen

static void Test_S7389C12()
{
  extern Class_Descriptor cd_S7389C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(130,381)];
    init_test(&cd_S7389C12, buf);
    S7389C12 *dp, &lv = *(dp=new (buf) S7389C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2064,1520), "sizeof(S7389C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C12)");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*), ABISELECT(1840,1352), "S7389C12");
    check_base_class_offset(lv, (S7389C13*), 0, "S7389C12");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(1184,876), "S7389C12");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*), ABISELECT(1424,1048), "S7389C12");
    check_base_class_offset(lv, (S7389C6*), ABISELECT(1408,1044), "S7389C12");
    check_field_offset(lv, s7389c12f0, ABISELECT(1744,1300), "S7389C12.s7389c12f0");
    check_field_offset(lv, s7389c12f1, ABISELECT(1760,1312), "S7389C12.s7389c12f1");
    check_field_offset(lv, s7389c12f2, ABISELECT(1768,1316), "S7389C12.s7389c12f2");
    check_field_offset(lv, s7389c12f3, ABISELECT(1784,1328), "S7389C12.s7389c12f3");
    check_field_offset(lv, s7389c12f4, ABISELECT(1792,1332), "S7389C12.s7389c12f4");
    check_field_offset(lv, s7389c12f5, ABISELECT(1808,1336), "S7389C12.s7389c12f5");
    check_field_offset(lv, s7389c12f6, ABISELECT(1824,1348), "S7389C12.s7389c12f6");
    test_class_info(&lv, &cd_S7389C12);
    dp->~S7389C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C12(Test_S7389C12, "S7389C12", ABISELECT(2064,1520));

#else // __cplusplus

extern void _ZN8S7389C12C1Ev();
extern void _ZN8S7389C12D1Ev();
Name_Map name_map_S7389C12[] = {
  NSPAIR(_ZN8S7389C12C1Ev),
  NSPAIR(_ZN8S7389C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
static Base_Class bases_S7389C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1840,1352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7389C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7389C12[];
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY vtc_S7389C12[] = {
  ABISELECT(1840,1352),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern VTBL_ENTRY _ZTV8S7389C12[];
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C13__8S7389C12[] = {
  ABISELECT(1840,1352),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
static  VTT_ENTRY vtt_S7389C12[] = {
  {&(_ZTV8S7389C12[3]),  3,12},
  {&(_tg__ZTV8S7389C13__8S7389C12[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
Class_Descriptor cd_S7389C12 = {  "S7389C12", // class name
  bases_S7389C12, 5,
  &(vtc_S7389C12[0]), // expected_vtbl_contents
  &(vtt_S7389C12[0]), // expected_vtt_contents
  ABISELECT(2064,1520), // object size
  NSPAIRA(_ZTI8S7389C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7389C12),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7389C12),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C11  : virtual S20570C5 , S7389C12 , S7389C13 {
  long double s7389c11f0[9];
  short s7389c11f1;
  virtual  ~S7389C11(); // _ZN8S7389C11D2Ev
  S7389C11(); // tgen
};
//SIG(-1 S7389C11) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} BC3{ BC4{ VBC2 vd v1 FC2[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC2 BC5{ BC2 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} v5 FD Fp Fs[6] Fp Fi FD Fi} BC4 vd FD[9] Fs}


 S7389C11 ::~S7389C11(){ note_dtor("S7389C11", this);}
S7389C11 ::S7389C11(){ note_ctor("S7389C11", this);} // tgen

static void Test_S7389C11()
{
  extern Class_Descriptor cd_S7389C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(214,628)];
    init_test(&cd_S7389C11, buf);
    S7389C11 *dp, &lv = *(dp=new (buf) S7389C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3408,2508), "sizeof(S7389C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C11)");
    /*is_ambiguous_... S7389C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(3184,2340), "S7389C11");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C12*), ABISELECT(3184,2340), "S7389C11");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C13*), ABISELECT(3184,2340), "S7389C11");
    check_base_class_offset(lv, (S7389C13*)(S7389C12*), 0, "S7389C11");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C12*), ABISELECT(1184,876), "S7389C11");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C12*), ABISELECT(1424,1048), "S7389C11");
    check_base_class_offset(lv, (S7389C6*)(S7389C12*), ABISELECT(1408,1044), "S7389C11");
    check_base_class_offset(lv, (S7389C12*), 0, "S7389C11");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S7389C13*), ABISELECT(1840,1352), "S7389C11");
    check_field_offset(lv, s7389c11f0, ABISELECT(3024,2228), "S7389C11.s7389c11f0");
    check_field_offset(lv, s7389c11f1, ABISELECT(3168,2336), "S7389C11.s7389c11f1");
    test_class_info(&lv, &cd_S7389C11);
    dp->~S7389C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C11(Test_S7389C11, "S7389C11", ABISELECT(3408,2508));

#else // __cplusplus

extern void _ZN8S7389C11C1Ev();
extern void _ZN8S7389C11D2Ev();
Name_Map name_map_S7389C11[] = {
  NSPAIR(_ZN8S7389C11C1Ev),
  NSPAIR(_ZN8S7389C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C12;
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
static Base_Class bases_S7389C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(3184,2340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7389C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(1408,1044), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7389C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7389C13,    ABISELECT(1840,1352), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7389C11[];
extern void _ZN8S7389C11D1Ev();
extern void _ZN8S7389C11D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev)();
extern void ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY vtc_S7389C11[] = {
  ABISELECT(3184,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&_ZN8S7389C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(1344,988),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern VTBL_ENTRY _ZTV8S7389C11[];
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C12__8S7389C11[] = {
  ABISELECT(3184,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C12__8S7389C11[] = {
  ABISELECT(3184,2340),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C13__A1__8S7389C11[] = {
  ABISELECT(1344,988),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
static  VTT_ENTRY vtt_S7389C11[] = {
  {&(_ZTV8S7389C11[3]),  3,18},
  {&(_tg__ZTV8S7389C12__8S7389C11[3]),  3,7},
  {&(_tg__ZTV8S7389C138S7389C12__8S7389C11[3]),  3,6},
  {&(_tg__ZTV8S7389C13__A1__8S7389C11[3]),  3,6},
  {&(_ZTV8S7389C11[15]),  15,18},
};
extern VTBL_ENTRY _ZTI8S7389C11[];
extern  VTBL_ENTRY _ZTV8S7389C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C11[];
Class_Descriptor cd_S7389C11 = {  "S7389C11", // class name
  bases_S7389C11, 7,
  &(vtc_S7389C11[0]), // expected_vtbl_contents
  &(vtt_S7389C11[0]), // expected_vtt_contents
  ABISELECT(3408,2508), // object size
  NSPAIRA(_ZTI8S7389C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7389C11),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7389C11),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C9  : S7389C2 , S20570C17 , virtual S7389C11 {
  void *s7389c9f0;
  int s7389c9f1;
  ::S7388C14 s7389c9f2;
  char s7389c9f3[9];
  ::S7388C8 s7389c9f4;
  __tsi64 s7389c9f5:64;
  virtual  ~S7389C9(); // _ZN7S7389C9D2Ev
  virtual void  v7(); // _ZN7S7389C92v7Ev
  S7389C9(); // tgen
};
//SIG(-1 S7389C9) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FL[4] Fs Fi FL Fi} BC4{ vd m Fp Fl Fi Fp} VBC5{ VBC3 BC6{ BC7{ VBC3 vd v3 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC8{ BC3 v4 v5 v6 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} v7 FD Fp Fs[6] Fp Fi FD Fi} BC7 vd FD[9] Fs} vd v1 Fp Fi FC9{ vd v8 FD Fi[2] Fc Fp FC4 Fi Fp Fi[2]} Fc[9] FU10{ m FD[10] Fs Fs Fp Fl Fp FD[9]} FL:64}


 S7389C9 ::~S7389C9(){ note_dtor("S7389C9", this);}
void  S7389C9 ::v7(){vfunc_called(this, "_ZN7S7389C92v7Ev");}
S7389C9 ::S7389C9(){ note_ctor("S7389C9", this);} // tgen

static void Test_S7389C9()
{
  extern Class_Descriptor cd_S7389C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(242,701)];
    init_test(&cd_S7389C9, buf);
    S7389C9 *dp, &lv = *(dp=new (buf) S7389C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3856,2800), "sizeof(S7389C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C9)");
    check_base_class_offset(lv, (S20570C5*)(S7389C2*), ABISELECT(448,292), "S7389C9");
    /*is_ambiguous_... S7389C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C11*), ABISELECT(448,292), "S7389C9");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C12*)(S7389C11*), ABISELECT(448,292), "S7389C9");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C11*), ABISELECT(448,292), "S7389C9");
    check_base_class_offset(lv, (S7389C2*), 0, "S7389C9");
    check_base_class_offset(lv, (S20570C17*), ABISELECT(64,56), "S7389C9");
    check_base_class_offset(lv, (S7389C13*)(S7389C12*)(S7389C11*), ABISELECT(672,460), "S7389C9");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C12*)(S7389C11*), ABISELECT(1856,1336), "S7389C9");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C12*)(S7389C11*), ABISELECT(2096,1508), "S7389C9");
    check_base_class_offset(lv, (S7389C6*)(S7389C12*)(S7389C11*), ABISELECT(2080,1504), "S7389C9");
    check_base_class_offset(lv, (S7389C12*)(S7389C11*), ABISELECT(672,460), "S7389C9");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S7389C13*)(S7389C11*), ABISELECT(2512,1812), "S7389C9");
    check_base_class_offset(lv, (S7389C11*), ABISELECT(672,460), "S7389C9");
    check_field_offset(lv, s7389c9f0, ABISELECT(104,76), "S7389C9.s7389c9f0");
    check_field_offset(lv, s7389c9f1, ABISELECT(112,80), "S7389C9.s7389c9f1");
    check_field_offset(lv, s7389c9f2, ABISELECT(128,84), "S7389C9.s7389c9f2");
    check_field_offset(lv, s7389c9f3, ABISELECT(256,152), "S7389C9.s7389c9f3");
    check_field_offset(lv, s7389c9f4, ABISELECT(272,164), "S7389C9.s7389c9f4");
    set_bf_and_test(lv, s7389c9f5, ABISELECT(432,284), 0, 64, 1, "S7389C9");
    set_bf_and_test(lv, s7389c9f5, ABISELECT(432,284), 0, 64, hide_sll(1LL<<63), "S7389C9");
    test_class_info(&lv, &cd_S7389C9);
    dp->~S7389C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C9(Test_S7389C9, "S7389C9", ABISELECT(3856,2800));

#else // __cplusplus

extern void _ZN7S7389C9C1Ev();
extern void _ZN7S7389C9D2Ev();
Name_Map name_map_S7389C9[] = {
  NSPAIR(_ZN7S7389C9C1Ev),
  NSPAIR(_ZN7S7389C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C2;
extern VTBL_ENTRY _ZTI7S7389C2[];
extern  VTBL_ENTRY _ZTV7S7389C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C2[];
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C12;
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S7389C11;
extern VTBL_ENTRY _ZTI8S7389C11[];
extern  VTBL_ENTRY _ZTV8S7389C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C11[];
static Base_Class bases_S7389C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(448,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7389C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C17,    ABISELECT(64,56), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7389C13,    ABISELECT(672,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1856,1336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(2096,1508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(2080,1504), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7389C12,    ABISELECT(672,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7389C13,    ABISELECT(2512,1812), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7389C11,    ABISELECT(672,460), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7389C9[];
extern void _ZN7S7389C9D1Ev();
extern void _ZN7S7389C9D0Ev();
extern void _ZN7S7389C22v1Ev();
extern void _ZN7S7389C92v7Ev();
extern void ABISELECT(_ZThn64_N7S7389C9D1Ev,_ZThn56_N7S7389C9D1Ev)();
extern void ABISELECT(_ZThn64_N7S7389C9D0Ev,_ZThn56_N7S7389C9D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev)();
extern void ABISELECT(_ZThn672_N7S7389C9D1Ev,_ZThn460_N7S7389C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev)();
extern void ABISELECT(_ZThn672_N7S7389C9D0Ev,_ZThn460_N7S7389C9D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C9D1Ev,_ZTvn1352_n16_N7S7389C9D1Ev)();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C9D0Ev,_ZTvn1352_n16_N7S7389C9D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY vtc_S7389C9[] = {
  ABISELECT(672,460),
  ABISELECT(448,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&_ZN7S7389C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7389C92v7Ev,
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7389C9D1Ev,_ZThn56_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7389C9D0Ev,_ZThn56_N7S7389C9D0Ev),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-672,-460),
  ABISELECT(-224,-168),
  ABISELECT(-672,-460),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-2080,-1504),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(-2064,-1520),
  ABISELECT(-2512,-1812),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C9D1Ev,_ZTvn1352_n16_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C9D0Ev,_ZTvn1352_n16_N7S7389C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern VTBL_ENTRY _ZTV7S7389C9[];
extern void _ZN7S7389C2D1Ev();
extern void _ZN7S7389C2D0Ev();
extern void _ZN7S7389C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C2__7S7389C9[] = {
  ABISELECT(448,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C2[0]),
  (VTBL_ENTRY)&_ZN7S7389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
};
extern void _ZN8S7389C11D1Ev();
extern void _ZN8S7389C11D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C11__7S7389C9[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&_ZN8S7389C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C128S7389C11__7S7389C9[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C128S7389C11__7S7389C9[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C11__A1__7S7389C9[] = {
  ABISELECT(-2064,-1520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev)();
extern void ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C13__A1__8S7389C11__7S7389C9[] = {
  ABISELECT(-2064,-1520),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
static  VTT_ENTRY vtt_S7389C9[] = {
  {&(_ZTV7S7389C9[4]),  4,36},
  {&(_tg__ZTV7S7389C2__7S7389C9[3]),  3,6},
  {&(_ZTV7S7389C9[21]),  21,36},
  {&(_ZTV7S7389C9[27]),  27,36},
  {&(_ZTV7S7389C9[33]),  33,36},
  {&(_tg__ZTV8S7389C11__7S7389C9[3]),  3,7},
  {&(_tg__ZTV8S7389C128S7389C11__7S7389C9[3]),  3,7},
  {&(_tg__ZTV8S7389C138S7389C128S7389C11__7S7389C9[3]),  3,6},
  {&(_tg__ZTV8S7389C138S7389C11__A1__7S7389C9[3]),  3,6},
  {&(_tg__ZTV8S7389C13__A1__8S7389C11__7S7389C9[3]),  3,6},
};
extern VTBL_ENTRY _ZTI7S7389C9[];
extern  VTBL_ENTRY _ZTV7S7389C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C9[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7389C9D0Ev,_ZThn460_N7S7389C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7389C9D1Ev,_ZThn460_N7S7389C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7389C9 = {  "S7389C9", // class name
  bases_S7389C9, 10,
  &(vtc_S7389C9[0]), // expected_vtbl_contents
  &(vtt_S7389C9[0]), // expected_vtt_contents
  ABISELECT(3856,2800), // object size
  NSPAIRA(_ZTI7S7389C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7389C9),36, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7389C9),10, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C4  : virtual S7389C5 , virtual S7389C9 {
  ::S7389C5 s7389c4f0;
  long s7389c4f1;
  int s7389c4f2;
  char s7389c4f3;
  char s7389c4f4:4;
  __tsi64 s7389c4f5;
  virtual  ~S7389C4(); // _ZN7S7389C4D2Ev
  virtual void  v8(); // _ZN7S7389C42v8Ev
  S7389C4(); // tgen
};
//SIG(-1 S7389C4) C1{ VBC2{ VBC3{ BC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} FU5{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}[5] Fc[3] Fp Fp Fs[4] Fi[6] FC6{ VBC4 vd v5 FL[4] Fs Fi FL Fi} Fi Fp[8] Fi FU7{ m FD[10] Fs Fs Fp Fl Fp FD[9]} Fc Fi Fi[7]} VBC8{ BC6 BC9{ vd m Fp Fl Fi Fp} VBC10{ VBC4 BC11{ BC12{ VBC4 vd v6 FC4[5] FL Fs:5 Fc:0 Fp Fp Fi FL} BC4 BC3 v7 FD Fp Fs[6] Fp Fi FD Fi} BC12 vd FD[9] Fs} vd v8 Fp Fi FC13{ vd v9 FD Fi Fi Fc Fp FC9 Fi Fp Fi[2]} Fc[9] FU7 FL:64} vd v1 FC2 Fl Fi Fc Fc:4 FL}


 S7389C4 ::~S7389C4(){ note_dtor("S7389C4", this);}
void  S7389C4 ::v8(){vfunc_called(this, "_ZN7S7389C42v8Ev");}
S7389C4 ::S7389C4(){ note_ctor("S7389C4", this);} // tgen

static void Test_S7389C4()
{
  extern Class_Descriptor cd_S7389C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(389,1139)];
    init_test(&cd_S7389C4, buf);
    S7389C4 *dp, &lv = *(dp=new (buf) S7389C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6208,4552), "sizeof(S7389C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C4)");
    /*is_ambiguous_... S7389C4::S7389C6 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C6*), ABISELECT(2032,1500), "S7389C4");
    check_base_class_offset(lv, (S7389C6*)(S7389C5*), ABISELECT(2016,1496), "S7389C4");
    check_base_class_offset(lv, (S7389C5*), ABISELECT(1200,888), "S7389C4");
    check_base_class_offset(lv, (S20570C5*)(S7389C2*)(S7389C9*), ABISELECT(2800,2044), "S7389C4");
    /*is_ambiguous_... S7389C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C11*), ABISELECT(2800,2044), "S7389C4");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C12*)(S7389C11*), ABISELECT(2800,2044), "S7389C4");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C11*), ABISELECT(2800,2044), "S7389C4");
    check_base_class_offset(lv, (S7389C2*)(S7389C9*), ABISELECT(2352,1752), "S7389C4");
    check_base_class_offset(lv, (S20570C17*)(S7389C9*), ABISELECT(2416,1808), "S7389C4");
    check_base_class_offset(lv, (S7389C13*)(S7389C12*)(S7389C11*), ABISELECT(3024,2212), "S7389C4");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C12*)(S7389C11*), ABISELECT(4208,3088), "S7389C4");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C12*)(S7389C11*), ABISELECT(4448,3260), "S7389C4");
    check_base_class_offset(lv, (S7389C6*)(S7389C12*)(S7389C11*), ABISELECT(4432,3256), "S7389C4");
    check_base_class_offset(lv, (S7389C12*)(S7389C11*), ABISELECT(3024,2212), "S7389C4");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S7389C13*)(S7389C11*), ABISELECT(4864,3564), "S7389C4");
    check_base_class_offset(lv, (S7389C11*)(S7389C9*), ABISELECT(3024,2212), "S7389C4");
    check_base_class_offset(lv, (S7389C9*), ABISELECT(2352,1752), "S7389C4");
    check_field_offset(lv, s7389c4f0, ABISELECT(16,4), "S7389C4.s7389c4f0");
    check_field_offset(lv, s7389c4f1, ABISELECT(1168,868), "S7389C4.s7389c4f1");
    check_field_offset(lv, s7389c4f2, ABISELECT(1176,872), "S7389C4.s7389c4f2");
    check_field_offset(lv, s7389c4f3, ABISELECT(1180,876), "S7389C4.s7389c4f3");
    set_bf_and_test(lv, s7389c4f4, ABISELECT(1181,877), 0, 4, 1, "S7389C4");
    set_bf_and_test(lv, s7389c4f4, ABISELECT(1181,877), 0, 4, hide_sll(1LL<<3), "S7389C4");
    check_field_offset(lv, s7389c4f5, ABISELECT(1184,880), "S7389C4.s7389c4f5");
    test_class_info(&lv, &cd_S7389C4);
    dp->~S7389C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C4(Test_S7389C4, "S7389C4", ABISELECT(6208,4552));

#else // __cplusplus

extern void _ZN7S7389C4C1Ev();
extern void _ZN7S7389C4D2Ev();
Name_Map name_map_S7389C4[] = {
  NSPAIR(_ZN7S7389C4C1Ev),
  NSPAIR(_ZN7S7389C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C5;
extern VTBL_ENTRY _ZTI7S7389C5[];
extern  VTBL_ENTRY _ZTV7S7389C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C2;
extern VTBL_ENTRY _ZTI7S7389C2[];
extern  VTBL_ENTRY _ZTV7S7389C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C2[];
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C12;
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S7389C11;
extern VTBL_ENTRY _ZTI8S7389C11[];
extern  VTBL_ENTRY _ZTV8S7389C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C11[];
extern Class_Descriptor cd_S7389C9;
extern VTBL_ENTRY _ZTI7S7389C9[];
extern  VTBL_ENTRY _ZTV7S7389C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C9[];
static Base_Class bases_S7389C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(2032,1500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(2016,1496), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7389C5,    ABISELECT(1200,888), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(2800,2044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7389C2,    ABISELECT(2352,1752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20570C17,    ABISELECT(2416,1808), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7389C13,    ABISELECT(3024,2212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4208,3088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4448,3260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(4432,3256), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7389C12,    ABISELECT(3024,2212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7389C13,    ABISELECT(4864,3564), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7389C11,    ABISELECT(3024,2212), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7389C9,    ABISELECT(2352,1752), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7389C4[];
extern void _ZN7S7389C4D1Ev();
extern void _ZN7S7389C4D0Ev();
extern void _ZN7S7389C42v8Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S7389C4D1Ev,_ZTv0_n20_N7S7389C4D1Ev)();
extern void ABISELECT(_ZThn2352_N7S7389C4D1Ev,_ZThn1752_N7S7389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7389C4D0Ev,_ZTv0_n20_N7S7389C4D0Ev)();
extern void ABISELECT(_ZThn2352_N7S7389C4D0Ev,_ZThn1752_N7S7389C4D0Ev)() __attribute__((weak));
extern void _ZN7S7389C22v1Ev();
extern void _ZN7S7389C92v7Ev();
extern void ABISELECT(_ZTvn64_n40_N7S7389C4D1Ev,_ZTvn56_n20_N7S7389C4D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S7389C4D0Ev,_ZTvn56_n20_N7S7389C4D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7389C4D1Ev,_ZTv0_n16_N7S7389C4D1Ev)();
extern void ABISELECT(_ZThn3024_N7S7389C4D1Ev,_ZThn2212_N7S7389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7389C4D0Ev,_ZTv0_n16_N7S7389C4D0Ev)();
extern void ABISELECT(_ZThn3024_N7S7389C4D0Ev,_ZThn2212_N7S7389C4D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C4D1Ev,_ZTvn1352_n16_N7S7389C4D1Ev)();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C4D0Ev,_ZTvn1352_n16_N7S7389C4D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY vtc_S7389C4[] = {
  ABISELECT(3024,2212),
  ABISELECT(2800,2044),
  ABISELECT(2352,1752),
  ABISELECT(2016,1496),
  ABISELECT(1200,888),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&_ZN7S7389C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C42v8Ev,
  ABISELECT(816,608),
  ABISELECT(-1200,-888),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  0,
  0,
  0,
  ABISELECT(-2016,-1496),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  0,
  0,
  ABISELECT(-2352,-1752),
  ABISELECT(672,460),
  ABISELECT(448,292),
  ABISELECT(-2352,-1752),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7389C4D1Ev,_ZTv0_n20_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7389C4D0Ev,_ZTv0_n20_N7S7389C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7389C92v7Ev,
  ABISELECT(-2416,-1808),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7389C4D1Ev,_ZTvn56_n20_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7389C4D0Ev,_ZTvn56_n20_N7S7389C4D0Ev),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-3024,-2212),
  ABISELECT(-224,-168),
  ABISELECT(-3024,-2212),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C4D1Ev,_ZTv0_n16_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C4D0Ev,_ZTv0_n16_N7S7389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-4432,-3256),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(-2064,-1520),
  ABISELECT(-4864,-3564),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C4D1Ev,_ZTvn1352_n16_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C4D0Ev,_ZTvn1352_n16_N7S7389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern VTBL_ENTRY _ZTV7S7389C4[];
static  VTBL_ENTRY _tg__ZTV7S7389C5__7S7389C4[] = {
  ABISELECT(816,608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C5[0]),
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C6__7S7389C5__7S7389C4[] = {
  0,
  0,
  0,
  ABISELECT(-816,-608),
  (VTBL_ENTRY)&(_ZTI7S7389C5[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void _ZN7S7389C9D1Ev();
extern void _ZN7S7389C9D0Ev();
extern void _ZN7S7389C22v1Ev();
extern void _ZN7S7389C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C9__7S7389C4[] = {
  ABISELECT(672,460),
  ABISELECT(448,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&_ZN7S7389C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7389C92v7Ev,
};
extern void _ZN7S7389C2D1Ev();
extern void _ZN7S7389C2D0Ev();
extern void _ZN7S7389C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C27S7389C9__7S7389C4[] = {
  ABISELECT(448,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C2[0]),
  (VTBL_ENTRY)&_ZN7S7389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev)();
extern void ABISELECT(_ZThn672_N7S7389C9D1Ev,_ZThn460_N7S7389C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev)();
extern void ABISELECT(_ZThn672_N7S7389C9D0Ev,_ZThn460_N7S7389C9D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C11__7S7389C9__7S7389C4[] = {
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-672,-460),
  ABISELECT(-224,-168),
  ABISELECT(-672,-460),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C68S7389C128S7389C11__7S7389C9__7S7389C4[] = {
  ABISELECT(-2080,-1504),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void ABISELECT(_ZTvn1840_n32_N7S7389C9D1Ev,_ZTvn1352_n16_N7S7389C9D1Ev)();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C9D0Ev,_ZTvn1352_n16_N7S7389C9D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C11__A1__7S7389C9__7S7389C4[] = {
  ABISELECT(-2064,-1520),
  ABISELECT(-2512,-1812),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C9D1Ev,_ZTvn1352_n16_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C9D0Ev,_ZTvn1352_n16_N7S7389C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN8S7389C11D1Ev();
extern void _ZN8S7389C11D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C11__7S7389C4[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&_ZN8S7389C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C128S7389C11__7S7389C4[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C128S7389C11__7S7389C4[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C11__A1__7S7389C4[] = {
  ABISELECT(-2064,-1520),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev)();
extern void ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C13__A1__8S7389C11__7S7389C4[] = {
  ABISELECT(-2064,-1520),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
static  VTT_ENTRY vtt_S7389C4[] = {
  {&(_ZTV7S7389C4[7]),  7,60},
  {&(_ZTV7S7389C4[13]),  13,60},
  {&(_ZTV7S7389C4[18]),  18,60},
  {&(_ZTV7S7389C4[28]),  28,60},
  {&(_ZTV7S7389C4[34]),  34,60},
  {&(_ZTV7S7389C4[45]),  45,60},
  {&(_ZTV7S7389C4[51]),  51,60},
  {&(_ZTV7S7389C4[57]),  57,60},
  {&(_tg__ZTV7S7389C5__7S7389C4[3]),  3,3},
  {&(_tg__ZTV7S7389C6__7S7389C5__7S7389C4[5]),  5,8},
  {&(_tg__ZTV7S7389C9__7S7389C4[4]),  4,8},
  {&(_tg__ZTV7S7389C27S7389C9__7S7389C4[3]),  3,6},
  {&(_tg__ZTV8S7389C11__7S7389C9__7S7389C4[9]),  9,13},
  {&(_tg__ZTV7S7389C68S7389C128S7389C11__7S7389C9__7S7389C4[2]),  2,5},
  {&(_tg__ZTV8S7389C138S7389C11__A1__7S7389C9__7S7389C4[3]),  3,6},
  {&(_tg__ZTV8S7389C11__7S7389C4[3]),  3,7},
  {&(_tg__ZTV8S7389C128S7389C11__7S7389C4[3]),  3,7},
  {&(_tg__ZTV8S7389C138S7389C128S7389C11__7S7389C4[3]),  3,6},
  {&(_tg__ZTV8S7389C138S7389C11__A1__7S7389C4[3]),  3,6},
  {&(_tg__ZTV8S7389C13__A1__8S7389C11__7S7389C4[3]),  3,6},
};
extern VTBL_ENTRY _ZTI7S7389C4[];
extern  VTBL_ENTRY _ZTV7S7389C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C4[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7389C9D0Ev,_ZThn460_N7S7389C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7389C9D1Ev,_ZThn460_N7S7389C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C4D0Ev,_ZTv0_n16_N7S7389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3024_N7S7389C4D0Ev,_ZThn2212_N7S7389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C4D1Ev,_ZTv0_n16_N7S7389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3024_N7S7389C4D1Ev,_ZThn2212_N7S7389C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7389C4D0Ev,_ZTv0_n20_N7S7389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2352_N7S7389C4D0Ev,_ZThn1752_N7S7389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7389C4D1Ev,_ZTv0_n20_N7S7389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2352_N7S7389C4D1Ev,_ZThn1752_N7S7389C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7389C4 = {  "S7389C4", // class name
  bases_S7389C4, 14,
  &(vtc_S7389C4[0]), // expected_vtbl_contents
  &(vtt_S7389C4[0]), // expected_vtt_contents
  ABISELECT(6208,4552), // object size
  NSPAIRA(_ZTI7S7389C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7389C4),60, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7389C4),20, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C15  : S7389C6 , virtual S20570C5 {
  ::S5217C45 s7389c15f0;
  __tsi64 s7389c15f1;
  int s7389c15f2:23;
  short s7389c15f3;
  int s7389c15f4;
  __tsi64 s7389c15f5[2];
  ~S7389C15(); // tgen
  S7389C15(); // tgen
};
//SIG(-1 S7389C15) C1{ BC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC3 FC4{} FL Fi:23 Fs Fi FL[2]}


S7389C15 ::~S7389C15(){ note_dtor("S7389C15", this);} // tgen
S7389C15 ::S7389C15(){ note_ctor("S7389C15", this);} // tgen

static void Test_S7389C15()
{
  extern Class_Descriptor cd_S7389C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,117)];
    init_test(&cd_S7389C15, buf);
    S7389C15 *dp, &lv = *(dp=new (buf) S7389C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,464), "sizeof(S7389C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C15)");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*), ABISELECT(16,4), "S7389C15");
    check_base_class_offset(lv, (S7389C6*), 0, "S7389C15");
    /*is_ambiguous_... S7389C15::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(384,296), "S7389C15");
    check_field_offset(lv, s7389c15f0, ABISELECT(332,256), "S7389C15.s7389c15f0");
    check_field_offset(lv, s7389c15f1, ABISELECT(336,260), "S7389C15.s7389c15f1");
    set_bf_and_test(lv, s7389c15f2, ABISELECT(344,268), 0, 23, 1, "S7389C15");
    set_bf_and_test(lv, s7389c15f2, ABISELECT(344,268), 0, 23, hide_sll(1LL<<22), "S7389C15");
    check_field_offset(lv, s7389c15f3, ABISELECT(348,272), "S7389C15.s7389c15f3");
    check_field_offset(lv, s7389c15f4, ABISELECT(352,276), "S7389C15.s7389c15f4");
    check_field_offset(lv, s7389c15f5, ABISELECT(360,280), "S7389C15.s7389c15f5");
    test_class_info(&lv, &cd_S7389C15);
    dp->~S7389C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C15(Test_S7389C15, "S7389C15", ABISELECT(608,464));

#else // __cplusplus

extern void _ZN8S7389C15C1Ev();
extern void _ZN8S7389C15D1Ev();
Name_Map name_map_S7389C15[] = {
  NSPAIR(_ZN8S7389C15C1Ev),
  NSPAIR(_ZN8S7389C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7389C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7389C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(384,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7389C15[];
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY vtc_S7389C15[] = {
  ABISELECT(384,296),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C15[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern VTBL_ENTRY _ZTV8S7389C15[];
static  VTT_ENTRY vtt_S7389C15[] = {
  {&(_ZTV8S7389C15[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S7389C15[];
extern  VTBL_ENTRY _ZTV8S7389C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C15[];
Class_Descriptor cd_S7389C15 = {  "S7389C15", // class name
  bases_S7389C15, 3,
  &(vtc_S7389C15[0]), // expected_vtbl_contents
  &(vtt_S7389C15[0]), // expected_vtt_contents
  ABISELECT(608,464), // object size
  NSPAIRA(_ZTI8S7389C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7389C15),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7389C15),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C18  : virtual S20570C5 {
  void *s7389c18f0;
  int s7389c18f1;
  ::S7389C6 s7389c18f2;
  int s7389c18f3;
  void *s7389c18f4;
  ~S7389C18(); // tgen
  S7389C18(); // tgen
};
//SIG(-1 S7389C18) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} Fp Fi FC3{ BC2 v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} Fi Fp}


S7389C18 ::~S7389C18(){ note_dtor("S7389C18", this);} // tgen
S7389C18 ::S7389C18(){ note_ctor("S7389C18", this);} // tgen

static void Test_S7389C18()
{
  extern Class_Descriptor cd_S7389C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,112)];
    init_test(&cd_S7389C18, buf);
    S7389C18 *dp, &lv = *(dp=new (buf) S7389C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,444), "sizeof(S7389C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C18)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(384,276), "S7389C18");
    check_field_offset(lv, s7389c18f0, ABISELECT(8,4), "S7389C18.s7389c18f0");
    check_field_offset(lv, s7389c18f1, ABISELECT(16,8), "S7389C18.s7389c18f1");
    check_field_offset(lv, s7389c18f2, ABISELECT(32,12), "S7389C18.s7389c18f2");
    check_field_offset(lv, s7389c18f3, ABISELECT(368,268), "S7389C18.s7389c18f3");
    check_field_offset(lv, s7389c18f4, ABISELECT(376,272), "S7389C18.s7389c18f4");
    test_class_info(&lv, &cd_S7389C18);
    dp->~S7389C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C18(Test_S7389C18, "S7389C18", ABISELECT(608,444));

#else // __cplusplus

extern void _ZN8S7389C18C1Ev();
extern void _ZN8S7389C18D1Ev();
Name_Map name_map_S7389C18[] = {
  NSPAIR(_ZN8S7389C18C1Ev),
  NSPAIR(_ZN8S7389C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S7389C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(384,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7389C18[];
static  VTBL_ENTRY vtc_S7389C18[] = {
  ABISELECT(384,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C18[0]),
};
extern VTBL_ENTRY _ZTV8S7389C18[];
static  VTT_ENTRY vtt_S7389C18[] = {
  {&(_ZTV8S7389C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7389C18[];
extern  VTBL_ENTRY _ZTV8S7389C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C18[];
Class_Descriptor cd_S7389C18 = {  "S7389C18", // class name
  bases_S7389C18, 1,
  &(vtc_S7389C18[0]), // expected_vtbl_contents
  &(vtt_S7389C18[0]), // expected_vtt_contents
  ABISELECT(608,444), // object size
  NSPAIRA(_ZTI8S7389C18),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7389C18),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7389C18),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C17  : virtual S7389C6 , virtual S7389C15 , S7389C12 , virtual S7389C18 {
  char s7389c17f0:5;
  __tsi64 s7389c17f1[4];
  char s7389c17f2[6];
  ::S20570C17 s7389c17f3;
  virtual  ~S7389C17(); // _ZN8S7389C17D2Ev
  S7389C17(); // tgen
};
//SIG(-1 S7389C17) C1{ VBC2{ BC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} v1 v2 v3 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC4{ BC2 VBC3 FC5{} FL Fi:23 Fs Fi FL[2]} BC6{ BC7{ VBC3 vd v4 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC2 v5 FD Fp Fs[6] Fp Fi FD Fi} VBC8{ VBC3 Fp Fi FC2 Fi Fp} vd Fc:5 FL[4] Fc[6] FC9{ vd m Fp Fl Fi Fp}}


 S7389C17 ::~S7389C17(){ note_dtor("S7389C17", this);}
S7389C17 ::S7389C17(){ note_ctor("S7389C17", this);} // tgen

static void Test_S7389C17()
{
  extern Class_Descriptor cd_S7389C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(204,604)];
    init_test(&cd_S7389C17, buf);
    S7389C17 *dp, &lv = *(dp=new (buf) S7389C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3248,2412), "sizeof(S7389C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C17)");
    /*is_ambiguous_... S7389C17::S7389C6 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C6*), ABISELECT(1936,1420), "S7389C17");
    /*is_ambiguous_... S7389C17::S7389C6 */ AMB_check_base_class_offset(lv, (S7389C6*), ABISELECT(1920,1416), "S7389C17");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C15*), ABISELECT(2272,1676), "S7389C17");
    check_base_class_offset(lv, (S7389C6*)(S7389C15*), ABISELECT(2256,1672), "S7389C17");
    /*is_ambiguous_... S7389C15::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C15*), ABISELECT(2640,1968), "S7389C17");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C12*), ABISELECT(2640,1968), "S7389C17");
    check_base_class_offset(lv, (S20570C5*)(S7389C18*), ABISELECT(2640,1968), "S7389C17");
    check_base_class_offset(lv, (S7389C15*), ABISELECT(2256,1672), "S7389C17");
    check_base_class_offset(lv, (S7389C13*)(S7389C12*), 0, "S7389C17");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C12*), ABISELECT(1184,876), "S7389C17");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C12*), ABISELECT(1424,1048), "S7389C17");
    check_base_class_offset(lv, (S7389C6*)(S7389C12*), ABISELECT(1408,1044), "S7389C17");
    check_base_class_offset(lv, (S7389C12*), 0, "S7389C17");
    check_base_class_offset(lv, (S7389C18*), ABISELECT(2864,2136), "S7389C17");
    set_bf_and_test(lv, s7389c17f0, ABISELECT(1828,1352), 0, 5, 1, "S7389C17");
    set_bf_and_test(lv, s7389c17f0, ABISELECT(1828,1352), 0, 5, hide_sll(1LL<<4), "S7389C17");
    check_field_offset(lv, s7389c17f1, ABISELECT(1832,1356), "S7389C17.s7389c17f1");
    check_field_offset(lv, s7389c17f2, ABISELECT(1864,1388), "S7389C17.s7389c17f2");
    check_field_offset(lv, s7389c17f3, ABISELECT(1872,1396), "S7389C17.s7389c17f3");
    test_class_info(&lv, &cd_S7389C17);
    dp->~S7389C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C17(Test_S7389C17, "S7389C17", ABISELECT(3248,2412));

#else // __cplusplus

extern void _ZN8S7389C17C1Ev();
extern void _ZN8S7389C17D2Ev();
Name_Map name_map_S7389C17[] = {
  NSPAIR(_ZN8S7389C17C1Ev),
  NSPAIR(_ZN8S7389C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C15;
extern VTBL_ENTRY _ZTI8S7389C15[];
extern  VTBL_ENTRY _ZTV8S7389C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C15[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C12;
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
extern Class_Descriptor cd_S7389C18;
extern VTBL_ENTRY _ZTI8S7389C18[];
extern  VTBL_ENTRY _ZTV8S7389C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C18[];
static Base_Class bases_S7389C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1936,1420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(1920,1416), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(2272,1676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(2256,1672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(2640,1968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7389C15,    ABISELECT(2256,1672), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7389C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1184,876), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(1424,1048), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(1408,1044), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7389C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7389C18,    ABISELECT(2864,2136), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7389C17[];
extern void _ZN8S7389C17D1Ev();
extern void _ZN8S7389C17D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY vtc_S7389C17[] = {
  ABISELECT(2864,2136),
  ABISELECT(2256,1672),
  ABISELECT(1920,1416),
  ABISELECT(2640,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN8S7389C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C17D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-1408,-1044),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  0,
  0,
  0,
  ABISELECT(-1920,-1416),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  0,
  0,
  0,
  ABISELECT(384,296),
  ABISELECT(-2256,-1672),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(-224,-168),
  ABISELECT(-2864,-2136),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
};
extern VTBL_ENTRY _ZTV8S7389C17[];
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C12__8S7389C17[] = {
  ABISELECT(2640,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C12__8S7389C17[] = {
  ABISELECT(2640,1968),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C15__8S7389C17[] = {
  ABISELECT(384,296),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C15[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7389C18__8S7389C17[] = {
  ABISELECT(-224,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C18[0]),
};
static  VTT_ENTRY vtt_S7389C17[] = {
  {&(_ZTV8S7389C17[6]),  6,35},
  {&(_tg__ZTV8S7389C12__8S7389C17[3]),  3,7},
  {&(_tg__ZTV8S7389C138S7389C12__8S7389C17[3]),  3,6},
  {&(_ZTV8S7389C17[20]),  20,35},
  {&(_ZTV8S7389C17[29]),  29,35},
  {&(_ZTV8S7389C17[35]),  35,35},
  {&(_tg__ZTV8S7389C15__8S7389C17[3]),  3,6},
  {&(_tg__ZTV8S7389C18__8S7389C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7389C17[];
extern  VTBL_ENTRY _ZTV8S7389C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C17[];
Class_Descriptor cd_S7389C17 = {  "S7389C17", // class name
  bases_S7389C17, 12,
  &(vtc_S7389C17[0]), // expected_vtbl_contents
  &(vtt_S7389C17[0]), // expected_vtt_contents
  ABISELECT(3248,2412), // object size
  NSPAIRA(_ZTI8S7389C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7389C17),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7389C17),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7389C1  : S7389C2 , S7389C4 , virtual S7389C15 , S20570C5 , virtual S7389C17 {
  long double s7389c1f0;
  void *s7389c1f1;
  virtual  ~S7389C1(); // _ZN7S7389C1D2Ev
  S7389C1(); // tgen
};
//SIG(1 S7389C1) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FL[4] Fs Fi FL Fi} BC4{ VBC5{ VBC6{ BC3 v2 v3 v4 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} FU7{ m FD Fp Fs:5 Fp FD Fp FD Fi[7] Fp Fp}[5] Fc[3] Fp Fp Fs[4] Fi[6] FC2 Fi Fp[8] Fi FU8{ m FD[10] Fs Fs Fp Fl Fp FD[9]} Fc Fi Fi[7]} VBC9{ BC2 BC10{ vd m Fp Fl Fi Fp} VBC11{ VBC3 BC12{ BC13{ VBC3 vd v5 FC3[5] FL Fs:5 Fc:0 Fp Fp Fi FL} BC3 BC6 v6 FD Fp Fs[6] Fp Fi FD Fi} BC13 vd FD[9] Fs} vd v7 Fp Fi FC14{ vd v9 FD Fi Fi Fc Fp FC10 Fi Fp Fi[2]} Fc[9] FU8 FL:64} vd v8 FC5 Fl Fi Fc Fc:4 FL} VBC15{ BC6 VBC3 FC16{} FL Fi:23 Fs Fi FL[2]} BC3 VBC17{ VBC6 VBC15 BC12 VBC18{ VBC3 Fp Fi FC6 Fi Fp} vd Fc:5 FL[4] Fc[6] FC10} vd FD Fp}


 S7389C1 ::~S7389C1(){ note_dtor("S7389C1", this);}
S7389C1 ::S7389C1(){ note_ctor("S7389C1", this);} // tgen

static void Test_S7389C1()
{
  extern Class_Descriptor cd_S7389C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(577,1696)];
    init_test(&cd_S7389C1, buf);
    S7389C1 *dp, &lv = *(dp=new (buf) S7389C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9216,6780), "sizeof(S7389C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7389C1)");
    /*is_ambiguous_... S7389C1::S7389C2 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C2*), ABISELECT(1520,1128), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C2*)(S7389C9*), ABISELECT(1520,1128), "S7389C1");
    /*is_ambiguous_... S7389C11::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C11*), ABISELECT(1520,1128), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C12*)(S7389C11*), ABISELECT(1520,1128), "S7389C1");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C11*), ABISELECT(1520,1128), "S7389C1");
    /*is_ambiguous_... S7389C15::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C15*), ABISELECT(1520,1128), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C13*)(S7389C12*)(S7389C17*), ABISELECT(1520,1128), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C18*), ABISELECT(1520,1128), "S7389C1");
    /*is_ambiguous_... S7389C1::S7389C2 */ AMB_check_base_class_offset(lv, (S7389C2*), 0, "S7389C1");
    /*is_ambiguous_... S7389C1::S7389C6 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C6*), ABISELECT(2576,1908), "S7389C1");
    check_base_class_offset(lv, (S7389C6*)(S7389C5*), ABISELECT(2560,1904), "S7389C1");
    /*is_ambiguous_... S7389C17::S7389C6 */ AMB_check_base_class_offset(lv, (S7389C6*)(S7389C17*), ABISELECT(2560,1904), "S7389C1");
    check_base_class_offset(lv, (S7389C5*)(S7389C4*), ABISELECT(1744,1296), "S7389C1");
    check_base_class_offset(lv, (S7389C2*)(S7389C9*), ABISELECT(2896,2160), "S7389C1");
    check_base_class_offset(lv, (S20570C17*)(S7389C9*), ABISELECT(2960,2216), "S7389C1");
    check_base_class_offset(lv, (S7389C13*)(S7389C12*)(S7389C11*), ABISELECT(3344,2452), "S7389C1");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C12*)(S7389C11*), ABISELECT(4528,3328), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C12*)(S7389C11*), ABISELECT(4768,3500), "S7389C1");
    check_base_class_offset(lv, (S7389C6*)(S7389C12*)(S7389C11*), ABISELECT(4752,3496), "S7389C1");
    check_base_class_offset(lv, (S7389C12*)(S7389C11*), ABISELECT(3344,2452), "S7389C1");
    /*is_ambiguous_... S7389C11::S7389C13 */ AMB_check_base_class_offset(lv, (S7389C13*)(S7389C11*), ABISELECT(5184,3804), "S7389C1");
    check_base_class_offset(lv, (S7389C11*)(S7389C9*), ABISELECT(3344,2452), "S7389C1");
    check_base_class_offset(lv, (S7389C9*)(S7389C4*), ABISELECT(2896,2160), "S7389C1");
    check_base_class_offset(lv, (S7389C4*), ABISELECT(64,56), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C15*), ABISELECT(6544,4796), "S7389C1");
    check_base_class_offset(lv, (S7389C6*)(S7389C15*), ABISELECT(6528,4792), "S7389C1");
    check_base_class_offset(lv, (S7389C15*), ABISELECT(6528,4792), "S7389C1");
    check_base_class_offset(lv, (S7389C15*)(S7389C17*), ABISELECT(6528,4792), "S7389C1");
    /*is_ambiguous_... S7389C1::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*), ABISELECT(1264,944), "S7389C1");
    check_base_class_offset(lv, (S7389C13*)(S7389C12*)(S7389C17*), ABISELECT(6912,5088), "S7389C1");
    /*is_ambiguous_... S7389C12::S20570C5 */ AMB_check_base_class_offset(lv, (S20570C5*)(S7389C12*)(S7389C17*), ABISELECT(8096,5964), "S7389C1");
    check_base_class_offset(lv, (S20570C5*)(S7389C6*)(S7389C12*)(S7389C17*), ABISELECT(8336,6136), "S7389C1");
    check_base_class_offset(lv, (S7389C6*)(S7389C12*)(S7389C17*), ABISELECT(8320,6132), "S7389C1");
    check_base_class_offset(lv, (S7389C12*)(S7389C17*), ABISELECT(6912,5088), "S7389C1");
    check_base_class_offset(lv, (S7389C18*)(S7389C17*), ABISELECT(8832,6504), "S7389C1");
    check_base_class_offset(lv, (S7389C17*), ABISELECT(6912,5088), "S7389C1");
    check_field_offset(lv, s7389c1f0, ABISELECT(1488,1112), "S7389C1.s7389c1f0");
    check_field_offset(lv, s7389c1f1, ABISELECT(1504,1124), "S7389C1.s7389c1f1");
    test_class_info(&lv, &cd_S7389C1);
    dp->~S7389C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7389C1(Test_S7389C1, "S7389C1", ABISELECT(9216,6780));

#else // __cplusplus

extern void _ZN7S7389C1C1Ev();
extern void _ZN7S7389C1D2Ev();
Name_Map name_map_S7389C1[] = {
  NSPAIR(_ZN7S7389C1C1Ev),
  NSPAIR(_ZN7S7389C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C2;
extern VTBL_ENTRY _ZTI7S7389C2[];
extern  VTBL_ENTRY _ZTV7S7389C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C2[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C5;
extern VTBL_ENTRY _ZTI7S7389C5[];
extern  VTBL_ENTRY _ZTV7S7389C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C5[];
extern Class_Descriptor cd_S7389C2;
extern VTBL_ENTRY _ZTI7S7389C2[];
extern  VTBL_ENTRY _ZTV7S7389C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C2[];
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C12;
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S7389C11;
extern VTBL_ENTRY _ZTI8S7389C11[];
extern  VTBL_ENTRY _ZTV8S7389C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C11[];
extern Class_Descriptor cd_S7389C9;
extern VTBL_ENTRY _ZTI7S7389C9[];
extern  VTBL_ENTRY _ZTV7S7389C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C9[];
extern Class_Descriptor cd_S7389C4;
extern VTBL_ENTRY _ZTI7S7389C4[];
extern  VTBL_ENTRY _ZTV7S7389C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C4[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C15;
extern VTBL_ENTRY _ZTI8S7389C15[];
extern  VTBL_ENTRY _ZTV8S7389C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C15[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C13;
extern VTBL_ENTRY _ZTI8S7389C13[];
extern  VTBL_ENTRY _ZTV8S7389C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C13[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S7389C6;
extern VTBL_ENTRY _ZTI7S7389C6[];
extern  VTBL_ENTRY _ZTV7S7389C6[];
extern Class_Descriptor cd_S7389C12;
extern VTBL_ENTRY _ZTI8S7389C12[];
extern  VTBL_ENTRY _ZTV8S7389C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C12[];
extern Class_Descriptor cd_S7389C18;
extern VTBL_ENTRY _ZTI8S7389C18[];
extern  VTBL_ENTRY _ZTV8S7389C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C18[];
extern Class_Descriptor cd_S7389C17;
extern VTBL_ENTRY _ZTI8S7389C17[];
extern  VTBL_ENTRY _ZTV8S7389C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7389C17[];
static Base_Class bases_S7389C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(1520,1128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7389C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(2576,1908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(2560,1904), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7389C5,    ABISELECT(1744,1296), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7389C2,    ABISELECT(2896,2160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20570C17,    ABISELECT(2960,2216), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7389C13,    ABISELECT(3344,2452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4528,3328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(4768,3500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(4752,3496), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7389C12,    ABISELECT(3344,2452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7389C13,    ABISELECT(5184,3804), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7389C11,    ABISELECT(3344,2452), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7389C9,    ABISELECT(2896,2160), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7389C4,    ABISELECT(64,56), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20570C5,    ABISELECT(6544,4796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(6528,4792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7389C15,    ABISELECT(6528,4792), //bcp->offset
    73, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(1264,944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7389C13,    ABISELECT(6912,5088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(8096,5964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20570C5,    ABISELECT(8336,6136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7389C6,    ABISELECT(8320,6132), //bcp->offset
    98, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7389C12,    ABISELECT(6912,5088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7389C18,    ABISELECT(8832,6504), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7389C17,    ABISELECT(6912,5088), //bcp->offset
    82, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7389C1[];
extern void _ZN7S7389C1D1Ev();
extern void _ZN7S7389C1D0Ev();
extern void _ZN7S7389C22v1Ev();
extern void ABISELECT(_ZThn64_N7S7389C1D1Ev,_ZThn56_N7S7389C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7389C1D0Ev,_ZThn56_N7S7389C1D0Ev)();
extern void _ZN7S7389C42v8Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S7389C1D1Ev,_ZTv0_n20_N7S7389C1D1Ev)();
extern void ABISELECT(_ZThn2896_N7S7389C1D1Ev,_ZThn2160_N7S7389C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7389C1D0Ev,_ZTv0_n20_N7S7389C1D0Ev)();
extern void ABISELECT(_ZThn2896_N7S7389C1D0Ev,_ZThn2160_N7S7389C1D0Ev)() __attribute__((weak));
extern void _ZN7S7389C22v1Ev();
extern void _ZN7S7389C92v7Ev();
extern void ABISELECT(_ZTvn64_n40_N7S7389C1D1Ev,_ZTvn56_n20_N7S7389C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S7389C1D0Ev,_ZTvn56_n20_N7S7389C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7389C1D1Ev,_ZTv0_n16_N7S7389C1D1Ev)();
extern void ABISELECT(_ZThn3344_N7S7389C1D1Ev,_ZThn2452_N7S7389C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7389C1D0Ev,_ZTv0_n16_N7S7389C1D0Ev)();
extern void ABISELECT(_ZThn3344_N7S7389C1D0Ev,_ZThn2452_N7S7389C1D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C1D1Ev,_ZTvn1352_n16_N7S7389C1D1Ev)();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C1D0Ev,_ZTvn1352_n16_N7S7389C1D0Ev)();
extern void _ZN8S7389C132v5Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
extern void ABISELECT(_ZTv0_n56_N7S7389C1D1Ev,_ZTv0_n28_N7S7389C1D1Ev)();
extern void ABISELECT(_ZThn6912_N7S7389C1D1Ev,_ZThn5088_N7S7389C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7389C1D0Ev,_ZTv0_n28_N7S7389C1D0Ev)();
extern void ABISELECT(_ZThn6912_N7S7389C1D0Ev,_ZThn5088_N7S7389C1D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY vtc_S7389C1[] = {
  ABISELECT(8832,6504),
  ABISELECT(6912,5088),
  ABISELECT(6528,4792),
  ABISELECT(3344,2452),
  ABISELECT(2896,2160),
  ABISELECT(2560,1904),
  ABISELECT(1744,1296),
  ABISELECT(1520,1128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&_ZN7S7389C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  ABISELECT(3280,2396),
  ABISELECT(1456,1072),
  ABISELECT(2832,2104),
  ABISELECT(2496,1848),
  ABISELECT(1680,1240),
  ABISELECT(-64,-56),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7389C1D1Ev,_ZThn56_N7S7389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7389C1D0Ev,_ZThn56_N7S7389C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7389C42v8Ev,
  ABISELECT(816,608),
  ABISELECT(-1744,-1296),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  0,
  0,
  0,
  ABISELECT(-2560,-1904),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  0,
  0,
  ABISELECT(-2896,-2160),
  ABISELECT(448,292),
  ABISELECT(-1376,-1032),
  ABISELECT(-2896,-2160),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7389C1D1Ev,_ZTv0_n20_N7S7389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7389C1D0Ev,_ZTv0_n20_N7S7389C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7389C92v7Ev,
  ABISELECT(-2960,-2216),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7389C1D1Ev,_ZTvn56_n20_N7S7389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7389C1D0Ev,_ZTvn56_n20_N7S7389C1D0Ev),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-3344,-2452),
  ABISELECT(-1824,-1324),
  ABISELECT(-3344,-2452),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C1D1Ev,_ZTv0_n16_N7S7389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C1D0Ev,_ZTv0_n16_N7S7389C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-4752,-3496),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(-3664,-2676),
  ABISELECT(-5184,-3804),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C1D1Ev,_ZTvn1352_n16_N7S7389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C1D0Ev,_ZTvn1352_n16_N7S7389C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  0,
  0,
  0,
  ABISELECT(-5008,-3664),
  ABISELECT(-6528,-4792),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-6912,-5088),
  ABISELECT(1920,1416),
  ABISELECT(-384,-296),
  ABISELECT(-4352,-3184),
  ABISELECT(-5392,-3960),
  ABISELECT(-6912,-5088),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7389C1D1Ev,_ZTv0_n28_N7S7389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7389C1D0Ev,_ZTv0_n28_N7S7389C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
  ABISELECT(-8320,-6132),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
  ABISELECT(-7312,-5376),
  ABISELECT(-8832,-6504),
  (VTBL_ENTRY)&(_ZTI7S7389C1[0]),
};
extern VTBL_ENTRY _ZTV7S7389C1[];
extern void _ZN7S7389C2D1Ev();
extern void _ZN7S7389C2D0Ev();
extern void _ZN7S7389C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C2__7S7389C1[] = {
  ABISELECT(1520,1128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C2[0]),
  (VTBL_ENTRY)&_ZN7S7389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
};
extern void _ZN7S7389C4D1Ev();
extern void _ZN7S7389C4D0Ev();
extern void _ZN7S7389C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C4__7S7389C1[] = {
  ABISELECT(3280,2396),
  ABISELECT(1456,1072),
  ABISELECT(2832,2104),
  ABISELECT(2496,1848),
  ABISELECT(1680,1240),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&_ZN7S7389C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C42v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7389C5__7S7389C4__7S7389C1[] = {
  ABISELECT(816,608),
  ABISELECT(-1680,-1240),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C6__7S7389C4__7S7389C1[] = {
  0,
  0,
  0,
  ABISELECT(-2496,-1848),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7389C4D1Ev,_ZTv0_n20_N7S7389C4D1Ev)();
extern void ABISELECT(_ZThn2832_N7S7389C4D1Ev,_ZThn2104_N7S7389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7389C4D0Ev,_ZTv0_n20_N7S7389C4D0Ev)();
extern void ABISELECT(_ZThn2832_N7S7389C4D0Ev,_ZThn2104_N7S7389C4D0Ev)() __attribute__((weak));
extern void _ZN7S7389C22v1Ev();
extern void _ZN7S7389C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C9__7S7389C4__7S7389C1[] = {
  0,
  0,
  ABISELECT(-2832,-2104),
  ABISELECT(448,292),
  ABISELECT(-1376,-1032),
  ABISELECT(-2832,-2104),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7389C4D1Ev,_ZTv0_n20_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7389C4D0Ev,_ZTv0_n20_N7S7389C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7389C92v7Ev,
};
extern void ABISELECT(_ZTvn64_n40_N7S7389C4D1Ev,_ZTvn56_n20_N7S7389C4D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N7S7389C4D0Ev,_ZTvn56_n20_N7S7389C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20570C177S7389C9__7S7389C4__7S7389C1[] = {
  ABISELECT(-2896,-2160),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7389C4D1Ev,_ZTvn56_n20_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N7S7389C4D0Ev,_ZTvn56_n20_N7S7389C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7389C4D1Ev,_ZTv0_n16_N7S7389C4D1Ev)();
extern void ABISELECT(_ZThn3280_N7S7389C4D1Ev,_ZThn2396_N7S7389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7389C4D0Ev,_ZTv0_n16_N7S7389C4D0Ev)();
extern void ABISELECT(_ZThn3280_N7S7389C4D0Ev,_ZThn2396_N7S7389C4D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C11__7S7389C4__7S7389C1[] = {
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-3280,-2396),
  ABISELECT(-1824,-1324),
  ABISELECT(-3280,-2396),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C4D1Ev,_ZTv0_n16_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C4D0Ev,_ZTv0_n16_N7S7389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C68S7389C128S7389C11__A1__7S7389C4__7S7389C1[] = {
  ABISELECT(-4688,-3440),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void ABISELECT(_ZTvn1840_n32_N7S7389C4D1Ev,_ZTvn1352_n16_N7S7389C4D1Ev)();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C4D0Ev,_ZTvn1352_n16_N7S7389C4D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C11__A1__7S7389C4__7S7389C1[] = {
  ABISELECT(-3664,-2676),
  ABISELECT(-5120,-3748),
  (VTBL_ENTRY)&(_ZTI7S7389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C4D1Ev,_ZTvn1352_n16_N7S7389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C4D0Ev,_ZTvn1352_n16_N7S7389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7389C5__7S7389C1[] = {
  ABISELECT(816,608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C5[0]),
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C6__7S7389C5__7S7389C1[] = {
  0,
  0,
  0,
  ABISELECT(-816,-608),
  (VTBL_ENTRY)&(_ZTI7S7389C5[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void _ZN7S7389C9D1Ev();
extern void _ZN7S7389C9D0Ev();
extern void _ZN7S7389C22v1Ev();
extern void _ZN7S7389C92v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C9__7S7389C1[] = {
  ABISELECT(448,292),
  ABISELECT(-1376,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&_ZN7S7389C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
  (VTBL_ENTRY)&_ZN7S7389C92v7Ev,
};
extern void _ZN7S7389C2D1Ev();
extern void _ZN7S7389C2D0Ev();
extern void _ZN7S7389C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C27S7389C9__A1__7S7389C1[] = {
  ABISELECT(-1376,-1032),
  0,
  (VTBL_ENTRY)&(_ZTI7S7389C2[0]),
  (VTBL_ENTRY)&_ZN7S7389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7389C22v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev)();
extern void ABISELECT(_ZThn448_N7S7389C9D1Ev,_ZThn292_N7S7389C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev)();
extern void ABISELECT(_ZThn448_N7S7389C9D0Ev,_ZThn292_N7S7389C9D0Ev)() __attribute__((weak));
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C11__7S7389C9__7S7389C1[] = {
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  ABISELECT(1408,1044),
  0,
  0,
  ABISELECT(-448,-292),
  ABISELECT(-1824,-1324),
  ABISELECT(-448,-292),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C68S7389C128S7389C11__7S7389C9__7S7389C1[] = {
  ABISELECT(-1856,-1336),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void ABISELECT(_ZTvn1840_n32_N7S7389C9D1Ev,_ZTvn1352_n16_N7S7389C9D1Ev)();
extern void ABISELECT(_ZTvn1840_n32_N7S7389C9D0Ev,_ZTvn1352_n16_N7S7389C9D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C11__A1__7S7389C9__7S7389C1[] = {
  ABISELECT(-3664,-2676),
  ABISELECT(-2288,-1644),
  (VTBL_ENTRY)&(_ZTI7S7389C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C9D1Ev,_ZTvn1352_n16_N7S7389C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1840_n32_N7S7389C9D0Ev,_ZTvn1352_n16_N7S7389C9D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN8S7389C11D1Ev();
extern void _ZN8S7389C11D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C11__7S7389C1[] = {
  ABISELECT(-1824,-1324),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&_ZN8S7389C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C128S7389C11__7S7389C1[] = {
  ABISELECT(-1824,-1324),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C128S7389C11__7S7389C1[] = {
  ABISELECT(-1824,-1324),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C11__A1__7S7389C1[] = {
  ABISELECT(-3664,-2676),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev)();
extern void ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev)();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C13__A1__8S7389C11__7S7389C1[] = {
  ABISELECT(-3664,-2676),
  ABISELECT(-1840,-1352),
  (VTBL_ENTRY)&(_ZTI8S7389C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D1Ev,_ZThn1352_N8S7389C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1840_N8S7389C11D0Ev,_ZThn1352_N8S7389C11D0Ev),
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C15__7S7389C1[] = {
  ABISELECT(-5008,-3664),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C15[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void _ZN8S7389C17D1Ev();
extern void _ZN8S7389C17D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C17__7S7389C1[] = {
  ABISELECT(1920,1416),
  ABISELECT(-384,-296),
  ABISELECT(-4352,-3184),
  ABISELECT(-5392,-3960),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN8S7389C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C17D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C12D1Ev();
extern void _ZN8S7389C12D0Ev();
extern void _ZN8S7389C132v5Ev();
extern void _ZN8S7389C122v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C128S7389C17__A1__7S7389C1[] = {
  ABISELECT(-5392,-3960),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C12[0]),
  (VTBL_ENTRY)&_ZN8S7389C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
  (VTBL_ENTRY)&_ZN8S7389C122v6Ev,
};
extern void _ZN8S7389C13D1Ev();
extern void _ZN8S7389C13D0Ev();
extern void _ZN8S7389C132v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C138S7389C128S7389C17__A2__7S7389C1[] = {
  ABISELECT(-5392,-3960),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C13[0]),
  (VTBL_ENTRY)&_ZN8S7389C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7389C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7389C132v5Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7389C6__8S7389C17__7S7389C1[] = {
  0,
  0,
  0,
  ABISELECT(4352,3184),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
extern void _ZN7S7389C62v2Ev();
extern void _ZN7S7389C62v3Ev();
extern void _ZN7S7389C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7389C15__8S7389C17__7S7389C1[] = {
  0,
  0,
  0,
  ABISELECT(-5008,-3664),
  ABISELECT(384,296),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
  (VTBL_ENTRY)&_ZN7S7389C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v3Ev,
  (VTBL_ENTRY)&_ZN7S7389C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7389C18__8S7389C17__7S7389C1[] = {
  ABISELECT(-7312,-5376),
  ABISELECT(-1920,-1416),
  (VTBL_ENTRY)&(_ZTI8S7389C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7389C18__7S7389C1[] = {
  ABISELECT(-7312,-5376),
  0,
  (VTBL_ENTRY)&(_ZTI8S7389C18[0]),
};
static  VTT_ENTRY vtt_S7389C1[] = {
  {&(_ZTV7S7389C1[10]),  10,106},
  {&(_tg__ZTV7S7389C2__7S7389C1[3]),  3,6},
  {&(_tg__ZTV7S7389C4__7S7389C1[7]),  7,10},
  {&(_tg__ZTV7S7389C5__7S7389C4__7S7389C1[3]),  3,3},
  {&(_tg__ZTV7S7389C6__7S7389C4__7S7389C1[5]),  5,8},
  {&(_tg__ZTV7S7389C9__7S7389C4__7S7389C1[7]),  7,11},
  {&(_tg__ZTV9S20570C177S7389C9__7S7389C4__7S7389C1[2]),  2,4},
  {&(_tg__ZTV8S7389C11__7S7389C4__7S7389C1[9]),  9,13},
  {&(_tg__ZTV7S7389C68S7389C128S7389C11__A1__7S7389C4__7S7389C1[2]),  2,5},
  {&(_tg__ZTV8S7389C138S7389C11__A1__7S7389C4__7S7389C1[3]),  3,6},
  {&(_ZTV7S7389C1[20]),  20,106},
  {&(_ZTV7S7389C1[26]),  26,106},
  {&(_ZTV7S7389C1[31]),  31,106},
  {&(_ZTV7S7389C1[41]),  41,106},
  {&(_ZTV7S7389C1[47]),  47,106},
  {&(_ZTV7S7389C1[58]),  58,106},
  {&(_ZTV7S7389C1[64]),  64,106},
  {&(_ZTV7S7389C1[70]),  70,106},
  {&(_ZTV7S7389C1[79]),  79,106},
  {&(_ZTV7S7389C1[94]),  94,106},
  {&(_ZTV7S7389C1[100]),  100,106},
  {&(_ZTV7S7389C1[106]),  106,106},
  {&(_tg__ZTV7S7389C5__7S7389C1[3]),  3,3},
  {&(_tg__ZTV7S7389C6__7S7389C5__7S7389C1[5]),  5,8},
  {&(_tg__ZTV7S7389C9__7S7389C1[4]),  4,8},
  {&(_tg__ZTV7S7389C27S7389C9__A1__7S7389C1[3]),  3,6},
  {&(_tg__ZTV8S7389C11__7S7389C9__7S7389C1[9]),  9,13},
  {&(_tg__ZTV7S7389C68S7389C128S7389C11__7S7389C9__7S7389C1[2]),  2,5},
  {&(_tg__ZTV8S7389C138S7389C11__A1__7S7389C9__7S7389C1[3]),  3,6},
  {&(_tg__ZTV8S7389C11__7S7389C1[3]),  3,7},
  {&(_tg__ZTV8S7389C128S7389C11__7S7389C1[3]),  3,7},
  {&(_tg__ZTV8S7389C138S7389C128S7389C11__7S7389C1[3]),  3,6},
  {&(_tg__ZTV8S7389C138S7389C11__A1__7S7389C1[3]),  3,6},
  {&(_tg__ZTV8S7389C13__A1__8S7389C11__7S7389C1[3]),  3,6},
  {&(_tg__ZTV8S7389C15__7S7389C1[3]),  3,6},
  {&(_tg__ZTV8S7389C17__7S7389C1[6]),  6,10},
  {&(_tg__ZTV8S7389C128S7389C17__A1__7S7389C1[3]),  3,7},
  {&(_tg__ZTV8S7389C138S7389C128S7389C17__A2__7S7389C1[3]),  3,6},
  {&(_tg__ZTV7S7389C6__8S7389C17__7S7389C1[5]),  5,8},
  {&(_tg__ZTV8S7389C15__8S7389C17__7S7389C1[6]),  6,9},
  {&(_tg__ZTV8S7389C18__8S7389C17__7S7389C1[3]),  3,3},
  {&(_tg__ZTV8S7389C18__7S7389C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7389C1[];
extern  VTBL_ENTRY _ZTV7S7389C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7389C1[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C9D0Ev,_ZTv0_n16_N7S7389C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7389C9D0Ev,_ZThn292_N7S7389C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C9D1Ev,_ZTv0_n16_N7S7389C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N7S7389C9D1Ev,_ZThn292_N7S7389C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C4D0Ev,_ZTv0_n16_N7S7389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N7S7389C4D0Ev,_ZThn2396_N7S7389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C4D1Ev,_ZTv0_n16_N7S7389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N7S7389C4D1Ev,_ZThn2396_N7S7389C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7389C4D0Ev,_ZTv0_n20_N7S7389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N7S7389C4D0Ev,_ZThn2104_N7S7389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7389C4D1Ev,_ZTv0_n20_N7S7389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2832_N7S7389C4D1Ev,_ZThn2104_N7S7389C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7389C1D0Ev,_ZTv0_n28_N7S7389C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6912_N7S7389C1D0Ev,_ZThn5088_N7S7389C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7389C1D1Ev,_ZTv0_n28_N7S7389C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6912_N7S7389C1D1Ev,_ZThn5088_N7S7389C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C1D0Ev,_ZTv0_n16_N7S7389C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N7S7389C1D0Ev,_ZThn2452_N7S7389C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7389C1D1Ev,_ZTv0_n16_N7S7389C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N7S7389C1D1Ev,_ZThn2452_N7S7389C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7389C1D0Ev,_ZTv0_n20_N7S7389C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2896_N7S7389C1D0Ev,_ZThn2160_N7S7389C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7389C1D1Ev,_ZTv0_n20_N7S7389C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2896_N7S7389C1D1Ev,_ZThn2160_N7S7389C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7389C1 = {  "S7389C1", // class name
  bases_S7389C1, 27,
  &(vtc_S7389C1[0]), // expected_vtbl_contents
  &(vtt_S7389C1[0]), // expected_vtt_contents
  ABISELECT(9216,6780), // object size
  NSPAIRA(_ZTI7S7389C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7389C1),106, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7389C1),42, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1573C4  {
  int s1573c4f0;
  __tsi64 s1573c4f1;
  void *s1573c4f2[4];
  int s1573c4f3[2];
  void *s1573c4f4;
  ::S1409C5_nt s1573c4f5;
  void *s1573c4f6[2];
  virtual  ~S1573C4(); // _ZN7S1573C4D1Ev
  virtual void  v8(); // _ZN7S1573C42v8Ev
  virtual void  v9(); // _ZN7S1573C42v9Ev
  virtual void  v10(); // _ZN7S1573C43v10Ev
  virtual void  v11(); // _ZN7S1573C43v11Ev
  virtual void  v12(); // _ZN7S1573C43v12Ev
  virtual void  v13(); // _ZN7S1573C43v13Ev
  virtual void  v14(); // _ZN7S1573C43v14Ev
  virtual void  v15(); // _ZN7S1573C43v15Ev
  virtual void  v16(); // _ZN7S1573C43v16Ev
  virtual void  v17(); // _ZN7S1573C43v17Ev
  virtual void  v18(); // _ZN7S1573C43v18Ev
  virtual void  v19(); // _ZN7S1573C43v19Ev
  virtual void  v20(); // _ZN7S1573C43v20Ev
  virtual void  v21(); // _ZN7S1573C43v21Ev
  virtual void  v22(); // _ZN7S1573C43v22Ev
  virtual void  v23(); // _ZN7S1573C43v23Ev
  virtual void  v24(); // _ZN7S1573C43v24Ev
  virtual void  v25(); // _ZN7S1573C43v25Ev
  virtual void  v26(); // _ZN7S1573C43v26Ev
  virtual void  v27(); // _ZN7S1573C43v27Ev
  virtual void  v28(); // _ZN7S1573C43v28Ev
  virtual void  v29(); // _ZN7S1573C43v29Ev
  virtual void  v30(); // _ZN7S1573C43v30Ev
  virtual void  v31(); // _ZN7S1573C43v31Ev
  virtual void  v32(); // _ZN7S1573C43v32Ev
  virtual void  v33(); // _ZN7S1573C43v33Ev
  virtual void  v34(); // _ZN7S1573C43v34Ev
  virtual void  v35(); // _ZN7S1573C43v35Ev
  virtual void  v36(); // _ZN7S1573C43v36Ev
  virtual void  v37(); // _ZN7S1573C43v37Ev
  virtual void  v38(); // _ZN7S1573C43v38Ev
  virtual void  v39(); // _ZN7S1573C43v39Ev
  virtual void  v40(); // _ZN7S1573C43v40Ev
  virtual void  v41(); // _ZN7S1573C43v41Ev
  virtual void  v42(); // _ZN7S1573C43v42Ev
  virtual void  v43(); // _ZN7S1573C43v43Ev
  virtual void  v44(); // _ZN7S1573C43v44Ev
  virtual void  v45(); // _ZN7S1573C43v45Ev
  virtual void  v46(); // _ZN7S1573C43v46Ev
  virtual void  v47(); // _ZN7S1573C43v47Ev
  virtual void  v48(); // _ZN7S1573C43v48Ev
  virtual void  v49(); // _ZN7S1573C43v49Ev
  virtual void  v50(); // _ZN7S1573C43v50Ev
  virtual void  v51(); // _ZN7S1573C43v51Ev
  virtual void  v52(); // _ZN7S1573C43v52Ev
  virtual void  v53(); // _ZN7S1573C43v53Ev
  virtual void  v54(); // _ZN7S1573C43v54Ev
  virtual void  v55(); // _ZN7S1573C43v55Ev
  virtual void  v56(); // _ZN7S1573C43v56Ev
  virtual void  v57(); // _ZN7S1573C43v57Ev
  virtual void  v58(); // _ZN7S1573C43v58Ev
  virtual void  v59(); // _ZN7S1573C43v59Ev
  virtual void  v60(); // _ZN7S1573C43v60Ev
  virtual void  v61(); // _ZN7S1573C43v61Ev
  virtual void  v62(); // _ZN7S1573C43v62Ev
  virtual void  v63(); // _ZN7S1573C43v63Ev
  virtual void  v64(); // _ZN7S1573C43v64Ev
  virtual void  v65(); // _ZN7S1573C43v65Ev
  virtual void  v66(); // _ZN7S1573C43v66Ev
  virtual void  v67(); // _ZN7S1573C43v67Ev
  virtual void  v68(); // _ZN7S1573C43v68Ev
  virtual void  v69(); // _ZN7S1573C43v69Ev
  virtual void  v70(); // _ZN7S1573C43v70Ev
  virtual void  v71(); // _ZN7S1573C43v71Ev
  S1573C4(); // tgen
};
//SIG(-1 S1573C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1573C4 ::~S1573C4(){ note_dtor("S1573C4", this);}
void  S1573C4 ::v8(){vfunc_called(this, "_ZN7S1573C42v8Ev");}
void  S1573C4 ::v9(){vfunc_called(this, "_ZN7S1573C42v9Ev");}
void  S1573C4 ::v10(){vfunc_called(this, "_ZN7S1573C43v10Ev");}
void  S1573C4 ::v11(){vfunc_called(this, "_ZN7S1573C43v11Ev");}
void  S1573C4 ::v12(){vfunc_called(this, "_ZN7S1573C43v12Ev");}
void  S1573C4 ::v13(){vfunc_called(this, "_ZN7S1573C43v13Ev");}
void  S1573C4 ::v14(){vfunc_called(this, "_ZN7S1573C43v14Ev");}
void  S1573C4 ::v15(){vfunc_called(this, "_ZN7S1573C43v15Ev");}
void  S1573C4 ::v16(){vfunc_called(this, "_ZN7S1573C43v16Ev");}
void  S1573C4 ::v17(){vfunc_called(this, "_ZN7S1573C43v17Ev");}
void  S1573C4 ::v18(){vfunc_called(this, "_ZN7S1573C43v18Ev");}
void  S1573C4 ::v19(){vfunc_called(this, "_ZN7S1573C43v19Ev");}
void  S1573C4 ::v20(){vfunc_called(this, "_ZN7S1573C43v20Ev");}
void  S1573C4 ::v21(){vfunc_called(this, "_ZN7S1573C43v21Ev");}
void  S1573C4 ::v22(){vfunc_called(this, "_ZN7S1573C43v22Ev");}
void  S1573C4 ::v23(){vfunc_called(this, "_ZN7S1573C43v23Ev");}
void  S1573C4 ::v24(){vfunc_called(this, "_ZN7S1573C43v24Ev");}
void  S1573C4 ::v25(){vfunc_called(this, "_ZN7S1573C43v25Ev");}
void  S1573C4 ::v26(){vfunc_called(this, "_ZN7S1573C43v26Ev");}
void  S1573C4 ::v27(){vfunc_called(this, "_ZN7S1573C43v27Ev");}
void  S1573C4 ::v28(){vfunc_called(this, "_ZN7S1573C43v28Ev");}
void  S1573C4 ::v29(){vfunc_called(this, "_ZN7S1573C43v29Ev");}
void  S1573C4 ::v30(){vfunc_called(this, "_ZN7S1573C43v30Ev");}
void  S1573C4 ::v31(){vfunc_called(this, "_ZN7S1573C43v31Ev");}
void  S1573C4 ::v32(){vfunc_called(this, "_ZN7S1573C43v32Ev");}
void  S1573C4 ::v33(){vfunc_called(this, "_ZN7S1573C43v33Ev");}
void  S1573C4 ::v34(){vfunc_called(this, "_ZN7S1573C43v34Ev");}
void  S1573C4 ::v35(){vfunc_called(this, "_ZN7S1573C43v35Ev");}
void  S1573C4 ::v36(){vfunc_called(this, "_ZN7S1573C43v36Ev");}
void  S1573C4 ::v37(){vfunc_called(this, "_ZN7S1573C43v37Ev");}
void  S1573C4 ::v38(){vfunc_called(this, "_ZN7S1573C43v38Ev");}
void  S1573C4 ::v39(){vfunc_called(this, "_ZN7S1573C43v39Ev");}
void  S1573C4 ::v40(){vfunc_called(this, "_ZN7S1573C43v40Ev");}
void  S1573C4 ::v41(){vfunc_called(this, "_ZN7S1573C43v41Ev");}
void  S1573C4 ::v42(){vfunc_called(this, "_ZN7S1573C43v42Ev");}
void  S1573C4 ::v43(){vfunc_called(this, "_ZN7S1573C43v43Ev");}
void  S1573C4 ::v44(){vfunc_called(this, "_ZN7S1573C43v44Ev");}
void  S1573C4 ::v45(){vfunc_called(this, "_ZN7S1573C43v45Ev");}
void  S1573C4 ::v46(){vfunc_called(this, "_ZN7S1573C43v46Ev");}
void  S1573C4 ::v47(){vfunc_called(this, "_ZN7S1573C43v47Ev");}
void  S1573C4 ::v48(){vfunc_called(this, "_ZN7S1573C43v48Ev");}
void  S1573C4 ::v49(){vfunc_called(this, "_ZN7S1573C43v49Ev");}
void  S1573C4 ::v50(){vfunc_called(this, "_ZN7S1573C43v50Ev");}
void  S1573C4 ::v51(){vfunc_called(this, "_ZN7S1573C43v51Ev");}
void  S1573C4 ::v52(){vfunc_called(this, "_ZN7S1573C43v52Ev");}
void  S1573C4 ::v53(){vfunc_called(this, "_ZN7S1573C43v53Ev");}
void  S1573C4 ::v54(){vfunc_called(this, "_ZN7S1573C43v54Ev");}
void  S1573C4 ::v55(){vfunc_called(this, "_ZN7S1573C43v55Ev");}
void  S1573C4 ::v56(){vfunc_called(this, "_ZN7S1573C43v56Ev");}
void  S1573C4 ::v57(){vfunc_called(this, "_ZN7S1573C43v57Ev");}
void  S1573C4 ::v58(){vfunc_called(this, "_ZN7S1573C43v58Ev");}
void  S1573C4 ::v59(){vfunc_called(this, "_ZN7S1573C43v59Ev");}
void  S1573C4 ::v60(){vfunc_called(this, "_ZN7S1573C43v60Ev");}
void  S1573C4 ::v61(){vfunc_called(this, "_ZN7S1573C43v61Ev");}
void  S1573C4 ::v62(){vfunc_called(this, "_ZN7S1573C43v62Ev");}
void  S1573C4 ::v63(){vfunc_called(this, "_ZN7S1573C43v63Ev");}
void  S1573C4 ::v64(){vfunc_called(this, "_ZN7S1573C43v64Ev");}
void  S1573C4 ::v65(){vfunc_called(this, "_ZN7S1573C43v65Ev");}
void  S1573C4 ::v66(){vfunc_called(this, "_ZN7S1573C43v66Ev");}
void  S1573C4 ::v67(){vfunc_called(this, "_ZN7S1573C43v67Ev");}
void  S1573C4 ::v68(){vfunc_called(this, "_ZN7S1573C43v68Ev");}
void  S1573C4 ::v69(){vfunc_called(this, "_ZN7S1573C43v69Ev");}
void  S1573C4 ::v70(){vfunc_called(this, "_ZN7S1573C43v70Ev");}
void  S1573C4 ::v71(){vfunc_called(this, "_ZN7S1573C43v71Ev");}
S1573C4 ::S1573C4(){ note_ctor("S1573C4", this);} // tgen

static void Test_S1573C4()
{
  extern Class_Descriptor cd_S1573C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1573C4, buf);
    S1573C4 *dp, &lv = *(dp=new (buf) S1573C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1573C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1573C4)");
    check_field_offset(lv, s1573c4f0, ABISELECT(8,4), "S1573C4.s1573c4f0");
    check_field_offset(lv, s1573c4f1, ABISELECT(16,8), "S1573C4.s1573c4f1");
    check_field_offset(lv, s1573c4f2, ABISELECT(24,16), "S1573C4.s1573c4f2");
    check_field_offset(lv, s1573c4f3, ABISELECT(56,32), "S1573C4.s1573c4f3");
    check_field_offset(lv, s1573c4f4, ABISELECT(64,40), "S1573C4.s1573c4f4");
    check_field_offset(lv, s1573c4f5, ABISELECT(72,44), "S1573C4.s1573c4f5");
    check_field_offset(lv, s1573c4f6, ABISELECT(80,52), "S1573C4.s1573c4f6");
    test_class_info(&lv, &cd_S1573C4);
    dp->~S1573C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1573C4(Test_S1573C4, "S1573C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1573C4C1Ev();
extern void _ZN7S1573C4D1Ev();
Name_Map name_map_S1573C4[] = {
  NSPAIR(_ZN7S1573C4C1Ev),
  NSPAIR(_ZN7S1573C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1573C4[];
extern void _ZN7S1573C4D1Ev();
extern void _ZN7S1573C4D0Ev();
extern void _ZN7S1573C42v8Ev();
extern void _ZN7S1573C42v9Ev();
extern void _ZN7S1573C43v10Ev();
extern void _ZN7S1573C43v11Ev();
extern void _ZN7S1573C43v12Ev();
extern void _ZN7S1573C43v13Ev();
extern void _ZN7S1573C43v14Ev();
extern void _ZN7S1573C43v15Ev();
extern void _ZN7S1573C43v16Ev();
extern void _ZN7S1573C43v17Ev();
extern void _ZN7S1573C43v18Ev();
extern void _ZN7S1573C43v19Ev();
extern void _ZN7S1573C43v20Ev();
extern void _ZN7S1573C43v21Ev();
extern void _ZN7S1573C43v22Ev();
extern void _ZN7S1573C43v23Ev();
extern void _ZN7S1573C43v24Ev();
extern void _ZN7S1573C43v25Ev();
extern void _ZN7S1573C43v26Ev();
extern void _ZN7S1573C43v27Ev();
extern void _ZN7S1573C43v28Ev();
extern void _ZN7S1573C43v29Ev();
extern void _ZN7S1573C43v30Ev();
extern void _ZN7S1573C43v31Ev();
extern void _ZN7S1573C43v32Ev();
extern void _ZN7S1573C43v33Ev();
extern void _ZN7S1573C43v34Ev();
extern void _ZN7S1573C43v35Ev();
extern void _ZN7S1573C43v36Ev();
extern void _ZN7S1573C43v37Ev();
extern void _ZN7S1573C43v38Ev();
extern void _ZN7S1573C43v39Ev();
extern void _ZN7S1573C43v40Ev();
extern void _ZN7S1573C43v41Ev();
extern void _ZN7S1573C43v42Ev();
extern void _ZN7S1573C43v43Ev();
extern void _ZN7S1573C43v44Ev();
extern void _ZN7S1573C43v45Ev();
extern void _ZN7S1573C43v46Ev();
extern void _ZN7S1573C43v47Ev();
extern void _ZN7S1573C43v48Ev();
extern void _ZN7S1573C43v49Ev();
extern void _ZN7S1573C43v50Ev();
extern void _ZN7S1573C43v51Ev();
extern void _ZN7S1573C43v52Ev();
extern void _ZN7S1573C43v53Ev();
extern void _ZN7S1573C43v54Ev();
extern void _ZN7S1573C43v55Ev();
extern void _ZN7S1573C43v56Ev();
extern void _ZN7S1573C43v57Ev();
extern void _ZN7S1573C43v58Ev();
extern void _ZN7S1573C43v59Ev();
extern void _ZN7S1573C43v60Ev();
extern void _ZN7S1573C43v61Ev();
extern void _ZN7S1573C43v62Ev();
extern void _ZN7S1573C43v63Ev();
extern void _ZN7S1573C43v64Ev();
extern void _ZN7S1573C43v65Ev();
extern void _ZN7S1573C43v66Ev();
extern void _ZN7S1573C43v67Ev();
extern void _ZN7S1573C43v68Ev();
extern void _ZN7S1573C43v69Ev();
extern void _ZN7S1573C43v70Ev();
extern void _ZN7S1573C43v71Ev();
static  VTBL_ENTRY vtc_S1573C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1573C4[0]),
  (VTBL_ENTRY)&_ZN7S1573C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1573C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1573C4[];
extern  VTBL_ENTRY _ZTV7S1573C4[];
Class_Descriptor cd_S1573C4 = {  "S1573C4", // class name
  0,0,//no base classes
  &(vtc_S1573C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1573C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1573C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1573C3  : S1573C4 {
  int s1573c3f0;
  ::S1409C30 s1573c3f1;
  virtual  ~S1573C3(); // _ZN7S1573C3D1Ev
  virtual void  v72(); // _ZN7S1573C33v72Ev
  virtual void  v73(); // _ZN7S1573C33v73Ev
  virtual void  v74(); // _ZN7S1573C33v74Ev
  virtual void  v75(); // _ZN7S1573C33v75Ev
  virtual void  v76(); // _ZN7S1573C33v76Ev
  virtual void  v77(); // _ZN7S1573C33v77Ev
  virtual void  v78(); // _ZN7S1573C33v78Ev
  virtual void  v79(); // _ZN7S1573C33v79Ev
  virtual void  v80(); // _ZN7S1573C33v80Ev
  virtual void  v81(); // _ZN7S1573C33v81Ev
  virtual void  v82(); // _ZN7S1573C33v82Ev
  virtual void  v83(); // _ZN7S1573C33v83Ev
  virtual void  v84(); // _ZN7S1573C33v84Ev
  virtual void  v85(); // _ZN7S1573C33v85Ev
  virtual void  v86(); // _ZN7S1573C33v86Ev
  virtual void  v87(); // _ZN7S1573C33v87Ev
  virtual void  v88(); // _ZN7S1573C33v88Ev
  virtual void  v89(); // _ZN7S1573C33v89Ev
  S1573C3(); // tgen
};
//SIG(-1 S1573C3) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S1573C3 ::~S1573C3(){ note_dtor("S1573C3", this);}
void  S1573C3 ::v72(){vfunc_called(this, "_ZN7S1573C33v72Ev");}
void  S1573C3 ::v73(){vfunc_called(this, "_ZN7S1573C33v73Ev");}
void  S1573C3 ::v74(){vfunc_called(this, "_ZN7S1573C33v74Ev");}
void  S1573C3 ::v75(){vfunc_called(this, "_ZN7S1573C33v75Ev");}
void  S1573C3 ::v76(){vfunc_called(this, "_ZN7S1573C33v76Ev");}
void  S1573C3 ::v77(){vfunc_called(this, "_ZN7S1573C33v77Ev");}
void  S1573C3 ::v78(){vfunc_called(this, "_ZN7S1573C33v78Ev");}
void  S1573C3 ::v79(){vfunc_called(this, "_ZN7S1573C33v79Ev");}
void  S1573C3 ::v80(){vfunc_called(this, "_ZN7S1573C33v80Ev");}
void  S1573C3 ::v81(){vfunc_called(this, "_ZN7S1573C33v81Ev");}
void  S1573C3 ::v82(){vfunc_called(this, "_ZN7S1573C33v82Ev");}
void  S1573C3 ::v83(){vfunc_called(this, "_ZN7S1573C33v83Ev");}
void  S1573C3 ::v84(){vfunc_called(this, "_ZN7S1573C33v84Ev");}
void  S1573C3 ::v85(){vfunc_called(this, "_ZN7S1573C33v85Ev");}
void  S1573C3 ::v86(){vfunc_called(this, "_ZN7S1573C33v86Ev");}
void  S1573C3 ::v87(){vfunc_called(this, "_ZN7S1573C33v87Ev");}
void  S1573C3 ::v88(){vfunc_called(this, "_ZN7S1573C33v88Ev");}
void  S1573C3 ::v89(){vfunc_called(this, "_ZN7S1573C33v89Ev");}
S1573C3 ::S1573C3(){ note_ctor("S1573C3", this);} // tgen

static void Test_S1573C3()
{
  extern Class_Descriptor cd_S1573C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S1573C3, buf);
    S1573C3 *dp, &lv = *(dp=new (buf) S1573C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S1573C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1573C3)");
    check_base_class_offset(lv, (S1573C4*), 0, "S1573C3");
    check_field_offset(lv, s1573c3f0, ABISELECT(96,60), "S1573C3.s1573c3f0");
    check_field_offset(lv, s1573c3f1, ABISELECT(104,64), "S1573C3.s1573c3f1");
    test_class_info(&lv, &cd_S1573C3);
    dp->~S1573C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1573C3(Test_S1573C3, "S1573C3", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S1573C3C1Ev();
extern void _ZN7S1573C3D1Ev();
Name_Map name_map_S1573C3[] = {
  NSPAIR(_ZN7S1573C3C1Ev),
  NSPAIR(_ZN7S1573C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1573C4;
extern VTBL_ENTRY _ZTI7S1573C4[];
extern  VTBL_ENTRY _ZTV7S1573C4[];
static Base_Class bases_S1573C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1573C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1573C3[];
extern void _ZN7S1573C3D1Ev();
extern void _ZN7S1573C3D0Ev();
extern void _ZN7S1573C42v8Ev();
extern void _ZN7S1573C42v9Ev();
extern void _ZN7S1573C43v10Ev();
extern void _ZN7S1573C43v11Ev();
extern void _ZN7S1573C43v12Ev();
extern void _ZN7S1573C43v13Ev();
extern void _ZN7S1573C43v14Ev();
extern void _ZN7S1573C43v15Ev();
extern void _ZN7S1573C43v16Ev();
extern void _ZN7S1573C43v17Ev();
extern void _ZN7S1573C43v18Ev();
extern void _ZN7S1573C43v19Ev();
extern void _ZN7S1573C43v20Ev();
extern void _ZN7S1573C43v21Ev();
extern void _ZN7S1573C43v22Ev();
extern void _ZN7S1573C43v23Ev();
extern void _ZN7S1573C43v24Ev();
extern void _ZN7S1573C43v25Ev();
extern void _ZN7S1573C43v26Ev();
extern void _ZN7S1573C43v27Ev();
extern void _ZN7S1573C43v28Ev();
extern void _ZN7S1573C43v29Ev();
extern void _ZN7S1573C43v30Ev();
extern void _ZN7S1573C43v31Ev();
extern void _ZN7S1573C43v32Ev();
extern void _ZN7S1573C43v33Ev();
extern void _ZN7S1573C43v34Ev();
extern void _ZN7S1573C43v35Ev();
extern void _ZN7S1573C43v36Ev();
extern void _ZN7S1573C43v37Ev();
extern void _ZN7S1573C43v38Ev();
extern void _ZN7S1573C43v39Ev();
extern void _ZN7S1573C43v40Ev();
extern void _ZN7S1573C43v41Ev();
extern void _ZN7S1573C43v42Ev();
extern void _ZN7S1573C43v43Ev();
extern void _ZN7S1573C43v44Ev();
extern void _ZN7S1573C43v45Ev();
extern void _ZN7S1573C43v46Ev();
extern void _ZN7S1573C43v47Ev();
extern void _ZN7S1573C43v48Ev();
extern void _ZN7S1573C43v49Ev();
extern void _ZN7S1573C43v50Ev();
extern void _ZN7S1573C43v51Ev();
extern void _ZN7S1573C43v52Ev();
extern void _ZN7S1573C43v53Ev();
extern void _ZN7S1573C43v54Ev();
extern void _ZN7S1573C43v55Ev();
extern void _ZN7S1573C43v56Ev();
extern void _ZN7S1573C43v57Ev();
extern void _ZN7S1573C43v58Ev();
extern void _ZN7S1573C43v59Ev();
extern void _ZN7S1573C43v60Ev();
extern void _ZN7S1573C43v61Ev();
extern void _ZN7S1573C43v62Ev();
extern void _ZN7S1573C43v63Ev();
extern void _ZN7S1573C43v64Ev();
extern void _ZN7S1573C43v65Ev();
extern void _ZN7S1573C43v66Ev();
extern void _ZN7S1573C43v67Ev();
extern void _ZN7S1573C43v68Ev();
extern void _ZN7S1573C43v69Ev();
extern void _ZN7S1573C43v70Ev();
extern void _ZN7S1573C43v71Ev();
extern void _ZN7S1573C33v72Ev();
extern void _ZN7S1573C33v73Ev();
extern void _ZN7S1573C33v74Ev();
extern void _ZN7S1573C33v75Ev();
extern void _ZN7S1573C33v76Ev();
extern void _ZN7S1573C33v77Ev();
extern void _ZN7S1573C33v78Ev();
extern void _ZN7S1573C33v79Ev();
extern void _ZN7S1573C33v80Ev();
extern void _ZN7S1573C33v81Ev();
extern void _ZN7S1573C33v82Ev();
extern void _ZN7S1573C33v83Ev();
extern void _ZN7S1573C33v84Ev();
extern void _ZN7S1573C33v85Ev();
extern void _ZN7S1573C33v86Ev();
extern void _ZN7S1573C33v87Ev();
extern void _ZN7S1573C33v88Ev();
extern void _ZN7S1573C33v89Ev();
static  VTBL_ENTRY vtc_S1573C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1573C3[0]),
  (VTBL_ENTRY)&_ZN7S1573C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1573C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v89Ev,
};
extern VTBL_ENTRY _ZTI7S1573C3[];
extern  VTBL_ENTRY _ZTV7S1573C3[];
Class_Descriptor cd_S1573C3 = {  "S1573C3", // class name
  bases_S1573C3, 1,
  &(vtc_S1573C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S1573C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1573C3),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1573C10_nt  {
  char s1573c10f0[4];
  ::S1409C26 s1573c10f1;
  int s1573c10f2[2];
  void  mf1573c10(); // _ZN11S1573C10_nt9mf1573c10Ev
};
//SIG(-1 S1573C10_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S1573C10_nt ::mf1573c10(){}

//skip512 S1573C10_nt

#else // __cplusplus

Class_Descriptor cd_S1573C10_nt = {  "S1573C10_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1573C9_nt  : S1573C10_nt {
  void *s1573c9f0;
};
//SIG(-1 S1573C9_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1573C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S1573C10_nt;
static Base_Class bases_S1573C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1573C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1573C2  : S1573C3 {
  char s1573c2f0;
  ::S1573C9_nt s1573c2f1;
  ::S1573C9_nt s1573c2f2;
  ::S1573C9_nt s1573c2f3;
  ::S1573C9_nt s1573c2f4;
  unsigned int s1573c2f5:1;
  unsigned int s1573c2f6:1;
  unsigned int s1573c2f7:1;
  void *s1573c2f8;
  ::S1573C9_nt s1573c2f9;
  ::S1573C9_nt s1573c2f10;
  virtual  ~S1573C2(); // _ZN7S1573C2D1Ev
  virtual void  v90(); // _ZN7S1573C23v90Ev
  virtual void  v91(); // _ZN7S1573C23v91Ev
  virtual void  v92(); // _ZN7S1573C23v92Ev
  virtual void  v93(); // _ZN7S1573C23v93Ev
  virtual void  v94(); // _ZN7S1573C23v94Ev
  virtual void  v95(); // _ZN7S1573C23v95Ev
  virtual void  v96(); // _ZN7S1573C23v96Ev
  virtual void  v97(); // _ZN7S1573C23v97Ev
  virtual void  v98(); // _ZN7S1573C23v98Ev
  virtual void  v99(); // _ZN7S1573C23v99Ev
  S1573C2(); // tgen
};
//SIG(-1 S1573C2) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc FC8{ BC9{ m Fc[4] FC10{ BC11{ BC7}} Fi[2]} Fp} FC8 FC8 FC8 Fi:1 Fi:1 Fi:1 Fp FC8 FC8}


 S1573C2 ::~S1573C2(){ note_dtor("S1573C2", this);}
void  S1573C2 ::v90(){vfunc_called(this, "_ZN7S1573C23v90Ev");}
void  S1573C2 ::v91(){vfunc_called(this, "_ZN7S1573C23v91Ev");}
void  S1573C2 ::v92(){vfunc_called(this, "_ZN7S1573C23v92Ev");}
void  S1573C2 ::v93(){vfunc_called(this, "_ZN7S1573C23v93Ev");}
void  S1573C2 ::v94(){vfunc_called(this, "_ZN7S1573C23v94Ev");}
void  S1573C2 ::v95(){vfunc_called(this, "_ZN7S1573C23v95Ev");}
void  S1573C2 ::v96(){vfunc_called(this, "_ZN7S1573C23v96Ev");}
void  S1573C2 ::v97(){vfunc_called(this, "_ZN7S1573C23v97Ev");}
void  S1573C2 ::v98(){vfunc_called(this, "_ZN7S1573C23v98Ev");}
void  S1573C2 ::v99(){vfunc_called(this, "_ZN7S1573C23v99Ev");}
S1573C2 ::S1573C2(){ note_ctor("S1573C2", this);} // tgen

static void Test_S1573C2()
{
  extern Class_Descriptor cd_S1573C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,65)];
    init_test(&cd_S1573C2, buf);
    S1573C2 *dp, &lv = *(dp=new (buf) S1573C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,256), "sizeof(S1573C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1573C2)");
    check_base_class_offset(lv, (S1573C4*)(S1573C3*), 0, "S1573C2");
    check_base_class_offset(lv, (S1573C3*), 0, "S1573C2");
    check_field_offset(lv, s1573c2f0, ABISELECT(120,76), "S1573C2.s1573c2f0");
    check_field_offset(lv, s1573c2f1, ABISELECT(128,80), "S1573C2.s1573c2f1");
    check_field_offset(lv, s1573c2f2, ABISELECT(168,108), "S1573C2.s1573c2f2");
    check_field_offset(lv, s1573c2f3, ABISELECT(208,136), "S1573C2.s1573c2f3");
    check_field_offset(lv, s1573c2f4, ABISELECT(248,164), "S1573C2.s1573c2f4");
    set_bf_and_test(lv, s1573c2f5, ABISELECT(288,192), 0, 1, 1, "S1573C2");
    set_bf_and_test(lv, s1573c2f6, ABISELECT(288,192), 1, 1, 1, "S1573C2");
    set_bf_and_test(lv, s1573c2f7, ABISELECT(288,192), 2, 1, 1, "S1573C2");
    check_field_offset(lv, s1573c2f8, ABISELECT(296,196), "S1573C2.s1573c2f8");
    check_field_offset(lv, s1573c2f9, ABISELECT(304,200), "S1573C2.s1573c2f9");
    check_field_offset(lv, s1573c2f10, ABISELECT(344,228), "S1573C2.s1573c2f10");
    test_class_info(&lv, &cd_S1573C2);
    dp->~S1573C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1573C2(Test_S1573C2, "S1573C2", ABISELECT(384,256));

#else // __cplusplus

extern void _ZN7S1573C2C1Ev();
extern void _ZN7S1573C2D1Ev();
Name_Map name_map_S1573C2[] = {
  NSPAIR(_ZN7S1573C2C1Ev),
  NSPAIR(_ZN7S1573C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1573C4;
extern VTBL_ENTRY _ZTI7S1573C4[];
extern  VTBL_ENTRY _ZTV7S1573C4[];
extern Class_Descriptor cd_S1573C3;
extern VTBL_ENTRY _ZTI7S1573C3[];
extern  VTBL_ENTRY _ZTV7S1573C3[];
static Base_Class bases_S1573C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1573C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1573C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1573C2[];
extern void _ZN7S1573C2D1Ev();
extern void _ZN7S1573C2D0Ev();
extern void _ZN7S1573C42v8Ev();
extern void _ZN7S1573C42v9Ev();
extern void _ZN7S1573C43v10Ev();
extern void _ZN7S1573C43v11Ev();
extern void _ZN7S1573C43v12Ev();
extern void _ZN7S1573C43v13Ev();
extern void _ZN7S1573C43v14Ev();
extern void _ZN7S1573C43v15Ev();
extern void _ZN7S1573C43v16Ev();
extern void _ZN7S1573C43v17Ev();
extern void _ZN7S1573C43v18Ev();
extern void _ZN7S1573C43v19Ev();
extern void _ZN7S1573C43v20Ev();
extern void _ZN7S1573C43v21Ev();
extern void _ZN7S1573C43v22Ev();
extern void _ZN7S1573C43v23Ev();
extern void _ZN7S1573C43v24Ev();
extern void _ZN7S1573C43v25Ev();
extern void _ZN7S1573C43v26Ev();
extern void _ZN7S1573C43v27Ev();
extern void _ZN7S1573C43v28Ev();
extern void _ZN7S1573C43v29Ev();
extern void _ZN7S1573C43v30Ev();
extern void _ZN7S1573C43v31Ev();
extern void _ZN7S1573C43v32Ev();
extern void _ZN7S1573C43v33Ev();
extern void _ZN7S1573C43v34Ev();
extern void _ZN7S1573C43v35Ev();
extern void _ZN7S1573C43v36Ev();
extern void _ZN7S1573C43v37Ev();
extern void _ZN7S1573C43v38Ev();
extern void _ZN7S1573C43v39Ev();
extern void _ZN7S1573C43v40Ev();
extern void _ZN7S1573C43v41Ev();
extern void _ZN7S1573C43v42Ev();
extern void _ZN7S1573C43v43Ev();
extern void _ZN7S1573C43v44Ev();
extern void _ZN7S1573C43v45Ev();
extern void _ZN7S1573C43v46Ev();
extern void _ZN7S1573C43v47Ev();
extern void _ZN7S1573C43v48Ev();
extern void _ZN7S1573C43v49Ev();
extern void _ZN7S1573C43v50Ev();
extern void _ZN7S1573C43v51Ev();
extern void _ZN7S1573C43v52Ev();
extern void _ZN7S1573C43v53Ev();
extern void _ZN7S1573C43v54Ev();
extern void _ZN7S1573C43v55Ev();
extern void _ZN7S1573C43v56Ev();
extern void _ZN7S1573C43v57Ev();
extern void _ZN7S1573C43v58Ev();
extern void _ZN7S1573C43v59Ev();
extern void _ZN7S1573C43v60Ev();
extern void _ZN7S1573C43v61Ev();
extern void _ZN7S1573C43v62Ev();
extern void _ZN7S1573C43v63Ev();
extern void _ZN7S1573C43v64Ev();
extern void _ZN7S1573C43v65Ev();
extern void _ZN7S1573C43v66Ev();
extern void _ZN7S1573C43v67Ev();
extern void _ZN7S1573C43v68Ev();
extern void _ZN7S1573C43v69Ev();
extern void _ZN7S1573C43v70Ev();
extern void _ZN7S1573C43v71Ev();
extern void _ZN7S1573C33v72Ev();
extern void _ZN7S1573C33v73Ev();
extern void _ZN7S1573C33v74Ev();
extern void _ZN7S1573C33v75Ev();
extern void _ZN7S1573C33v76Ev();
extern void _ZN7S1573C33v77Ev();
extern void _ZN7S1573C33v78Ev();
extern void _ZN7S1573C33v79Ev();
extern void _ZN7S1573C33v80Ev();
extern void _ZN7S1573C33v81Ev();
extern void _ZN7S1573C33v82Ev();
extern void _ZN7S1573C33v83Ev();
extern void _ZN7S1573C33v84Ev();
extern void _ZN7S1573C33v85Ev();
extern void _ZN7S1573C33v86Ev();
extern void _ZN7S1573C33v87Ev();
extern void _ZN7S1573C33v88Ev();
extern void _ZN7S1573C33v89Ev();
extern void _ZN7S1573C23v90Ev();
extern void _ZN7S1573C23v91Ev();
extern void _ZN7S1573C23v92Ev();
extern void _ZN7S1573C23v93Ev();
extern void _ZN7S1573C23v94Ev();
extern void _ZN7S1573C23v95Ev();
extern void _ZN7S1573C23v96Ev();
extern void _ZN7S1573C23v97Ev();
extern void _ZN7S1573C23v98Ev();
extern void _ZN7S1573C23v99Ev();
static  VTBL_ENTRY vtc_S1573C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1573C2[0]),
  (VTBL_ENTRY)&_ZN7S1573C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1573C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v99Ev,
};
extern VTBL_ENTRY _ZTI7S1573C2[];
extern  VTBL_ENTRY _ZTV7S1573C2[];
Class_Descriptor cd_S1573C2 = {  "S1573C2", // class name
  bases_S1573C2, 2,
  &(vtc_S1573C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,256), // object size
  NSPAIRA(_ZTI7S1573C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1573C2),96, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1573C1  : S1573C2 {
  ::S1573C9_nt s1573c1f0;
  ::S1409C22 s1573c1f1;
  virtual  ~S1573C1(); // _ZN7S1573C1D1Ev
  virtual void  v1(); // _ZN7S1573C12v1Ev
  virtual void  v2(); // _ZN7S1573C12v2Ev
  virtual void  v3(); // _ZN7S1573C12v3Ev
  virtual void  v4(); // _ZN7S1573C12v4Ev
  virtual void  v5(); // _ZN7S1573C12v5Ev
  virtual void  v6(); // _ZN7S1573C12v6Ev
  virtual void  v7(); // _ZN7S1573C12v7Ev
  S1573C1(); // tgen
};
//SIG(1 S1573C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi FC6{ BC7{ BC8{ m Fp Fi[2]}}}} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 Fc FC9{ BC10{ m Fc[4] FC11{ BC12{ BC8}} Fi[2]} Fp} FC9 FC9 FC9 Fi:1 Fi:1 Fi:1 Fp FC9 FC9} vd v1 v2 v3 v4 v5 v6 v7 FC9 FC13{ BC14{ BC8}}}


 S1573C1 ::~S1573C1(){ note_dtor("S1573C1", this);}
void  S1573C1 ::v1(){vfunc_called(this, "_ZN7S1573C12v1Ev");}
void  S1573C1 ::v2(){vfunc_called(this, "_ZN7S1573C12v2Ev");}
void  S1573C1 ::v3(){vfunc_called(this, "_ZN7S1573C12v3Ev");}
void  S1573C1 ::v4(){vfunc_called(this, "_ZN7S1573C12v4Ev");}
void  S1573C1 ::v5(){vfunc_called(this, "_ZN7S1573C12v5Ev");}
void  S1573C1 ::v6(){vfunc_called(this, "_ZN7S1573C12v6Ev");}
void  S1573C1 ::v7(){vfunc_called(this, "_ZN7S1573C12v7Ev");}
S1573C1 ::S1573C1(){ note_ctor("S1573C1", this);} // tgen

static void Test_S1573C1()
{
  extern Class_Descriptor cd_S1573C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,75)];
    init_test(&cd_S1573C1, buf);
    S1573C1 *dp, &lv = *(dp=new (buf) S1573C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,296), "sizeof(S1573C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1573C1)");
    check_base_class_offset(lv, (S1573C4*)(S1573C3*)(S1573C2*), 0, "S1573C1");
    check_base_class_offset(lv, (S1573C3*)(S1573C2*), 0, "S1573C1");
    check_base_class_offset(lv, (S1573C2*), 0, "S1573C1");
    check_field_offset(lv, s1573c1f0, ABISELECT(384,256), "S1573C1.s1573c1f0");
    check_field_offset(lv, s1573c1f1, ABISELECT(424,284), "S1573C1.s1573c1f1");
    test_class_info(&lv, &cd_S1573C1);
    dp->~S1573C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1573C1(Test_S1573C1, "S1573C1", ABISELECT(440,296));

#else // __cplusplus

extern void _ZN7S1573C1C1Ev();
extern void _ZN7S1573C1D1Ev();
Name_Map name_map_S1573C1[] = {
  NSPAIR(_ZN7S1573C1C1Ev),
  NSPAIR(_ZN7S1573C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1573C4;
extern VTBL_ENTRY _ZTI7S1573C4[];
extern  VTBL_ENTRY _ZTV7S1573C4[];
extern Class_Descriptor cd_S1573C3;
extern VTBL_ENTRY _ZTI7S1573C3[];
extern  VTBL_ENTRY _ZTV7S1573C3[];
extern Class_Descriptor cd_S1573C2;
extern VTBL_ENTRY _ZTI7S1573C2[];
extern  VTBL_ENTRY _ZTV7S1573C2[];
static Base_Class bases_S1573C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1573C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1573C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1573C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1573C1[];
extern void _ZN7S1573C1D1Ev();
extern void _ZN7S1573C1D0Ev();
extern void _ZN7S1573C42v8Ev();
extern void _ZN7S1573C42v9Ev();
extern void _ZN7S1573C43v10Ev();
extern void _ZN7S1573C43v11Ev();
extern void _ZN7S1573C43v12Ev();
extern void _ZN7S1573C43v13Ev();
extern void _ZN7S1573C43v14Ev();
extern void _ZN7S1573C43v15Ev();
extern void _ZN7S1573C43v16Ev();
extern void _ZN7S1573C43v17Ev();
extern void _ZN7S1573C43v18Ev();
extern void _ZN7S1573C43v19Ev();
extern void _ZN7S1573C43v20Ev();
extern void _ZN7S1573C43v21Ev();
extern void _ZN7S1573C43v22Ev();
extern void _ZN7S1573C43v23Ev();
extern void _ZN7S1573C43v24Ev();
extern void _ZN7S1573C43v25Ev();
extern void _ZN7S1573C43v26Ev();
extern void _ZN7S1573C43v27Ev();
extern void _ZN7S1573C43v28Ev();
extern void _ZN7S1573C43v29Ev();
extern void _ZN7S1573C43v30Ev();
extern void _ZN7S1573C43v31Ev();
extern void _ZN7S1573C43v32Ev();
extern void _ZN7S1573C43v33Ev();
extern void _ZN7S1573C43v34Ev();
extern void _ZN7S1573C43v35Ev();
extern void _ZN7S1573C43v36Ev();
extern void _ZN7S1573C43v37Ev();
extern void _ZN7S1573C43v38Ev();
extern void _ZN7S1573C43v39Ev();
extern void _ZN7S1573C43v40Ev();
extern void _ZN7S1573C43v41Ev();
extern void _ZN7S1573C43v42Ev();
extern void _ZN7S1573C43v43Ev();
extern void _ZN7S1573C43v44Ev();
extern void _ZN7S1573C43v45Ev();
extern void _ZN7S1573C43v46Ev();
extern void _ZN7S1573C43v47Ev();
extern void _ZN7S1573C43v48Ev();
extern void _ZN7S1573C43v49Ev();
extern void _ZN7S1573C43v50Ev();
extern void _ZN7S1573C43v51Ev();
extern void _ZN7S1573C43v52Ev();
extern void _ZN7S1573C43v53Ev();
extern void _ZN7S1573C43v54Ev();
extern void _ZN7S1573C43v55Ev();
extern void _ZN7S1573C43v56Ev();
extern void _ZN7S1573C43v57Ev();
extern void _ZN7S1573C43v58Ev();
extern void _ZN7S1573C43v59Ev();
extern void _ZN7S1573C43v60Ev();
extern void _ZN7S1573C43v61Ev();
extern void _ZN7S1573C43v62Ev();
extern void _ZN7S1573C43v63Ev();
extern void _ZN7S1573C43v64Ev();
extern void _ZN7S1573C43v65Ev();
extern void _ZN7S1573C43v66Ev();
extern void _ZN7S1573C43v67Ev();
extern void _ZN7S1573C43v68Ev();
extern void _ZN7S1573C43v69Ev();
extern void _ZN7S1573C43v70Ev();
extern void _ZN7S1573C43v71Ev();
extern void _ZN7S1573C33v72Ev();
extern void _ZN7S1573C33v73Ev();
extern void _ZN7S1573C33v74Ev();
extern void _ZN7S1573C33v75Ev();
extern void _ZN7S1573C33v76Ev();
extern void _ZN7S1573C33v77Ev();
extern void _ZN7S1573C33v78Ev();
extern void _ZN7S1573C33v79Ev();
extern void _ZN7S1573C33v80Ev();
extern void _ZN7S1573C33v81Ev();
extern void _ZN7S1573C33v82Ev();
extern void _ZN7S1573C33v83Ev();
extern void _ZN7S1573C33v84Ev();
extern void _ZN7S1573C33v85Ev();
extern void _ZN7S1573C33v86Ev();
extern void _ZN7S1573C33v87Ev();
extern void _ZN7S1573C33v88Ev();
extern void _ZN7S1573C33v89Ev();
extern void _ZN7S1573C23v90Ev();
extern void _ZN7S1573C23v91Ev();
extern void _ZN7S1573C23v92Ev();
extern void _ZN7S1573C23v93Ev();
extern void _ZN7S1573C23v94Ev();
extern void _ZN7S1573C23v95Ev();
extern void _ZN7S1573C23v96Ev();
extern void _ZN7S1573C23v97Ev();
extern void _ZN7S1573C23v98Ev();
extern void _ZN7S1573C23v99Ev();
extern void _ZN7S1573C12v1Ev();
extern void _ZN7S1573C12v2Ev();
extern void _ZN7S1573C12v3Ev();
extern void _ZN7S1573C12v4Ev();
extern void _ZN7S1573C12v5Ev();
extern void _ZN7S1573C12v6Ev();
extern void _ZN7S1573C12v7Ev();
static  VTBL_ENTRY vtc_S1573C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1573C1[0]),
  (VTBL_ENTRY)&_ZN7S1573C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1573C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1573C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1573C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1573C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v97Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v98Ev,
  (VTBL_ENTRY)&_ZN7S1573C23v99Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1573C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1573C1[];
extern  VTBL_ENTRY _ZTV7S1573C1[];
Class_Descriptor cd_S1573C1 = {  "S1573C1", // class name
  bases_S1573C1, 3,
  &(vtc_S1573C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(440,296), // object size
  NSPAIRA(_ZTI7S1573C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1573C1),103, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3011C3  {
  int s3011c3f0;
  __tsi64 s3011c3f1;
  void *s3011c3f2[4];
  int s3011c3f3[2];
  void *s3011c3f4;
  ::S1409C5_nt s3011c3f5;
  void *s3011c3f6[2];
  virtual  ~S3011C3(); // _ZN7S3011C3D1Ev
  virtual void  v10(); // _ZN7S3011C33v10Ev
  virtual void  v11(); // _ZN7S3011C33v11Ev
  virtual void  v12(); // _ZN7S3011C33v12Ev
  virtual void  v13(); // _ZN7S3011C33v13Ev
  virtual void  v14(); // _ZN7S3011C33v14Ev
  virtual void  v15(); // _ZN7S3011C33v15Ev
  virtual void  v16(); // _ZN7S3011C33v16Ev
  virtual void  v17(); // _ZN7S3011C33v17Ev
  virtual void  v18(); // _ZN7S3011C33v18Ev
  virtual void  v19(); // _ZN7S3011C33v19Ev
  virtual void  v20(); // _ZN7S3011C33v20Ev
  virtual void  v21(); // _ZN7S3011C33v21Ev
  virtual void  v22(); // _ZN7S3011C33v22Ev
  virtual void  v23(); // _ZN7S3011C33v23Ev
  virtual void  v24(); // _ZN7S3011C33v24Ev
  virtual void  v25(); // _ZN7S3011C33v25Ev
  virtual void  v26(); // _ZN7S3011C33v26Ev
  virtual void  v27(); // _ZN7S3011C33v27Ev
  virtual void  v28(); // _ZN7S3011C33v28Ev
  virtual void  v29(); // _ZN7S3011C33v29Ev
  virtual void  v30(); // _ZN7S3011C33v30Ev
  virtual void  v31(); // _ZN7S3011C33v31Ev
  virtual void  v32(); // _ZN7S3011C33v32Ev
  virtual void  v33(); // _ZN7S3011C33v33Ev
  virtual void  v34(); // _ZN7S3011C33v34Ev
  virtual void  v35(); // _ZN7S3011C33v35Ev
  virtual void  v36(); // _ZN7S3011C33v36Ev
  virtual void  v37(); // _ZN7S3011C33v37Ev
  virtual void  v38(); // _ZN7S3011C33v38Ev
  virtual void  v39(); // _ZN7S3011C33v39Ev
  virtual void  v40(); // _ZN7S3011C33v40Ev
  virtual void  v41(); // _ZN7S3011C33v41Ev
  virtual void  v42(); // _ZN7S3011C33v42Ev
  virtual void  v43(); // _ZN7S3011C33v43Ev
  virtual void  v44(); // _ZN7S3011C33v44Ev
  virtual void  v45(); // _ZN7S3011C33v45Ev
  virtual void  v46(); // _ZN7S3011C33v46Ev
  virtual void  v47(); // _ZN7S3011C33v47Ev
  virtual void  v48(); // _ZN7S3011C33v48Ev
  virtual void  v49(); // _ZN7S3011C33v49Ev
  virtual void  v50(); // _ZN7S3011C33v50Ev
  virtual void  v51(); // _ZN7S3011C33v51Ev
  virtual void  v52(); // _ZN7S3011C33v52Ev
  virtual void  v53(); // _ZN7S3011C33v53Ev
  virtual void  v54(); // _ZN7S3011C33v54Ev
  virtual void  v55(); // _ZN7S3011C33v55Ev
  virtual void  v56(); // _ZN7S3011C33v56Ev
  virtual void  v57(); // _ZN7S3011C33v57Ev
  virtual void  v58(); // _ZN7S3011C33v58Ev
  virtual void  v59(); // _ZN7S3011C33v59Ev
  virtual void  v60(); // _ZN7S3011C33v60Ev
  virtual void  v61(); // _ZN7S3011C33v61Ev
  virtual void  v62(); // _ZN7S3011C33v62Ev
  virtual void  v63(); // _ZN7S3011C33v63Ev
  virtual void  v64(); // _ZN7S3011C33v64Ev
  virtual void  v65(); // _ZN7S3011C33v65Ev
  virtual void  v66(); // _ZN7S3011C33v66Ev
  virtual void  v67(); // _ZN7S3011C33v67Ev
  virtual void  v68(); // _ZN7S3011C33v68Ev
  virtual void  v69(); // _ZN7S3011C33v69Ev
  virtual void  v70(); // _ZN7S3011C33v70Ev
  virtual void  v71(); // _ZN7S3011C33v71Ev
  virtual void  v72(); // _ZN7S3011C33v72Ev
  virtual void  v73(); // _ZN7S3011C33v73Ev
  S3011C3(); // tgen
};
//SIG(-1 S3011C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3011C3 ::~S3011C3(){ note_dtor("S3011C3", this);}
void  S3011C3 ::v10(){vfunc_called(this, "_ZN7S3011C33v10Ev");}
void  S3011C3 ::v11(){vfunc_called(this, "_ZN7S3011C33v11Ev");}
void  S3011C3 ::v12(){vfunc_called(this, "_ZN7S3011C33v12Ev");}
void  S3011C3 ::v13(){vfunc_called(this, "_ZN7S3011C33v13Ev");}
void  S3011C3 ::v14(){vfunc_called(this, "_ZN7S3011C33v14Ev");}
void  S3011C3 ::v15(){vfunc_called(this, "_ZN7S3011C33v15Ev");}
void  S3011C3 ::v16(){vfunc_called(this, "_ZN7S3011C33v16Ev");}
void  S3011C3 ::v17(){vfunc_called(this, "_ZN7S3011C33v17Ev");}
void  S3011C3 ::v18(){vfunc_called(this, "_ZN7S3011C33v18Ev");}
void  S3011C3 ::v19(){vfunc_called(this, "_ZN7S3011C33v19Ev");}
void  S3011C3 ::v20(){vfunc_called(this, "_ZN7S3011C33v20Ev");}
void  S3011C3 ::v21(){vfunc_called(this, "_ZN7S3011C33v21Ev");}
void  S3011C3 ::v22(){vfunc_called(this, "_ZN7S3011C33v22Ev");}
void  S3011C3 ::v23(){vfunc_called(this, "_ZN7S3011C33v23Ev");}
void  S3011C3 ::v24(){vfunc_called(this, "_ZN7S3011C33v24Ev");}
void  S3011C3 ::v25(){vfunc_called(this, "_ZN7S3011C33v25Ev");}
void  S3011C3 ::v26(){vfunc_called(this, "_ZN7S3011C33v26Ev");}
void  S3011C3 ::v27(){vfunc_called(this, "_ZN7S3011C33v27Ev");}
void  S3011C3 ::v28(){vfunc_called(this, "_ZN7S3011C33v28Ev");}
void  S3011C3 ::v29(){vfunc_called(this, "_ZN7S3011C33v29Ev");}
void  S3011C3 ::v30(){vfunc_called(this, "_ZN7S3011C33v30Ev");}
void  S3011C3 ::v31(){vfunc_called(this, "_ZN7S3011C33v31Ev");}
void  S3011C3 ::v32(){vfunc_called(this, "_ZN7S3011C33v32Ev");}
void  S3011C3 ::v33(){vfunc_called(this, "_ZN7S3011C33v33Ev");}
void  S3011C3 ::v34(){vfunc_called(this, "_ZN7S3011C33v34Ev");}
void  S3011C3 ::v35(){vfunc_called(this, "_ZN7S3011C33v35Ev");}
void  S3011C3 ::v36(){vfunc_called(this, "_ZN7S3011C33v36Ev");}
void  S3011C3 ::v37(){vfunc_called(this, "_ZN7S3011C33v37Ev");}
void  S3011C3 ::v38(){vfunc_called(this, "_ZN7S3011C33v38Ev");}
void  S3011C3 ::v39(){vfunc_called(this, "_ZN7S3011C33v39Ev");}
void  S3011C3 ::v40(){vfunc_called(this, "_ZN7S3011C33v40Ev");}
void  S3011C3 ::v41(){vfunc_called(this, "_ZN7S3011C33v41Ev");}
void  S3011C3 ::v42(){vfunc_called(this, "_ZN7S3011C33v42Ev");}
void  S3011C3 ::v43(){vfunc_called(this, "_ZN7S3011C33v43Ev");}
void  S3011C3 ::v44(){vfunc_called(this, "_ZN7S3011C33v44Ev");}
void  S3011C3 ::v45(){vfunc_called(this, "_ZN7S3011C33v45Ev");}
void  S3011C3 ::v46(){vfunc_called(this, "_ZN7S3011C33v46Ev");}
void  S3011C3 ::v47(){vfunc_called(this, "_ZN7S3011C33v47Ev");}
void  S3011C3 ::v48(){vfunc_called(this, "_ZN7S3011C33v48Ev");}
void  S3011C3 ::v49(){vfunc_called(this, "_ZN7S3011C33v49Ev");}
void  S3011C3 ::v50(){vfunc_called(this, "_ZN7S3011C33v50Ev");}
void  S3011C3 ::v51(){vfunc_called(this, "_ZN7S3011C33v51Ev");}
void  S3011C3 ::v52(){vfunc_called(this, "_ZN7S3011C33v52Ev");}
void  S3011C3 ::v53(){vfunc_called(this, "_ZN7S3011C33v53Ev");}
void  S3011C3 ::v54(){vfunc_called(this, "_ZN7S3011C33v54Ev");}
void  S3011C3 ::v55(){vfunc_called(this, "_ZN7S3011C33v55Ev");}
void  S3011C3 ::v56(){vfunc_called(this, "_ZN7S3011C33v56Ev");}
void  S3011C3 ::v57(){vfunc_called(this, "_ZN7S3011C33v57Ev");}
void  S3011C3 ::v58(){vfunc_called(this, "_ZN7S3011C33v58Ev");}
void  S3011C3 ::v59(){vfunc_called(this, "_ZN7S3011C33v59Ev");}
void  S3011C3 ::v60(){vfunc_called(this, "_ZN7S3011C33v60Ev");}
void  S3011C3 ::v61(){vfunc_called(this, "_ZN7S3011C33v61Ev");}
void  S3011C3 ::v62(){vfunc_called(this, "_ZN7S3011C33v62Ev");}
void  S3011C3 ::v63(){vfunc_called(this, "_ZN7S3011C33v63Ev");}
void  S3011C3 ::v64(){vfunc_called(this, "_ZN7S3011C33v64Ev");}
void  S3011C3 ::v65(){vfunc_called(this, "_ZN7S3011C33v65Ev");}
void  S3011C3 ::v66(){vfunc_called(this, "_ZN7S3011C33v66Ev");}
void  S3011C3 ::v67(){vfunc_called(this, "_ZN7S3011C33v67Ev");}
void  S3011C3 ::v68(){vfunc_called(this, "_ZN7S3011C33v68Ev");}
void  S3011C3 ::v69(){vfunc_called(this, "_ZN7S3011C33v69Ev");}
void  S3011C3 ::v70(){vfunc_called(this, "_ZN7S3011C33v70Ev");}
void  S3011C3 ::v71(){vfunc_called(this, "_ZN7S3011C33v71Ev");}
void  S3011C3 ::v72(){vfunc_called(this, "_ZN7S3011C33v72Ev");}
void  S3011C3 ::v73(){vfunc_called(this, "_ZN7S3011C33v73Ev");}
S3011C3 ::S3011C3(){ note_ctor("S3011C3", this);} // tgen

static void Test_S3011C3()
{
  extern Class_Descriptor cd_S3011C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3011C3, buf);
    S3011C3 *dp, &lv = *(dp=new (buf) S3011C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3011C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3011C3)");
    check_field_offset(lv, s3011c3f0, ABISELECT(8,4), "S3011C3.s3011c3f0");
    check_field_offset(lv, s3011c3f1, ABISELECT(16,8), "S3011C3.s3011c3f1");
    check_field_offset(lv, s3011c3f2, ABISELECT(24,16), "S3011C3.s3011c3f2");
    check_field_offset(lv, s3011c3f3, ABISELECT(56,32), "S3011C3.s3011c3f3");
    check_field_offset(lv, s3011c3f4, ABISELECT(64,40), "S3011C3.s3011c3f4");
    check_field_offset(lv, s3011c3f5, ABISELECT(72,44), "S3011C3.s3011c3f5");
    check_field_offset(lv, s3011c3f6, ABISELECT(80,52), "S3011C3.s3011c3f6");
    test_class_info(&lv, &cd_S3011C3);
    dp->~S3011C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3011C3(Test_S3011C3, "S3011C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3011C3C1Ev();
extern void _ZN7S3011C3D1Ev();
Name_Map name_map_S3011C3[] = {
  NSPAIR(_ZN7S3011C3C1Ev),
  NSPAIR(_ZN7S3011C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3011C3[];
extern void _ZN7S3011C3D1Ev();
extern void _ZN7S3011C3D0Ev();
extern void _ZN7S3011C33v10Ev();
extern void _ZN7S3011C33v11Ev();
extern void _ZN7S3011C33v12Ev();
extern void _ZN7S3011C33v13Ev();
extern void _ZN7S3011C33v14Ev();
extern void _ZN7S3011C33v15Ev();
extern void _ZN7S3011C33v16Ev();
extern void _ZN7S3011C33v17Ev();
extern void _ZN7S3011C33v18Ev();
extern void _ZN7S3011C33v19Ev();
extern void _ZN7S3011C33v20Ev();
extern void _ZN7S3011C33v21Ev();
extern void _ZN7S3011C33v22Ev();
extern void _ZN7S3011C33v23Ev();
extern void _ZN7S3011C33v24Ev();
extern void _ZN7S3011C33v25Ev();
extern void _ZN7S3011C33v26Ev();
extern void _ZN7S3011C33v27Ev();
extern void _ZN7S3011C33v28Ev();
extern void _ZN7S3011C33v29Ev();
extern void _ZN7S3011C33v30Ev();
extern void _ZN7S3011C33v31Ev();
extern void _ZN7S3011C33v32Ev();
extern void _ZN7S3011C33v33Ev();
extern void _ZN7S3011C33v34Ev();
extern void _ZN7S3011C33v35Ev();
extern void _ZN7S3011C33v36Ev();
extern void _ZN7S3011C33v37Ev();
extern void _ZN7S3011C33v38Ev();
extern void _ZN7S3011C33v39Ev();
extern void _ZN7S3011C33v40Ev();
extern void _ZN7S3011C33v41Ev();
extern void _ZN7S3011C33v42Ev();
extern void _ZN7S3011C33v43Ev();
extern void _ZN7S3011C33v44Ev();
extern void _ZN7S3011C33v45Ev();
extern void _ZN7S3011C33v46Ev();
extern void _ZN7S3011C33v47Ev();
extern void _ZN7S3011C33v48Ev();
extern void _ZN7S3011C33v49Ev();
extern void _ZN7S3011C33v50Ev();
extern void _ZN7S3011C33v51Ev();
extern void _ZN7S3011C33v52Ev();
extern void _ZN7S3011C33v53Ev();
extern void _ZN7S3011C33v54Ev();
extern void _ZN7S3011C33v55Ev();
extern void _ZN7S3011C33v56Ev();
extern void _ZN7S3011C33v57Ev();
extern void _ZN7S3011C33v58Ev();
extern void _ZN7S3011C33v59Ev();
extern void _ZN7S3011C33v60Ev();
extern void _ZN7S3011C33v61Ev();
extern void _ZN7S3011C33v62Ev();
extern void _ZN7S3011C33v63Ev();
extern void _ZN7S3011C33v64Ev();
extern void _ZN7S3011C33v65Ev();
extern void _ZN7S3011C33v66Ev();
extern void _ZN7S3011C33v67Ev();
extern void _ZN7S3011C33v68Ev();
extern void _ZN7S3011C33v69Ev();
extern void _ZN7S3011C33v70Ev();
extern void _ZN7S3011C33v71Ev();
extern void _ZN7S3011C33v72Ev();
extern void _ZN7S3011C33v73Ev();
static  VTBL_ENTRY vtc_S3011C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3011C3[0]),
  (VTBL_ENTRY)&_ZN7S3011C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3011C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v73Ev,
};
extern VTBL_ENTRY _ZTI7S3011C3[];
extern  VTBL_ENTRY _ZTV7S3011C3[];
Class_Descriptor cd_S3011C3 = {  "S3011C3", // class name
  0,0,//no base classes
  &(vtc_S3011C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3011C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3011C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3011C2  : S3011C3 {
  void *s3011c2f0;
  unsigned int s3011c2f1:1;
  unsigned int s3011c2f2:1;
  unsigned int s3011c2f3:1;
  unsigned int s3011c2f4:1;
  unsigned int s3011c2f5:1;
  int s3011c2f6[7];
  void *s3011c2f7[2];
  virtual  ~S3011C2(); // _ZN7S3011C2D1Ev
  virtual void  v74(); // _ZN7S3011C23v74Ev
  virtual void  v75(); // _ZN7S3011C23v75Ev
  virtual void  v76(); // _ZN7S3011C23v76Ev
  virtual void  v77(); // _ZN7S3011C23v77Ev
  virtual void  v78(); // _ZN7S3011C23v78Ev
  virtual void  v79(); // _ZN7S3011C23v79Ev
  virtual void  v80(); // _ZN7S3011C23v80Ev
  virtual void  v81(); // _ZN7S3011C23v81Ev
  virtual void  v82(); // _ZN7S3011C23v82Ev
  virtual void  v83(); // _ZN7S3011C23v83Ev
  virtual void  v84(); // _ZN7S3011C23v84Ev
  S3011C2(); // tgen
};
//SIG(-1 S3011C2) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]}


 S3011C2 ::~S3011C2(){ note_dtor("S3011C2", this);}
void  S3011C2 ::v74(){vfunc_called(this, "_ZN7S3011C23v74Ev");}
void  S3011C2 ::v75(){vfunc_called(this, "_ZN7S3011C23v75Ev");}
void  S3011C2 ::v76(){vfunc_called(this, "_ZN7S3011C23v76Ev");}
void  S3011C2 ::v77(){vfunc_called(this, "_ZN7S3011C23v77Ev");}
void  S3011C2 ::v78(){vfunc_called(this, "_ZN7S3011C23v78Ev");}
void  S3011C2 ::v79(){vfunc_called(this, "_ZN7S3011C23v79Ev");}
void  S3011C2 ::v80(){vfunc_called(this, "_ZN7S3011C23v80Ev");}
void  S3011C2 ::v81(){vfunc_called(this, "_ZN7S3011C23v81Ev");}
void  S3011C2 ::v82(){vfunc_called(this, "_ZN7S3011C23v82Ev");}
void  S3011C2 ::v83(){vfunc_called(this, "_ZN7S3011C23v83Ev");}
void  S3011C2 ::v84(){vfunc_called(this, "_ZN7S3011C23v84Ev");}
S3011C2 ::S3011C2(){ note_ctor("S3011C2", this);} // tgen

static void Test_S3011C2()
{
  extern Class_Descriptor cd_S3011C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S3011C2, buf);
    S3011C2 *dp, &lv = *(dp=new (buf) S3011C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S3011C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3011C2)");
    check_base_class_offset(lv, (S3011C3*), 0, "S3011C2");
    check_field_offset(lv, s3011c2f0, ABISELECT(96,60), "S3011C2.s3011c2f0");
    set_bf_and_test(lv, s3011c2f1, ABISELECT(104,64), 0, 1, 1, "S3011C2");
    set_bf_and_test(lv, s3011c2f2, ABISELECT(104,64), 1, 1, 1, "S3011C2");
    set_bf_and_test(lv, s3011c2f3, ABISELECT(104,64), 2, 1, 1, "S3011C2");
    set_bf_and_test(lv, s3011c2f4, ABISELECT(104,64), 3, 1, 1, "S3011C2");
    set_bf_and_test(lv, s3011c2f5, ABISELECT(104,64), 4, 1, 1, "S3011C2");
    check_field_offset(lv, s3011c2f6, ABISELECT(108,68), "S3011C2.s3011c2f6");
    check_field_offset(lv, s3011c2f7, ABISELECT(136,96), "S3011C2.s3011c2f7");
    test_class_info(&lv, &cd_S3011C2);
    dp->~S3011C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3011C2(Test_S3011C2, "S3011C2", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN7S3011C2C1Ev();
extern void _ZN7S3011C2D1Ev();
Name_Map name_map_S3011C2[] = {
  NSPAIR(_ZN7S3011C2C1Ev),
  NSPAIR(_ZN7S3011C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3011C3;
extern VTBL_ENTRY _ZTI7S3011C3[];
extern  VTBL_ENTRY _ZTV7S3011C3[];
static Base_Class bases_S3011C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3011C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3011C2[];
extern void _ZN7S3011C2D1Ev();
extern void _ZN7S3011C2D0Ev();
extern void _ZN7S3011C33v10Ev();
extern void _ZN7S3011C33v11Ev();
extern void _ZN7S3011C33v12Ev();
extern void _ZN7S3011C33v13Ev();
extern void _ZN7S3011C33v14Ev();
extern void _ZN7S3011C33v15Ev();
extern void _ZN7S3011C33v16Ev();
extern void _ZN7S3011C33v17Ev();
extern void _ZN7S3011C33v18Ev();
extern void _ZN7S3011C33v19Ev();
extern void _ZN7S3011C33v20Ev();
extern void _ZN7S3011C33v21Ev();
extern void _ZN7S3011C33v22Ev();
extern void _ZN7S3011C33v23Ev();
extern void _ZN7S3011C33v24Ev();
extern void _ZN7S3011C33v25Ev();
extern void _ZN7S3011C33v26Ev();
extern void _ZN7S3011C33v27Ev();
extern void _ZN7S3011C33v28Ev();
extern void _ZN7S3011C33v29Ev();
extern void _ZN7S3011C33v30Ev();
extern void _ZN7S3011C33v31Ev();
extern void _ZN7S3011C33v32Ev();
extern void _ZN7S3011C33v33Ev();
extern void _ZN7S3011C33v34Ev();
extern void _ZN7S3011C33v35Ev();
extern void _ZN7S3011C33v36Ev();
extern void _ZN7S3011C33v37Ev();
extern void _ZN7S3011C33v38Ev();
extern void _ZN7S3011C33v39Ev();
extern void _ZN7S3011C33v40Ev();
extern void _ZN7S3011C33v41Ev();
extern void _ZN7S3011C33v42Ev();
extern void _ZN7S3011C33v43Ev();
extern void _ZN7S3011C33v44Ev();
extern void _ZN7S3011C33v45Ev();
extern void _ZN7S3011C33v46Ev();
extern void _ZN7S3011C33v47Ev();
extern void _ZN7S3011C33v48Ev();
extern void _ZN7S3011C33v49Ev();
extern void _ZN7S3011C33v50Ev();
extern void _ZN7S3011C33v51Ev();
extern void _ZN7S3011C33v52Ev();
extern void _ZN7S3011C33v53Ev();
extern void _ZN7S3011C33v54Ev();
extern void _ZN7S3011C33v55Ev();
extern void _ZN7S3011C33v56Ev();
extern void _ZN7S3011C33v57Ev();
extern void _ZN7S3011C33v58Ev();
extern void _ZN7S3011C33v59Ev();
extern void _ZN7S3011C33v60Ev();
extern void _ZN7S3011C33v61Ev();
extern void _ZN7S3011C33v62Ev();
extern void _ZN7S3011C33v63Ev();
extern void _ZN7S3011C33v64Ev();
extern void _ZN7S3011C33v65Ev();
extern void _ZN7S3011C33v66Ev();
extern void _ZN7S3011C33v67Ev();
extern void _ZN7S3011C33v68Ev();
extern void _ZN7S3011C33v69Ev();
extern void _ZN7S3011C33v70Ev();
extern void _ZN7S3011C33v71Ev();
extern void _ZN7S3011C33v72Ev();
extern void _ZN7S3011C33v73Ev();
extern void _ZN7S3011C23v74Ev();
extern void _ZN7S3011C23v75Ev();
extern void _ZN7S3011C23v76Ev();
extern void _ZN7S3011C23v77Ev();
extern void _ZN7S3011C23v78Ev();
extern void _ZN7S3011C23v79Ev();
extern void _ZN7S3011C23v80Ev();
extern void _ZN7S3011C23v81Ev();
extern void _ZN7S3011C23v82Ev();
extern void _ZN7S3011C23v83Ev();
extern void _ZN7S3011C23v84Ev();
static  VTBL_ENTRY vtc_S3011C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3011C2[0]),
  (VTBL_ENTRY)&_ZN7S3011C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3011C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v84Ev,
};
extern VTBL_ENTRY _ZTI7S3011C2[];
extern  VTBL_ENTRY _ZTV7S3011C2[];
Class_Descriptor cd_S3011C2 = {  "S3011C2", // class name
  bases_S3011C2, 1,
  &(vtc_S3011C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI7S3011C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3011C2),79, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3011C1  : S3011C2 {
  void *s3011c1f0[3];
  __tsi64 s3011c1f1[3];
  unsigned int s3011c1f2:1;
  unsigned int s3011c1f3:1;
  unsigned int s3011c1f4:1;
  unsigned int s3011c1f5:1;
  unsigned int s3011c1f6:1;
  unsigned int s3011c1f7:1;
  ::S1409C31 s3011c1f8;
  ::S1409C31 s3011c1f9;
  ::S1409C27 s3011c1f10;
  ::S1409C23 s3011c1f11;
  ::S1409C19 s3011c1f12;
  virtual  ~S3011C1(); // _ZN7S3011C1D1Ev
  virtual void  v1(); // _ZN7S3011C12v1Ev
  virtual void  v2(); // _ZN7S3011C12v2Ev
  virtual void  v3(); // _ZN7S3011C12v3Ev
  virtual void  v4(); // _ZN7S3011C12v4Ev
  virtual void  v5(); // _ZN7S3011C12v5Ev
  virtual void  v6(); // _ZN7S3011C12v6Ev
  virtual void  v7(); // _ZN7S3011C12v7Ev
  virtual void  v8(); // _ZN7S3011C12v8Ev
  virtual void  v9(); // _ZN7S3011C12v9Ev
  S3011C1(); // tgen
};
//SIG(1 S3011C1) C1{ BC2{ BC3{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp[3] FL[3] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ m Fp Fi[2]}} FC5 FC7{ BC6} FC8{ BC6} FC9{ BC6}}


 S3011C1 ::~S3011C1(){ note_dtor("S3011C1", this);}
void  S3011C1 ::v1(){vfunc_called(this, "_ZN7S3011C12v1Ev");}
void  S3011C1 ::v2(){vfunc_called(this, "_ZN7S3011C12v2Ev");}
void  S3011C1 ::v3(){vfunc_called(this, "_ZN7S3011C12v3Ev");}
void  S3011C1 ::v4(){vfunc_called(this, "_ZN7S3011C12v4Ev");}
void  S3011C1 ::v5(){vfunc_called(this, "_ZN7S3011C12v5Ev");}
void  S3011C1 ::v6(){vfunc_called(this, "_ZN7S3011C12v6Ev");}
void  S3011C1 ::v7(){vfunc_called(this, "_ZN7S3011C12v7Ev");}
void  S3011C1 ::v8(){vfunc_called(this, "_ZN7S3011C12v8Ev");}
void  S3011C1 ::v9(){vfunc_called(this, "_ZN7S3011C12v9Ev");}
S3011C1 ::S3011C1(){ note_ctor("S3011C1", this);} // tgen

static void Test_S3011C1()
{
  extern Class_Descriptor cd_S3011C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,52)];
    init_test(&cd_S3011C1, buf);
    S3011C1 *dp, &lv = *(dp=new (buf) S3011C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,204), "sizeof(S3011C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3011C1)");
    check_base_class_offset(lv, (S3011C3*)(S3011C2*), 0, "S3011C1");
    check_base_class_offset(lv, (S3011C2*), 0, "S3011C1");
    check_field_offset(lv, s3011c1f0, ABISELECT(152,104), "S3011C1.s3011c1f0");
    check_field_offset(lv, s3011c1f1, ABISELECT(176,116), "S3011C1.s3011c1f1");
    set_bf_and_test(lv, s3011c1f2, ABISELECT(200,140), 0, 1, 1, "S3011C1");
    set_bf_and_test(lv, s3011c1f3, ABISELECT(200,140), 1, 1, 1, "S3011C1");
    set_bf_and_test(lv, s3011c1f4, ABISELECT(200,140), 2, 1, 1, "S3011C1");
    set_bf_and_test(lv, s3011c1f5, ABISELECT(200,140), 3, 1, 1, "S3011C1");
    set_bf_and_test(lv, s3011c1f6, ABISELECT(200,140), 4, 1, 1, "S3011C1");
    set_bf_and_test(lv, s3011c1f7, ABISELECT(200,140), 5, 1, 1, "S3011C1");
    check_field_offset(lv, s3011c1f8, ABISELECT(208,144), "S3011C1.s3011c1f8");
    check_field_offset(lv, s3011c1f9, ABISELECT(224,156), "S3011C1.s3011c1f9");
    check_field_offset(lv, s3011c1f10, ABISELECT(240,168), "S3011C1.s3011c1f10");
    check_field_offset(lv, s3011c1f11, ABISELECT(256,180), "S3011C1.s3011c1f11");
    check_field_offset(lv, s3011c1f12, ABISELECT(272,192), "S3011C1.s3011c1f12");
    test_class_info(&lv, &cd_S3011C1);
    dp->~S3011C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3011C1(Test_S3011C1, "S3011C1", ABISELECT(288,204));

#else // __cplusplus

extern void _ZN7S3011C1C1Ev();
extern void _ZN7S3011C1D1Ev();
Name_Map name_map_S3011C1[] = {
  NSPAIR(_ZN7S3011C1C1Ev),
  NSPAIR(_ZN7S3011C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3011C3;
extern VTBL_ENTRY _ZTI7S3011C3[];
extern  VTBL_ENTRY _ZTV7S3011C3[];
extern Class_Descriptor cd_S3011C2;
extern VTBL_ENTRY _ZTI7S3011C2[];
extern  VTBL_ENTRY _ZTV7S3011C2[];
static Base_Class bases_S3011C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3011C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3011C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3011C1[];
extern void _ZN7S3011C1D1Ev();
extern void _ZN7S3011C1D0Ev();
extern void _ZN7S3011C33v10Ev();
extern void _ZN7S3011C33v11Ev();
extern void _ZN7S3011C33v12Ev();
extern void _ZN7S3011C33v13Ev();
extern void _ZN7S3011C33v14Ev();
extern void _ZN7S3011C33v15Ev();
extern void _ZN7S3011C33v16Ev();
extern void _ZN7S3011C33v17Ev();
extern void _ZN7S3011C33v18Ev();
extern void _ZN7S3011C33v19Ev();
extern void _ZN7S3011C33v20Ev();
extern void _ZN7S3011C33v21Ev();
extern void _ZN7S3011C33v22Ev();
extern void _ZN7S3011C33v23Ev();
extern void _ZN7S3011C33v24Ev();
extern void _ZN7S3011C33v25Ev();
extern void _ZN7S3011C33v26Ev();
extern void _ZN7S3011C33v27Ev();
extern void _ZN7S3011C33v28Ev();
extern void _ZN7S3011C33v29Ev();
extern void _ZN7S3011C33v30Ev();
extern void _ZN7S3011C33v31Ev();
extern void _ZN7S3011C33v32Ev();
extern void _ZN7S3011C33v33Ev();
extern void _ZN7S3011C33v34Ev();
extern void _ZN7S3011C33v35Ev();
extern void _ZN7S3011C33v36Ev();
extern void _ZN7S3011C33v37Ev();
extern void _ZN7S3011C33v38Ev();
extern void _ZN7S3011C33v39Ev();
extern void _ZN7S3011C33v40Ev();
extern void _ZN7S3011C33v41Ev();
extern void _ZN7S3011C33v42Ev();
extern void _ZN7S3011C33v43Ev();
extern void _ZN7S3011C33v44Ev();
extern void _ZN7S3011C33v45Ev();
extern void _ZN7S3011C33v46Ev();
extern void _ZN7S3011C33v47Ev();
extern void _ZN7S3011C33v48Ev();
extern void _ZN7S3011C33v49Ev();
extern void _ZN7S3011C33v50Ev();
extern void _ZN7S3011C33v51Ev();
extern void _ZN7S3011C33v52Ev();
extern void _ZN7S3011C33v53Ev();
extern void _ZN7S3011C33v54Ev();
extern void _ZN7S3011C33v55Ev();
extern void _ZN7S3011C33v56Ev();
extern void _ZN7S3011C33v57Ev();
extern void _ZN7S3011C33v58Ev();
extern void _ZN7S3011C33v59Ev();
extern void _ZN7S3011C33v60Ev();
extern void _ZN7S3011C33v61Ev();
extern void _ZN7S3011C33v62Ev();
extern void _ZN7S3011C33v63Ev();
extern void _ZN7S3011C33v64Ev();
extern void _ZN7S3011C33v65Ev();
extern void _ZN7S3011C33v66Ev();
extern void _ZN7S3011C33v67Ev();
extern void _ZN7S3011C33v68Ev();
extern void _ZN7S3011C33v69Ev();
extern void _ZN7S3011C33v70Ev();
extern void _ZN7S3011C33v71Ev();
extern void _ZN7S3011C33v72Ev();
extern void _ZN7S3011C33v73Ev();
extern void _ZN7S3011C23v74Ev();
extern void _ZN7S3011C23v75Ev();
extern void _ZN7S3011C23v76Ev();
extern void _ZN7S3011C23v77Ev();
extern void _ZN7S3011C23v78Ev();
extern void _ZN7S3011C23v79Ev();
extern void _ZN7S3011C23v80Ev();
extern void _ZN7S3011C23v81Ev();
extern void _ZN7S3011C23v82Ev();
extern void _ZN7S3011C23v83Ev();
extern void _ZN7S3011C23v84Ev();
extern void _ZN7S3011C12v1Ev();
extern void _ZN7S3011C12v2Ev();
extern void _ZN7S3011C12v3Ev();
extern void _ZN7S3011C12v4Ev();
extern void _ZN7S3011C12v5Ev();
extern void _ZN7S3011C12v6Ev();
extern void _ZN7S3011C12v7Ev();
extern void _ZN7S3011C12v8Ev();
extern void _ZN7S3011C12v9Ev();
static  VTBL_ENTRY vtc_S3011C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3011C1[0]),
  (VTBL_ENTRY)&_ZN7S3011C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3011C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3011C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3011C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3011C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S3011C1[];
extern  VTBL_ENTRY _ZTV7S3011C1[];
Class_Descriptor cd_S3011C1 = {  "S3011C1", // class name
  bases_S3011C1, 2,
  &(vtc_S3011C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,204), // object size
  NSPAIRA(_ZTI7S3011C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3011C1),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C2  {
  int s7161c2f0;
  __tsi64 s7161c2f1;
  void *s7161c2f2[4];
  int s7161c2f3[2];
  void *s7161c2f4;
  ::S1409C5_nt s7161c2f5;
  void *s7161c2f6[2];
  virtual  ~S7161C2(); // _ZN7S7161C2D1Ev
  virtual void  v8(); // _ZN7S7161C22v8Ev
  virtual void  v9(); // _ZN7S7161C22v9Ev
  virtual void  v10(); // _ZN7S7161C23v10Ev
  virtual void  v11(); // _ZN7S7161C23v11Ev
  virtual void  v12(); // _ZN7S7161C23v12Ev
  virtual void  v13(); // _ZN7S7161C23v13Ev
  virtual void  v14(); // _ZN7S7161C23v14Ev
  virtual void  v15(); // _ZN7S7161C23v15Ev
  virtual void  v16(); // _ZN7S7161C23v16Ev
  virtual void  v17(); // _ZN7S7161C23v17Ev
  virtual void  v18(); // _ZN7S7161C23v18Ev
  virtual void  v19(); // _ZN7S7161C23v19Ev
  virtual void  v20(); // _ZN7S7161C23v20Ev
  virtual void  v21(); // _ZN7S7161C23v21Ev
  virtual void  v22(); // _ZN7S7161C23v22Ev
  virtual void  v23(); // _ZN7S7161C23v23Ev
  virtual void  v24(); // _ZN7S7161C23v24Ev
  virtual void  v25(); // _ZN7S7161C23v25Ev
  virtual void  v26(); // _ZN7S7161C23v26Ev
  virtual void  v27(); // _ZN7S7161C23v27Ev
  virtual void  v28(); // _ZN7S7161C23v28Ev
  virtual void  v29(); // _ZN7S7161C23v29Ev
  virtual void  v30(); // _ZN7S7161C23v30Ev
  virtual void  v31(); // _ZN7S7161C23v31Ev
  virtual void  v32(); // _ZN7S7161C23v32Ev
  virtual void  v33(); // _ZN7S7161C23v33Ev
  virtual void  v34(); // _ZN7S7161C23v34Ev
  virtual void  v35(); // _ZN7S7161C23v35Ev
  virtual void  v36(); // _ZN7S7161C23v36Ev
  virtual void  v37(); // _ZN7S7161C23v37Ev
  virtual void  v38(); // _ZN7S7161C23v38Ev
  virtual void  v39(); // _ZN7S7161C23v39Ev
  virtual void  v40(); // _ZN7S7161C23v40Ev
  virtual void  v41(); // _ZN7S7161C23v41Ev
  virtual void  v42(); // _ZN7S7161C23v42Ev
  virtual void  v43(); // _ZN7S7161C23v43Ev
  virtual void  v44(); // _ZN7S7161C23v44Ev
  virtual void  v45(); // _ZN7S7161C23v45Ev
  virtual void  v46(); // _ZN7S7161C23v46Ev
  virtual void  v47(); // _ZN7S7161C23v47Ev
  virtual void  v48(); // _ZN7S7161C23v48Ev
  virtual void  v49(); // _ZN7S7161C23v49Ev
  virtual void  v50(); // _ZN7S7161C23v50Ev
  virtual void  v51(); // _ZN7S7161C23v51Ev
  virtual void  v52(); // _ZN7S7161C23v52Ev
  virtual void  v53(); // _ZN7S7161C23v53Ev
  virtual void  v54(); // _ZN7S7161C23v54Ev
  virtual void  v55(); // _ZN7S7161C23v55Ev
  virtual void  v56(); // _ZN7S7161C23v56Ev
  virtual void  v57(); // _ZN7S7161C23v57Ev
  virtual void  v58(); // _ZN7S7161C23v58Ev
  virtual void  v59(); // _ZN7S7161C23v59Ev
  virtual void  v60(); // _ZN7S7161C23v60Ev
  virtual void  v61(); // _ZN7S7161C23v61Ev
  virtual void  v62(); // _ZN7S7161C23v62Ev
  virtual void  v63(); // _ZN7S7161C23v63Ev
  virtual void  v64(); // _ZN7S7161C23v64Ev
  virtual void  v65(); // _ZN7S7161C23v65Ev
  virtual void  v66(); // _ZN7S7161C23v66Ev
  virtual void  v67(); // _ZN7S7161C23v67Ev
  virtual void  v68(); // _ZN7S7161C23v68Ev
  virtual void  v69(); // _ZN7S7161C23v69Ev
  virtual void  v70(); // _ZN7S7161C23v70Ev
  virtual void  v71(); // _ZN7S7161C23v71Ev
  S7161C2(); // tgen
};
//SIG(-1 S7161C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S7161C2 ::~S7161C2(){ note_dtor("S7161C2", this);}
void  S7161C2 ::v8(){vfunc_called(this, "_ZN7S7161C22v8Ev");}
void  S7161C2 ::v9(){vfunc_called(this, "_ZN7S7161C22v9Ev");}
void  S7161C2 ::v10(){vfunc_called(this, "_ZN7S7161C23v10Ev");}
void  S7161C2 ::v11(){vfunc_called(this, "_ZN7S7161C23v11Ev");}
void  S7161C2 ::v12(){vfunc_called(this, "_ZN7S7161C23v12Ev");}
void  S7161C2 ::v13(){vfunc_called(this, "_ZN7S7161C23v13Ev");}
void  S7161C2 ::v14(){vfunc_called(this, "_ZN7S7161C23v14Ev");}
void  S7161C2 ::v15(){vfunc_called(this, "_ZN7S7161C23v15Ev");}
void  S7161C2 ::v16(){vfunc_called(this, "_ZN7S7161C23v16Ev");}
void  S7161C2 ::v17(){vfunc_called(this, "_ZN7S7161C23v17Ev");}
void  S7161C2 ::v18(){vfunc_called(this, "_ZN7S7161C23v18Ev");}
void  S7161C2 ::v19(){vfunc_called(this, "_ZN7S7161C23v19Ev");}
void  S7161C2 ::v20(){vfunc_called(this, "_ZN7S7161C23v20Ev");}
void  S7161C2 ::v21(){vfunc_called(this, "_ZN7S7161C23v21Ev");}
void  S7161C2 ::v22(){vfunc_called(this, "_ZN7S7161C23v22Ev");}
void  S7161C2 ::v23(){vfunc_called(this, "_ZN7S7161C23v23Ev");}
void  S7161C2 ::v24(){vfunc_called(this, "_ZN7S7161C23v24Ev");}
void  S7161C2 ::v25(){vfunc_called(this, "_ZN7S7161C23v25Ev");}
void  S7161C2 ::v26(){vfunc_called(this, "_ZN7S7161C23v26Ev");}
void  S7161C2 ::v27(){vfunc_called(this, "_ZN7S7161C23v27Ev");}
void  S7161C2 ::v28(){vfunc_called(this, "_ZN7S7161C23v28Ev");}
void  S7161C2 ::v29(){vfunc_called(this, "_ZN7S7161C23v29Ev");}
void  S7161C2 ::v30(){vfunc_called(this, "_ZN7S7161C23v30Ev");}
void  S7161C2 ::v31(){vfunc_called(this, "_ZN7S7161C23v31Ev");}
void  S7161C2 ::v32(){vfunc_called(this, "_ZN7S7161C23v32Ev");}
void  S7161C2 ::v33(){vfunc_called(this, "_ZN7S7161C23v33Ev");}
void  S7161C2 ::v34(){vfunc_called(this, "_ZN7S7161C23v34Ev");}
void  S7161C2 ::v35(){vfunc_called(this, "_ZN7S7161C23v35Ev");}
void  S7161C2 ::v36(){vfunc_called(this, "_ZN7S7161C23v36Ev");}
void  S7161C2 ::v37(){vfunc_called(this, "_ZN7S7161C23v37Ev");}
void  S7161C2 ::v38(){vfunc_called(this, "_ZN7S7161C23v38Ev");}
void  S7161C2 ::v39(){vfunc_called(this, "_ZN7S7161C23v39Ev");}
void  S7161C2 ::v40(){vfunc_called(this, "_ZN7S7161C23v40Ev");}
void  S7161C2 ::v41(){vfunc_called(this, "_ZN7S7161C23v41Ev");}
void  S7161C2 ::v42(){vfunc_called(this, "_ZN7S7161C23v42Ev");}
void  S7161C2 ::v43(){vfunc_called(this, "_ZN7S7161C23v43Ev");}
void  S7161C2 ::v44(){vfunc_called(this, "_ZN7S7161C23v44Ev");}
void  S7161C2 ::v45(){vfunc_called(this, "_ZN7S7161C23v45Ev");}
void  S7161C2 ::v46(){vfunc_called(this, "_ZN7S7161C23v46Ev");}
void  S7161C2 ::v47(){vfunc_called(this, "_ZN7S7161C23v47Ev");}
void  S7161C2 ::v48(){vfunc_called(this, "_ZN7S7161C23v48Ev");}
void  S7161C2 ::v49(){vfunc_called(this, "_ZN7S7161C23v49Ev");}
void  S7161C2 ::v50(){vfunc_called(this, "_ZN7S7161C23v50Ev");}
void  S7161C2 ::v51(){vfunc_called(this, "_ZN7S7161C23v51Ev");}
void  S7161C2 ::v52(){vfunc_called(this, "_ZN7S7161C23v52Ev");}
void  S7161C2 ::v53(){vfunc_called(this, "_ZN7S7161C23v53Ev");}
void  S7161C2 ::v54(){vfunc_called(this, "_ZN7S7161C23v54Ev");}
void  S7161C2 ::v55(){vfunc_called(this, "_ZN7S7161C23v55Ev");}
void  S7161C2 ::v56(){vfunc_called(this, "_ZN7S7161C23v56Ev");}
void  S7161C2 ::v57(){vfunc_called(this, "_ZN7S7161C23v57Ev");}
void  S7161C2 ::v58(){vfunc_called(this, "_ZN7S7161C23v58Ev");}
void  S7161C2 ::v59(){vfunc_called(this, "_ZN7S7161C23v59Ev");}
void  S7161C2 ::v60(){vfunc_called(this, "_ZN7S7161C23v60Ev");}
void  S7161C2 ::v61(){vfunc_called(this, "_ZN7S7161C23v61Ev");}
void  S7161C2 ::v62(){vfunc_called(this, "_ZN7S7161C23v62Ev");}
void  S7161C2 ::v63(){vfunc_called(this, "_ZN7S7161C23v63Ev");}
void  S7161C2 ::v64(){vfunc_called(this, "_ZN7S7161C23v64Ev");}
void  S7161C2 ::v65(){vfunc_called(this, "_ZN7S7161C23v65Ev");}
void  S7161C2 ::v66(){vfunc_called(this, "_ZN7S7161C23v66Ev");}
void  S7161C2 ::v67(){vfunc_called(this, "_ZN7S7161C23v67Ev");}
void  S7161C2 ::v68(){vfunc_called(this, "_ZN7S7161C23v68Ev");}
void  S7161C2 ::v69(){vfunc_called(this, "_ZN7S7161C23v69Ev");}
void  S7161C2 ::v70(){vfunc_called(this, "_ZN7S7161C23v70Ev");}
void  S7161C2 ::v71(){vfunc_called(this, "_ZN7S7161C23v71Ev");}
S7161C2 ::S7161C2(){ note_ctor("S7161C2", this);} // tgen

static void Test_S7161C2()
{
  extern Class_Descriptor cd_S7161C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7161C2, buf);
    S7161C2 *dp, &lv = *(dp=new (buf) S7161C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7161C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7161C2)");
    check_field_offset(lv, s7161c2f0, ABISELECT(8,4), "S7161C2.s7161c2f0");
    check_field_offset(lv, s7161c2f1, ABISELECT(16,8), "S7161C2.s7161c2f1");
    check_field_offset(lv, s7161c2f2, ABISELECT(24,16), "S7161C2.s7161c2f2");
    check_field_offset(lv, s7161c2f3, ABISELECT(56,32), "S7161C2.s7161c2f3");
    check_field_offset(lv, s7161c2f4, ABISELECT(64,40), "S7161C2.s7161c2f4");
    check_field_offset(lv, s7161c2f5, ABISELECT(72,44), "S7161C2.s7161c2f5");
    check_field_offset(lv, s7161c2f6, ABISELECT(80,52), "S7161C2.s7161c2f6");
    test_class_info(&lv, &cd_S7161C2);
    dp->~S7161C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7161C2(Test_S7161C2, "S7161C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S7161C2C1Ev();
extern void _ZN7S7161C2D1Ev();
Name_Map name_map_S7161C2[] = {
  NSPAIR(_ZN7S7161C2C1Ev),
  NSPAIR(_ZN7S7161C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7161C2[];
extern void _ZN7S7161C2D1Ev();
extern void _ZN7S7161C2D0Ev();
extern void _ZN7S7161C22v8Ev();
extern void _ZN7S7161C22v9Ev();
extern void _ZN7S7161C23v10Ev();
extern void _ZN7S7161C23v11Ev();
extern void _ZN7S7161C23v12Ev();
extern void _ZN7S7161C23v13Ev();
extern void _ZN7S7161C23v14Ev();
extern void _ZN7S7161C23v15Ev();
extern void _ZN7S7161C23v16Ev();
extern void _ZN7S7161C23v17Ev();
extern void _ZN7S7161C23v18Ev();
extern void _ZN7S7161C23v19Ev();
extern void _ZN7S7161C23v20Ev();
extern void _ZN7S7161C23v21Ev();
extern void _ZN7S7161C23v22Ev();
extern void _ZN7S7161C23v23Ev();
extern void _ZN7S7161C23v24Ev();
extern void _ZN7S7161C23v25Ev();
extern void _ZN7S7161C23v26Ev();
extern void _ZN7S7161C23v27Ev();
extern void _ZN7S7161C23v28Ev();
extern void _ZN7S7161C23v29Ev();
extern void _ZN7S7161C23v30Ev();
extern void _ZN7S7161C23v31Ev();
extern void _ZN7S7161C23v32Ev();
extern void _ZN7S7161C23v33Ev();
extern void _ZN7S7161C23v34Ev();
extern void _ZN7S7161C23v35Ev();
extern void _ZN7S7161C23v36Ev();
extern void _ZN7S7161C23v37Ev();
extern void _ZN7S7161C23v38Ev();
extern void _ZN7S7161C23v39Ev();
extern void _ZN7S7161C23v40Ev();
extern void _ZN7S7161C23v41Ev();
extern void _ZN7S7161C23v42Ev();
extern void _ZN7S7161C23v43Ev();
extern void _ZN7S7161C23v44Ev();
extern void _ZN7S7161C23v45Ev();
extern void _ZN7S7161C23v46Ev();
extern void _ZN7S7161C23v47Ev();
extern void _ZN7S7161C23v48Ev();
extern void _ZN7S7161C23v49Ev();
extern void _ZN7S7161C23v50Ev();
extern void _ZN7S7161C23v51Ev();
extern void _ZN7S7161C23v52Ev();
extern void _ZN7S7161C23v53Ev();
extern void _ZN7S7161C23v54Ev();
extern void _ZN7S7161C23v55Ev();
extern void _ZN7S7161C23v56Ev();
extern void _ZN7S7161C23v57Ev();
extern void _ZN7S7161C23v58Ev();
extern void _ZN7S7161C23v59Ev();
extern void _ZN7S7161C23v60Ev();
extern void _ZN7S7161C23v61Ev();
extern void _ZN7S7161C23v62Ev();
extern void _ZN7S7161C23v63Ev();
extern void _ZN7S7161C23v64Ev();
extern void _ZN7S7161C23v65Ev();
extern void _ZN7S7161C23v66Ev();
extern void _ZN7S7161C23v67Ev();
extern void _ZN7S7161C23v68Ev();
extern void _ZN7S7161C23v69Ev();
extern void _ZN7S7161C23v70Ev();
extern void _ZN7S7161C23v71Ev();
static  VTBL_ENTRY vtc_S7161C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7161C2[0]),
  (VTBL_ENTRY)&_ZN7S7161C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7161C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7161C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7161C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v70Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v71Ev,
};
extern VTBL_ENTRY _ZTI7S7161C2[];
extern  VTBL_ENTRY _ZTV7S7161C2[];
Class_Descriptor cd_S7161C2 = {  "S7161C2", // class name
  0,0,//no base classes
  &(vtc_S7161C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S7161C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7161C2),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C6_nt  {
  void *s7161c6f0[3];
  void  mf7161c6(); // _ZN10S7161C6_nt8mf7161c6Ev
};
//SIG(-1 S7161C6_nt) C1{ m Fp[3]}


void  S7161C6_nt ::mf7161c6(){}

//skip512 S7161C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C5_nt  {
  ::S7161C6_nt s7161c5f0;
  unsigned int s7161c5f1:1;
  virtual  ~S7161C5_nt(); // _ZN10S7161C5_ntD1Ev
  virtual void  v72(); // _ZN10S7161C5_nt3v72Ev
  virtual void  v73(); // _ZN10S7161C5_nt3v73Ev
  virtual void  v74(); // _ZN10S7161C5_nt3v74Ev
  virtual void  v75(); // _ZN10S7161C5_nt3v75Ev
  virtual void  v76(); // _ZN10S7161C5_nt3v76Ev
  virtual void  v77(); // _ZN10S7161C5_nt3v77Ev
  virtual void  v78(); // _ZN10S7161C5_nt3v78Ev
  S7161C5_nt(); // tgen
};
//SIG(-1 S7161C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S7161C5_nt ::~S7161C5_nt(){ note_dtor("S7161C5_nt", this);}
void  S7161C5_nt ::v72(){vfunc_called(this, "_ZN10S7161C5_nt3v72Ev");}
void  S7161C5_nt ::v73(){vfunc_called(this, "_ZN10S7161C5_nt3v73Ev");}
void  S7161C5_nt ::v74(){vfunc_called(this, "_ZN10S7161C5_nt3v74Ev");}
void  S7161C5_nt ::v75(){vfunc_called(this, "_ZN10S7161C5_nt3v75Ev");}
void  S7161C5_nt ::v76(){vfunc_called(this, "_ZN10S7161C5_nt3v76Ev");}
void  S7161C5_nt ::v77(){vfunc_called(this, "_ZN10S7161C5_nt3v77Ev");}
void  S7161C5_nt ::v78(){vfunc_called(this, "_ZN10S7161C5_nt3v78Ev");}
S7161C5_nt ::S7161C5_nt(){ note_ctor("S7161C5_nt", this);} // tgen

//skip512 S7161C5_nt

#else // __cplusplus

extern void _ZN10S7161C5_ntC1Ev();
extern void _ZN10S7161C5_ntD1Ev();
Name_Map name_map_S7161C5_nt[] = {
  NSPAIR(_ZN10S7161C5_ntC1Ev),
  NSPAIR(_ZN10S7161C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7161C5_nt[];
extern void _ZN10S7161C5_ntD1Ev();
extern void _ZN10S7161C5_ntD0Ev();
extern void _ZN10S7161C5_nt3v72Ev();
extern void _ZN10S7161C5_nt3v73Ev();
extern void _ZN10S7161C5_nt3v74Ev();
extern void _ZN10S7161C5_nt3v75Ev();
extern void _ZN10S7161C5_nt3v76Ev();
extern void _ZN10S7161C5_nt3v77Ev();
extern void _ZN10S7161C5_nt3v78Ev();
static  VTBL_ENTRY vtc_S7161C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7161C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7161C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v78Ev,
};
extern VTBL_ENTRY _ZTI10S7161C5_nt[];
VTBL_ENTRY *P__ZTI10S7161C5_nt = _ZTI10S7161C5_nt; 
extern  VTBL_ENTRY _ZTV10S7161C5_nt[];
Class_Descriptor cd_S7161C5_nt = {  "S7161C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7161C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI10S7161C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7161C5_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C4_nt  : S7161C5_nt {
  ::S5217C60_nt s7161c4f0;
  virtual  ~S7161C4_nt(); // _ZN10S7161C4_ntD1Ev
  virtual void  v79(); // _ZN10S7161C4_nt3v79Ev
  virtual void  v80(); // _ZN10S7161C4_nt3v80Ev
  S7161C4_nt(); // tgen
};
//SIG(-1 S7161C4_nt) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 FC3{ m Fp[3]} Fi:1} vd v1 v2 FC4{ m Fp}}


 S7161C4_nt ::~S7161C4_nt(){ note_dtor("S7161C4_nt", this);}
void  S7161C4_nt ::v79(){vfunc_called(this, "_ZN10S7161C4_nt3v79Ev");}
void  S7161C4_nt ::v80(){vfunc_called(this, "_ZN10S7161C4_nt3v80Ev");}
S7161C4_nt ::S7161C4_nt(){ note_ctor("S7161C4_nt", this);} // tgen

//skip512 S7161C4_nt

#else // __cplusplus

extern void _ZN10S7161C4_ntC1Ev();
extern void _ZN10S7161C4_ntD1Ev();
Name_Map name_map_S7161C4_nt[] = {
  NSPAIR(_ZN10S7161C4_ntC1Ev),
  NSPAIR(_ZN10S7161C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7161C5_nt;
extern VTBL_ENTRY _ZTI10S7161C5_nt[];
extern  VTBL_ENTRY _ZTV10S7161C5_nt[];
static Base_Class bases_S7161C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7161C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S7161C4_nt[];
extern void _ZN10S7161C4_ntD1Ev();
extern void _ZN10S7161C4_ntD0Ev();
extern void _ZN10S7161C5_nt3v72Ev();
extern void _ZN10S7161C5_nt3v73Ev();
extern void _ZN10S7161C5_nt3v74Ev();
extern void _ZN10S7161C5_nt3v75Ev();
extern void _ZN10S7161C5_nt3v76Ev();
extern void _ZN10S7161C5_nt3v77Ev();
extern void _ZN10S7161C5_nt3v78Ev();
extern void _ZN10S7161C4_nt3v79Ev();
extern void _ZN10S7161C4_nt3v80Ev();
static  VTBL_ENTRY vtc_S7161C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7161C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7161C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7161C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S7161C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S7161C4_nt3v80Ev,
};
extern VTBL_ENTRY _ZTI10S7161C4_nt[];
VTBL_ENTRY *P__ZTI10S7161C4_nt = _ZTI10S7161C4_nt; 
extern  VTBL_ENTRY _ZTV10S7161C4_nt[];
Class_Descriptor cd_S7161C4_nt = {  "S7161C4_nt", // class name
  bases_S7161C4_nt, 1,
  &(vtc_S7161C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI10S7161C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S7161C4_nt),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C9  : S1409C8_nt {
};
//SIG(-1 S7161C9) C1{ BC2{ m Fp Fi[2]}}



static void Test_S7161C9()
{
  extern Class_Descriptor cd_S7161C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7161C9, buf);
    S7161C9 &lv = *(new (buf) S7161C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7161C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7161C9)");
    check_base_class_offset(lv, (S1409C8_nt*), 0, "S7161C9");
    test_class_info(&lv, &cd_S7161C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7161C9(Test_S7161C9, "S7161C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
static Base_Class bases_S7161C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7161C9[];
Class_Descriptor cd_S7161C9 = {  "S7161C9", // class name
  bases_S7161C9, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7161C9),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C11_nt  {
  virtual void  v86(); // _ZN11S7161C11_nt3v86Ev
  virtual void  v87(); // _ZN11S7161C11_nt3v87Ev
  virtual void  v88(); // _ZN11S7161C11_nt3v88Ev
  virtual void  v89(); // _ZN11S7161C11_nt3v89Ev
  virtual void  v90(); // _ZN11S7161C11_nt3v90Ev
  ~S7161C11_nt(); // tgen
  S7161C11_nt(); // tgen
};
//SIG(-1 S7161C11_nt) C1{ v1 v2 v3 v4 v5}


void  S7161C11_nt ::v86(){vfunc_called(this, "_ZN11S7161C11_nt3v86Ev");}
void  S7161C11_nt ::v87(){vfunc_called(this, "_ZN11S7161C11_nt3v87Ev");}
void  S7161C11_nt ::v88(){vfunc_called(this, "_ZN11S7161C11_nt3v88Ev");}
void  S7161C11_nt ::v89(){vfunc_called(this, "_ZN11S7161C11_nt3v89Ev");}
void  S7161C11_nt ::v90(){vfunc_called(this, "_ZN11S7161C11_nt3v90Ev");}
S7161C11_nt ::~S7161C11_nt(){ note_dtor("S7161C11_nt", this);} // tgen
S7161C11_nt ::S7161C11_nt(){ note_ctor("S7161C11_nt", this);} // tgen

//skip512 S7161C11_nt

#else // __cplusplus

extern void _ZN11S7161C11_ntC1Ev();
extern void _ZN11S7161C11_ntD1Ev();
Name_Map name_map_S7161C11_nt[] = {
  NSPAIR(_ZN11S7161C11_ntC1Ev),
  NSPAIR(_ZN11S7161C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7161C11_nt[];
extern void _ZN11S7161C11_nt3v86Ev();
extern void _ZN11S7161C11_nt3v87Ev();
extern void _ZN11S7161C11_nt3v88Ev();
extern void _ZN11S7161C11_nt3v89Ev();
extern void _ZN11S7161C11_nt3v90Ev();
static  VTBL_ENTRY vtc_S7161C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7161C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v89Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v90Ev,
};
extern VTBL_ENTRY _ZTI11S7161C11_nt[];
VTBL_ENTRY *P__ZTI11S7161C11_nt = _ZTI11S7161C11_nt; 
extern  VTBL_ENTRY _ZTV11S7161C11_nt[];
Class_Descriptor cd_S7161C11_nt = {  "S7161C11_nt", // class name
  0,0,//no base classes
  &(vtc_S7161C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S7161C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S7161C11_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C8_nt  : S7161C9 , S7161C11_nt {
  int s7161c8f0;
  virtual void  v81(); // _ZN10S7161C8_nt3v81Ev
  virtual void  v82(); // _ZN10S7161C8_nt3v82Ev
  virtual void  v83(); // _ZN10S7161C8_nt3v83Ev
  virtual void  v84(); // _ZN10S7161C8_nt3v84Ev
  virtual void  v85(); // _ZN10S7161C8_nt3v85Ev
  ~S7161C8_nt(); // tgen
  S7161C8_nt(); // tgen
};
//SIG(-1 S7161C8_nt) C1{ BC2{ BC3{ m Fp Fi[2]}} BC4{ v6 v7 v8 v9 v10} v1 v2 v3 v4 v5 Fi}


void  S7161C8_nt ::v81(){vfunc_called(this, "_ZN10S7161C8_nt3v81Ev");}
void  S7161C8_nt ::v82(){vfunc_called(this, "_ZN10S7161C8_nt3v82Ev");}
void  S7161C8_nt ::v83(){vfunc_called(this, "_ZN10S7161C8_nt3v83Ev");}
void  S7161C8_nt ::v84(){vfunc_called(this, "_ZN10S7161C8_nt3v84Ev");}
void  S7161C8_nt ::v85(){vfunc_called(this, "_ZN10S7161C8_nt3v85Ev");}
S7161C8_nt ::~S7161C8_nt(){ note_dtor("S7161C8_nt", this);} // tgen
S7161C8_nt ::S7161C8_nt(){ note_ctor("S7161C8_nt", this);} // tgen

//skip512 S7161C8_nt

#else // __cplusplus

extern void _ZN10S7161C8_ntC1Ev();
extern void _ZN10S7161C8_ntD1Ev();
Name_Map name_map_S7161C8_nt[] = {
  NSPAIR(_ZN10S7161C8_ntC1Ev),
  NSPAIR(_ZN10S7161C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1409C8_nt;
extern VTBL_ENTRY _ZTI10S1409C8_nt[];
extern Class_Descriptor cd_S7161C9;
extern VTBL_ENTRY _ZTI7S7161C9[];
extern Class_Descriptor cd_S7161C11_nt;
extern VTBL_ENTRY _ZTI11S7161C11_nt[];
extern  VTBL_ENTRY _ZTV11S7161C11_nt[];
static Base_Class bases_S7161C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7161C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7161C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S7161C8_nt[];
extern void _ZN11S7161C11_nt3v86Ev();
extern void _ZN11S7161C11_nt3v87Ev();
extern void _ZN11S7161C11_nt3v88Ev();
extern void _ZN11S7161C11_nt3v89Ev();
extern void _ZN11S7161C11_nt3v90Ev();
extern void _ZN10S7161C8_nt3v81Ev();
extern void _ZN10S7161C8_nt3v82Ev();
extern void _ZN10S7161C8_nt3v83Ev();
extern void _ZN10S7161C8_nt3v84Ev();
extern void _ZN10S7161C8_nt3v85Ev();
static  VTBL_ENTRY vtc_S7161C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7161C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v86Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v87Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v88Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v89Ev,
  (VTBL_ENTRY)&_ZN11S7161C11_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S7161C8_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S7161C8_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S7161C8_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S7161C8_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S7161C8_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI10S7161C8_nt[];
VTBL_ENTRY *P__ZTI10S7161C8_nt = _ZTI10S7161C8_nt; 
extern  VTBL_ENTRY _ZTV10S7161C8_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C12_nt  {
  int s7161c12f0[4];
  void  mf7161c12(); // _ZN11S7161C12_nt9mf7161c12Ev
};
//SIG(-1 S7161C12_nt) C1{ m Fi[4]}


void  S7161C12_nt ::mf7161c12(){}

//skip512 S7161C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7161C1  : S7161C2 , S7161C4_nt {
  ::S7161C8_nt s7161c1f0;
  ::S7161C12_nt s7161c1f1;
  ::S1409C9_nt s7161c1f2;
  virtual  ~S7161C1(); // _ZN7S7161C1D1Ev
  virtual void  v1(); // _ZN7S7161C12v1Ev
  virtual void  v2(); // _ZN7S7161C12v2Ev
  virtual void  v3(); // _ZN7S7161C12v3Ev
  virtual void  v4(); // _ZN7S7161C12v4Ev
  virtual void  v5(); // _ZN7S7161C12v5Ev
  virtual void  v6(); // _ZN7S7161C12v6Ev
  virtual void  v7(); // _ZN7S7161C12v7Ev
  S7161C1(); // tgen
};
//SIG(1 S7161C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} BC4{ BC5{ vd v72 v73 v74 v75 v76 v77 v78 FC6{ m Fp[3]} Fi:1} vd v79 v80 FC7{ m Fp}} vd v1 v2 v3 v4 v5 v6 v7 FC8{ BC9{ BC10{ m Fp Fi[2]}} BC11{ v86 v87 v88 v89 v90} v81 v82 v83 v84 v85 Fi} FC12{ m Fi[4]} FC13{ m Fi}}


 S7161C1 ::~S7161C1(){ note_dtor("S7161C1", this);}
void  S7161C1 ::v1(){vfunc_called(this, "_ZN7S7161C12v1Ev");}
void  S7161C1 ::v2(){vfunc_called(this, "_ZN7S7161C12v2Ev");}
void  S7161C1 ::v3(){vfunc_called(this, "_ZN7S7161C12v3Ev");}
void  S7161C1 ::v4(){vfunc_called(this, "_ZN7S7161C12v4Ev");}
void  S7161C1 ::v5(){vfunc_called(this, "_ZN7S7161C12v5Ev");}
void  S7161C1 ::v6(){vfunc_called(this, "_ZN7S7161C12v6Ev");}
void  S7161C1 ::v7(){vfunc_called(this, "_ZN7S7161C12v7Ev");}
S7161C1 ::S7161C1(){ note_ctor("S7161C1", this);} // tgen

static void Test_S7161C1()
{
  extern Class_Descriptor cd_S7161C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,32)];
    init_test(&cd_S7161C1, buf);
    S7161C1 *dp, &lv = *(dp=new (buf) S7161C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,124), "sizeof(S7161C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7161C1)");
    check_base_class_offset(lv, (S7161C2*), 0, "S7161C1");
    check_base_class_offset(lv, (S7161C5_nt*)(S7161C4_nt*), ABISELECT(96,60), "S7161C1");
    check_base_class_offset(lv, (S7161C4_nt*), ABISELECT(96,60), "S7161C1");
    check_field_offset(lv, s7161c1f0, ABISELECT(144,84), "S7161C1.s7161c1f0");
    check_field_offset(lv, s7161c1f1, ABISELECT(176,104), "S7161C1.s7161c1f1");
    check_field_offset(lv, s7161c1f2, ABISELECT(192,120), "S7161C1.s7161c1f2");
    test_class_info(&lv, &cd_S7161C1);
    dp->~S7161C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7161C1(Test_S7161C1, "S7161C1", ABISELECT(200,124));

#else // __cplusplus

extern void _ZN7S7161C1C1Ev();
extern void _ZN7S7161C1D1Ev();
Name_Map name_map_S7161C1[] = {
  NSPAIR(_ZN7S7161C1C1Ev),
  NSPAIR(_ZN7S7161C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7161C2;
extern VTBL_ENTRY _ZTI7S7161C2[];
extern  VTBL_ENTRY _ZTV7S7161C2[];
extern Class_Descriptor cd_S7161C5_nt;
extern VTBL_ENTRY _ZTI10S7161C5_nt[];
extern  VTBL_ENTRY _ZTV10S7161C5_nt[];
extern Class_Descriptor cd_S7161C4_nt;
extern VTBL_ENTRY _ZTI10S7161C4_nt[];
extern  VTBL_ENTRY _ZTV10S7161C4_nt[];
static Base_Class bases_S7161C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7161C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7161C5_nt,    ABISELECT(96,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7161C4_nt,    ABISELECT(96,60), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7161C1[];
extern void _ZN7S7161C1D1Ev();
extern void _ZN7S7161C1D0Ev();
extern void _ZN7S7161C22v8Ev();
extern void _ZN7S7161C22v9Ev();
extern void _ZN7S7161C23v10Ev();
extern void _ZN7S7161C23v11Ev();
extern void _ZN7S7161C23v12Ev();
extern void _ZN7S7161C23v13Ev();
extern void _ZN7S7161C23v14Ev();
extern void _ZN7S7161C23v15Ev();
extern void _ZN7S7161C23v16Ev();
extern void _ZN7S7161C23v17Ev();
extern void _ZN7S7161C23v18Ev();
extern void _ZN7S7161C23v19Ev();
extern void _ZN7S7161C23v20Ev();
extern void _ZN7S7161C23v21Ev();
extern void _ZN7S7161C23v22Ev();
extern void _ZN7S7161C23v23Ev();
extern void _ZN7S7161C23v24Ev();
extern void _ZN7S7161C23v25Ev();
extern void _ZN7S7161C23v26Ev();
extern void _ZN7S7161C23v27Ev();
extern void _ZN7S7161C23v28Ev();
extern void _ZN7S7161C23v29Ev();
extern void _ZN7S7161C23v30Ev();
extern void _ZN7S7161C23v31Ev();
extern void _ZN7S7161C23v32Ev();
extern void _ZN7S7161C23v33Ev();
extern void _ZN7S7161C23v34Ev();
extern void _ZN7S7161C23v35Ev();
extern void _ZN7S7161C23v36Ev();
extern void _ZN7S7161C23v37Ev();
extern void _ZN7S7161C23v38Ev();
extern void _ZN7S7161C23v39Ev();
extern void _ZN7S7161C23v40Ev();
extern void _ZN7S7161C23v41Ev();
extern void _ZN7S7161C23v42Ev();
extern void _ZN7S7161C23v43Ev();
extern void _ZN7S7161C23v44Ev();
extern void _ZN7S7161C23v45Ev();
extern void _ZN7S7161C23v46Ev();
extern void _ZN7S7161C23v47Ev();
extern void _ZN7S7161C23v48Ev();
extern void _ZN7S7161C23v49Ev();
extern void _ZN7S7161C23v50Ev();
extern void _ZN7S7161C23v51Ev();
extern void _ZN7S7161C23v52Ev();
extern void _ZN7S7161C23v53Ev();
extern void _ZN7S7161C23v54Ev();
extern void _ZN7S7161C23v55Ev();
extern void _ZN7S7161C23v56Ev();
extern void _ZN7S7161C23v57Ev();
extern void _ZN7S7161C23v58Ev();
extern void _ZN7S7161C23v59Ev();
extern void _ZN7S7161C23v60Ev();
extern void _ZN7S7161C23v61Ev();
extern void _ZN7S7161C23v62Ev();
extern void _ZN7S7161C23v63Ev();
extern void _ZN7S7161C23v64Ev();
extern void _ZN7S7161C23v65Ev();
extern void _ZN7S7161C23v66Ev();
extern void _ZN7S7161C23v67Ev();
extern void _ZN7S7161C23v68Ev();
extern void _ZN7S7161C23v69Ev();
extern void _ZN7S7161C23v70Ev();
extern void _ZN7S7161C23v71Ev();
extern void _ZN7S7161C12v1Ev();
extern void _ZN7S7161C12v2Ev();
extern void _ZN7S7161C12v3Ev();
extern void _ZN7S7161C12v4Ev();
extern void _ZN7S7161C12v5Ev();
extern void _ZN7S7161C12v6Ev();
extern void _ZN7S7161C12v7Ev();
extern void ABISELECT(_ZThn96_N7S7161C1D1Ev,_ZThn60_N7S7161C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7161C1D0Ev,_ZThn60_N7S7161C1D0Ev)();
extern void _ZN10S7161C5_nt3v72Ev();
extern void _ZN10S7161C5_nt3v73Ev();
extern void _ZN10S7161C5_nt3v74Ev();
extern void _ZN10S7161C5_nt3v75Ev();
extern void _ZN10S7161C5_nt3v76Ev();
extern void _ZN10S7161C5_nt3v77Ev();
extern void _ZN10S7161C5_nt3v78Ev();
extern void _ZN10S7161C4_nt3v79Ev();
extern void _ZN10S7161C4_nt3v80Ev();
static  VTBL_ENTRY vtc_S7161C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7161C1[0]),
  (VTBL_ENTRY)&_ZN7S7161C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7161C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7161C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7161C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v70Ev,
  (VTBL_ENTRY)&_ZN7S7161C23v71Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7161C12v7Ev,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S7161C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S7161C1D1Ev,_ZThn60_N7S7161C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S7161C1D0Ev,_ZThn60_N7S7161C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S7161C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S7161C4_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S7161C4_nt3v80Ev,
};
extern VTBL_ENTRY _ZTI7S7161C1[];
extern  VTBL_ENTRY _ZTV7S7161C1[];
Class_Descriptor cd_S7161C1 = {  "S7161C1", // class name
  bases_S7161C1, 3,
  &(vtc_S7161C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,124), // object size
  NSPAIRA(_ZTI7S7161C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7161C1),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3297C3  {
  int s3297c3f0;
  __tsi64 s3297c3f1;
  void *s3297c3f2[4];
  int s3297c3f3[2];
  void *s3297c3f4;
  ::S1409C5_nt s3297c3f5;
  void *s3297c3f6[2];
  virtual  ~S3297C3(); // _ZN7S3297C3D1Ev
  virtual void  v5(); // _ZN7S3297C32v5Ev
  virtual void  v6(); // _ZN7S3297C32v6Ev
  virtual void  v7(); // _ZN7S3297C32v7Ev
  virtual void  v8(); // _ZN7S3297C32v8Ev
  virtual void  v9(); // _ZN7S3297C32v9Ev
  virtual void  v10(); // _ZN7S3297C33v10Ev
  virtual void  v11(); // _ZN7S3297C33v11Ev
  virtual void  v12(); // _ZN7S3297C33v12Ev
  virtual void  v13(); // _ZN7S3297C33v13Ev
  virtual void  v14(); // _ZN7S3297C33v14Ev
  virtual void  v15(); // _ZN7S3297C33v15Ev
  virtual void  v16(); // _ZN7S3297C33v16Ev
  virtual void  v17(); // _ZN7S3297C33v17Ev
  virtual void  v18(); // _ZN7S3297C33v18Ev
  virtual void  v19(); // _ZN7S3297C33v19Ev
  virtual void  v20(); // _ZN7S3297C33v20Ev
  virtual void  v21(); // _ZN7S3297C33v21Ev
  virtual void  v22(); // _ZN7S3297C33v22Ev
  virtual void  v23(); // _ZN7S3297C33v23Ev
  virtual void  v24(); // _ZN7S3297C33v24Ev
  virtual void  v25(); // _ZN7S3297C33v25Ev
  virtual void  v26(); // _ZN7S3297C33v26Ev
  virtual void  v27(); // _ZN7S3297C33v27Ev
  virtual void  v28(); // _ZN7S3297C33v28Ev
  virtual void  v29(); // _ZN7S3297C33v29Ev
  virtual void  v30(); // _ZN7S3297C33v30Ev
  virtual void  v31(); // _ZN7S3297C33v31Ev
  virtual void  v32(); // _ZN7S3297C33v32Ev
  virtual void  v33(); // _ZN7S3297C33v33Ev
  virtual void  v34(); // _ZN7S3297C33v34Ev
  virtual void  v35(); // _ZN7S3297C33v35Ev
  virtual void  v36(); // _ZN7S3297C33v36Ev
  virtual void  v37(); // _ZN7S3297C33v37Ev
  virtual void  v38(); // _ZN7S3297C33v38Ev
  virtual void  v39(); // _ZN7S3297C33v39Ev
  virtual void  v40(); // _ZN7S3297C33v40Ev
  virtual void  v41(); // _ZN7S3297C33v41Ev
  virtual void  v42(); // _ZN7S3297C33v42Ev
  virtual void  v43(); // _ZN7S3297C33v43Ev
  virtual void  v44(); // _ZN7S3297C33v44Ev
  virtual void  v45(); // _ZN7S3297C33v45Ev
  virtual void  v46(); // _ZN7S3297C33v46Ev
  virtual void  v47(); // _ZN7S3297C33v47Ev
  virtual void  v48(); // _ZN7S3297C33v48Ev
  virtual void  v49(); // _ZN7S3297C33v49Ev
  virtual void  v50(); // _ZN7S3297C33v50Ev
  virtual void  v51(); // _ZN7S3297C33v51Ev
  virtual void  v52(); // _ZN7S3297C33v52Ev
  virtual void  v53(); // _ZN7S3297C33v53Ev
  virtual void  v54(); // _ZN7S3297C33v54Ev
  virtual void  v55(); // _ZN7S3297C33v55Ev
  virtual void  v56(); // _ZN7S3297C33v56Ev
  virtual void  v57(); // _ZN7S3297C33v57Ev
  virtual void  v58(); // _ZN7S3297C33v58Ev
  virtual void  v59(); // _ZN7S3297C33v59Ev
  virtual void  v60(); // _ZN7S3297C33v60Ev
  virtual void  v61(); // _ZN7S3297C33v61Ev
  virtual void  v62(); // _ZN7S3297C33v62Ev
  virtual void  v63(); // _ZN7S3297C33v63Ev
  virtual void  v64(); // _ZN7S3297C33v64Ev
  virtual void  v65(); // _ZN7S3297C33v65Ev
  virtual void  v66(); // _ZN7S3297C33v66Ev
  virtual void  v67(); // _ZN7S3297C33v67Ev
  virtual void  v68(); // _ZN7S3297C33v68Ev
  S3297C3(); // tgen
};
//SIG(-1 S3297C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3297C3 ::~S3297C3(){ note_dtor("S3297C3", this);}
void  S3297C3 ::v5(){vfunc_called(this, "_ZN7S3297C32v5Ev");}
void  S3297C3 ::v6(){vfunc_called(this, "_ZN7S3297C32v6Ev");}
void  S3297C3 ::v7(){vfunc_called(this, "_ZN7S3297C32v7Ev");}
void  S3297C3 ::v8(){vfunc_called(this, "_ZN7S3297C32v8Ev");}
void  S3297C3 ::v9(){vfunc_called(this, "_ZN7S3297C32v9Ev");}
void  S3297C3 ::v10(){vfunc_called(this, "_ZN7S3297C33v10Ev");}
void  S3297C3 ::v11(){vfunc_called(this, "_ZN7S3297C33v11Ev");}
void  S3297C3 ::v12(){vfunc_called(this, "_ZN7S3297C33v12Ev");}
void  S3297C3 ::v13(){vfunc_called(this, "_ZN7S3297C33v13Ev");}
void  S3297C3 ::v14(){vfunc_called(this, "_ZN7S3297C33v14Ev");}
void  S3297C3 ::v15(){vfunc_called(this, "_ZN7S3297C33v15Ev");}
void  S3297C3 ::v16(){vfunc_called(this, "_ZN7S3297C33v16Ev");}
void  S3297C3 ::v17(){vfunc_called(this, "_ZN7S3297C33v17Ev");}
void  S3297C3 ::v18(){vfunc_called(this, "_ZN7S3297C33v18Ev");}
void  S3297C3 ::v19(){vfunc_called(this, "_ZN7S3297C33v19Ev");}
void  S3297C3 ::v20(){vfunc_called(this, "_ZN7S3297C33v20Ev");}
void  S3297C3 ::v21(){vfunc_called(this, "_ZN7S3297C33v21Ev");}
void  S3297C3 ::v22(){vfunc_called(this, "_ZN7S3297C33v22Ev");}
void  S3297C3 ::v23(){vfunc_called(this, "_ZN7S3297C33v23Ev");}
void  S3297C3 ::v24(){vfunc_called(this, "_ZN7S3297C33v24Ev");}
void  S3297C3 ::v25(){vfunc_called(this, "_ZN7S3297C33v25Ev");}
void  S3297C3 ::v26(){vfunc_called(this, "_ZN7S3297C33v26Ev");}
void  S3297C3 ::v27(){vfunc_called(this, "_ZN7S3297C33v27Ev");}
void  S3297C3 ::v28(){vfunc_called(this, "_ZN7S3297C33v28Ev");}
void  S3297C3 ::v29(){vfunc_called(this, "_ZN7S3297C33v29Ev");}
void  S3297C3 ::v30(){vfunc_called(this, "_ZN7S3297C33v30Ev");}
void  S3297C3 ::v31(){vfunc_called(this, "_ZN7S3297C33v31Ev");}
void  S3297C3 ::v32(){vfunc_called(this, "_ZN7S3297C33v32Ev");}
void  S3297C3 ::v33(){vfunc_called(this, "_ZN7S3297C33v33Ev");}
void  S3297C3 ::v34(){vfunc_called(this, "_ZN7S3297C33v34Ev");}
void  S3297C3 ::v35(){vfunc_called(this, "_ZN7S3297C33v35Ev");}
void  S3297C3 ::v36(){vfunc_called(this, "_ZN7S3297C33v36Ev");}
void  S3297C3 ::v37(){vfunc_called(this, "_ZN7S3297C33v37Ev");}
void  S3297C3 ::v38(){vfunc_called(this, "_ZN7S3297C33v38Ev");}
void  S3297C3 ::v39(){vfunc_called(this, "_ZN7S3297C33v39Ev");}
void  S3297C3 ::v40(){vfunc_called(this, "_ZN7S3297C33v40Ev");}
void  S3297C3 ::v41(){vfunc_called(this, "_ZN7S3297C33v41Ev");}
void  S3297C3 ::v42(){vfunc_called(this, "_ZN7S3297C33v42Ev");}
void  S3297C3 ::v43(){vfunc_called(this, "_ZN7S3297C33v43Ev");}
void  S3297C3 ::v44(){vfunc_called(this, "_ZN7S3297C33v44Ev");}
void  S3297C3 ::v45(){vfunc_called(this, "_ZN7S3297C33v45Ev");}
void  S3297C3 ::v46(){vfunc_called(this, "_ZN7S3297C33v46Ev");}
void  S3297C3 ::v47(){vfunc_called(this, "_ZN7S3297C33v47Ev");}
void  S3297C3 ::v48(){vfunc_called(this, "_ZN7S3297C33v48Ev");}
void  S3297C3 ::v49(){vfunc_called(this, "_ZN7S3297C33v49Ev");}
void  S3297C3 ::v50(){vfunc_called(this, "_ZN7S3297C33v50Ev");}
void  S3297C3 ::v51(){vfunc_called(this, "_ZN7S3297C33v51Ev");}
void  S3297C3 ::v52(){vfunc_called(this, "_ZN7S3297C33v52Ev");}
void  S3297C3 ::v53(){vfunc_called(this, "_ZN7S3297C33v53Ev");}
void  S3297C3 ::v54(){vfunc_called(this, "_ZN7S3297C33v54Ev");}
void  S3297C3 ::v55(){vfunc_called(this, "_ZN7S3297C33v55Ev");}
void  S3297C3 ::v56(){vfunc_called(this, "_ZN7S3297C33v56Ev");}
void  S3297C3 ::v57(){vfunc_called(this, "_ZN7S3297C33v57Ev");}
void  S3297C3 ::v58(){vfunc_called(this, "_ZN7S3297C33v58Ev");}
void  S3297C3 ::v59(){vfunc_called(this, "_ZN7S3297C33v59Ev");}
void  S3297C3 ::v60(){vfunc_called(this, "_ZN7S3297C33v60Ev");}
void  S3297C3 ::v61(){vfunc_called(this, "_ZN7S3297C33v61Ev");}
void  S3297C3 ::v62(){vfunc_called(this, "_ZN7S3297C33v62Ev");}
void  S3297C3 ::v63(){vfunc_called(this, "_ZN7S3297C33v63Ev");}
void  S3297C3 ::v64(){vfunc_called(this, "_ZN7S3297C33v64Ev");}
void  S3297C3 ::v65(){vfunc_called(this, "_ZN7S3297C33v65Ev");}
void  S3297C3 ::v66(){vfunc_called(this, "_ZN7S3297C33v66Ev");}
void  S3297C3 ::v67(){vfunc_called(this, "_ZN7S3297C33v67Ev");}
void  S3297C3 ::v68(){vfunc_called(this, "_ZN7S3297C33v68Ev");}
S3297C3 ::S3297C3(){ note_ctor("S3297C3", this);} // tgen

static void Test_S3297C3()
{
  extern Class_Descriptor cd_S3297C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3297C3, buf);
    S3297C3 *dp, &lv = *(dp=new (buf) S3297C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3297C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3297C3)");
    check_field_offset(lv, s3297c3f0, ABISELECT(8,4), "S3297C3.s3297c3f0");
    check_field_offset(lv, s3297c3f1, ABISELECT(16,8), "S3297C3.s3297c3f1");
    check_field_offset(lv, s3297c3f2, ABISELECT(24,16), "S3297C3.s3297c3f2");
    check_field_offset(lv, s3297c3f3, ABISELECT(56,32), "S3297C3.s3297c3f3");
    check_field_offset(lv, s3297c3f4, ABISELECT(64,40), "S3297C3.s3297c3f4");
    check_field_offset(lv, s3297c3f5, ABISELECT(72,44), "S3297C3.s3297c3f5");
    check_field_offset(lv, s3297c3f6, ABISELECT(80,52), "S3297C3.s3297c3f6");
    test_class_info(&lv, &cd_S3297C3);
    dp->~S3297C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3297C3(Test_S3297C3, "S3297C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3297C3C1Ev();
extern void _ZN7S3297C3D1Ev();
Name_Map name_map_S3297C3[] = {
  NSPAIR(_ZN7S3297C3C1Ev),
  NSPAIR(_ZN7S3297C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3297C3[];
extern void _ZN7S3297C3D1Ev();
extern void _ZN7S3297C3D0Ev();
extern void _ZN7S3297C32v5Ev();
extern void _ZN7S3297C32v6Ev();
extern void _ZN7S3297C32v7Ev();
extern void _ZN7S3297C32v8Ev();
extern void _ZN7S3297C32v9Ev();
extern void _ZN7S3297C33v10Ev();
extern void _ZN7S3297C33v11Ev();
extern void _ZN7S3297C33v12Ev();
extern void _ZN7S3297C33v13Ev();
extern void _ZN7S3297C33v14Ev();
extern void _ZN7S3297C33v15Ev();
extern void _ZN7S3297C33v16Ev();
extern void _ZN7S3297C33v17Ev();
extern void _ZN7S3297C33v18Ev();
extern void _ZN7S3297C33v19Ev();
extern void _ZN7S3297C33v20Ev();
extern void _ZN7S3297C33v21Ev();
extern void _ZN7S3297C33v22Ev();
extern void _ZN7S3297C33v23Ev();
extern void _ZN7S3297C33v24Ev();
extern void _ZN7S3297C33v25Ev();
extern void _ZN7S3297C33v26Ev();
extern void _ZN7S3297C33v27Ev();
extern void _ZN7S3297C33v28Ev();
extern void _ZN7S3297C33v29Ev();
extern void _ZN7S3297C33v30Ev();
extern void _ZN7S3297C33v31Ev();
extern void _ZN7S3297C33v32Ev();
extern void _ZN7S3297C33v33Ev();
extern void _ZN7S3297C33v34Ev();
extern void _ZN7S3297C33v35Ev();
extern void _ZN7S3297C33v36Ev();
extern void _ZN7S3297C33v37Ev();
extern void _ZN7S3297C33v38Ev();
extern void _ZN7S3297C33v39Ev();
extern void _ZN7S3297C33v40Ev();
extern void _ZN7S3297C33v41Ev();
extern void _ZN7S3297C33v42Ev();
extern void _ZN7S3297C33v43Ev();
extern void _ZN7S3297C33v44Ev();
extern void _ZN7S3297C33v45Ev();
extern void _ZN7S3297C33v46Ev();
extern void _ZN7S3297C33v47Ev();
extern void _ZN7S3297C33v48Ev();
extern void _ZN7S3297C33v49Ev();
extern void _ZN7S3297C33v50Ev();
extern void _ZN7S3297C33v51Ev();
extern void _ZN7S3297C33v52Ev();
extern void _ZN7S3297C33v53Ev();
extern void _ZN7S3297C33v54Ev();
extern void _ZN7S3297C33v55Ev();
extern void _ZN7S3297C33v56Ev();
extern void _ZN7S3297C33v57Ev();
extern void _ZN7S3297C33v58Ev();
extern void _ZN7S3297C33v59Ev();
extern void _ZN7S3297C33v60Ev();
extern void _ZN7S3297C33v61Ev();
extern void _ZN7S3297C33v62Ev();
extern void _ZN7S3297C33v63Ev();
extern void _ZN7S3297C33v64Ev();
extern void _ZN7S3297C33v65Ev();
extern void _ZN7S3297C33v66Ev();
extern void _ZN7S3297C33v67Ev();
extern void _ZN7S3297C33v68Ev();
static  VTBL_ENTRY vtc_S3297C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3297C3[0]),
  (VTBL_ENTRY)&_ZN7S3297C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3297C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v68Ev,
};
extern VTBL_ENTRY _ZTI7S3297C3[];
extern  VTBL_ENTRY _ZTV7S3297C3[];
Class_Descriptor cd_S3297C3 = {  "S3297C3", // class name
  0,0,//no base classes
  &(vtc_S3297C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3297C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3297C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3297C2  : S3297C3 {
  int s3297c2f0;
  ::S1409C30 s3297c2f1;
  virtual  ~S3297C2(); // _ZN7S3297C2D1Ev
  virtual void  v69(); // _ZN7S3297C23v69Ev
  virtual void  v70(); // _ZN7S3297C23v70Ev
  virtual void  v71(); // _ZN7S3297C23v71Ev
  virtual void  v72(); // _ZN7S3297C23v72Ev
  virtual void  v73(); // _ZN7S3297C23v73Ev
  virtual void  v74(); // _ZN7S3297C23v74Ev
  virtual void  v75(); // _ZN7S3297C23v75Ev
  virtual void  v76(); // _ZN7S3297C23v76Ev
  virtual void  v77(); // _ZN7S3297C23v77Ev
  virtual void  v78(); // _ZN7S3297C23v78Ev
  virtual void  v79(); // _ZN7S3297C23v79Ev
  virtual void  v80(); // _ZN7S3297C23v80Ev
  virtual void  v81(); // _ZN7S3297C23v81Ev
  virtual void  v82(); // _ZN7S3297C23v82Ev
  virtual void  v83(); // _ZN7S3297C23v83Ev
  virtual void  v84(); // _ZN7S3297C23v84Ev
  virtual void  v85(); // _ZN7S3297C23v85Ev
  virtual void  v86(); // _ZN7S3297C23v86Ev
  S3297C2(); // tgen
};
//SIG(-1 S3297C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3297C2 ::~S3297C2(){ note_dtor("S3297C2", this);}
void  S3297C2 ::v69(){vfunc_called(this, "_ZN7S3297C23v69Ev");}
void  S3297C2 ::v70(){vfunc_called(this, "_ZN7S3297C23v70Ev");}
void  S3297C2 ::v71(){vfunc_called(this, "_ZN7S3297C23v71Ev");}
void  S3297C2 ::v72(){vfunc_called(this, "_ZN7S3297C23v72Ev");}
void  S3297C2 ::v73(){vfunc_called(this, "_ZN7S3297C23v73Ev");}
void  S3297C2 ::v74(){vfunc_called(this, "_ZN7S3297C23v74Ev");}
void  S3297C2 ::v75(){vfunc_called(this, "_ZN7S3297C23v75Ev");}
void  S3297C2 ::v76(){vfunc_called(this, "_ZN7S3297C23v76Ev");}
void  S3297C2 ::v77(){vfunc_called(this, "_ZN7S3297C23v77Ev");}
void  S3297C2 ::v78(){vfunc_called(this, "_ZN7S3297C23v78Ev");}
void  S3297C2 ::v79(){vfunc_called(this, "_ZN7S3297C23v79Ev");}
void  S3297C2 ::v80(){vfunc_called(this, "_ZN7S3297C23v80Ev");}
void  S3297C2 ::v81(){vfunc_called(this, "_ZN7S3297C23v81Ev");}
void  S3297C2 ::v82(){vfunc_called(this, "_ZN7S3297C23v82Ev");}
void  S3297C2 ::v83(){vfunc_called(this, "_ZN7S3297C23v83Ev");}
void  S3297C2 ::v84(){vfunc_called(this, "_ZN7S3297C23v84Ev");}
void  S3297C2 ::v85(){vfunc_called(this, "_ZN7S3297C23v85Ev");}
void  S3297C2 ::v86(){vfunc_called(this, "_ZN7S3297C23v86Ev");}
S3297C2 ::S3297C2(){ note_ctor("S3297C2", this);} // tgen

static void Test_S3297C2()
{
  extern Class_Descriptor cd_S3297C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3297C2, buf);
    S3297C2 *dp, &lv = *(dp=new (buf) S3297C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3297C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3297C2)");
    check_base_class_offset(lv, (S3297C3*), 0, "S3297C2");
    check_field_offset(lv, s3297c2f0, ABISELECT(96,60), "S3297C2.s3297c2f0");
    check_field_offset(lv, s3297c2f1, ABISELECT(104,64), "S3297C2.s3297c2f1");
    test_class_info(&lv, &cd_S3297C2);
    dp->~S3297C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3297C2(Test_S3297C2, "S3297C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3297C2C1Ev();
extern void _ZN7S3297C2D1Ev();
Name_Map name_map_S3297C2[] = {
  NSPAIR(_ZN7S3297C2C1Ev),
  NSPAIR(_ZN7S3297C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3297C3;
extern VTBL_ENTRY _ZTI7S3297C3[];
extern  VTBL_ENTRY _ZTV7S3297C3[];
static Base_Class bases_S3297C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3297C2[];
extern void _ZN7S3297C2D1Ev();
extern void _ZN7S3297C2D0Ev();
extern void _ZN7S3297C32v5Ev();
extern void _ZN7S3297C32v6Ev();
extern void _ZN7S3297C32v7Ev();
extern void _ZN7S3297C32v8Ev();
extern void _ZN7S3297C32v9Ev();
extern void _ZN7S3297C33v10Ev();
extern void _ZN7S3297C33v11Ev();
extern void _ZN7S3297C33v12Ev();
extern void _ZN7S3297C33v13Ev();
extern void _ZN7S3297C33v14Ev();
extern void _ZN7S3297C33v15Ev();
extern void _ZN7S3297C33v16Ev();
extern void _ZN7S3297C33v17Ev();
extern void _ZN7S3297C33v18Ev();
extern void _ZN7S3297C33v19Ev();
extern void _ZN7S3297C33v20Ev();
extern void _ZN7S3297C33v21Ev();
extern void _ZN7S3297C33v22Ev();
extern void _ZN7S3297C33v23Ev();
extern void _ZN7S3297C33v24Ev();
extern void _ZN7S3297C33v25Ev();
extern void _ZN7S3297C33v26Ev();
extern void _ZN7S3297C33v27Ev();
extern void _ZN7S3297C33v28Ev();
extern void _ZN7S3297C33v29Ev();
extern void _ZN7S3297C33v30Ev();
extern void _ZN7S3297C33v31Ev();
extern void _ZN7S3297C33v32Ev();
extern void _ZN7S3297C33v33Ev();
extern void _ZN7S3297C33v34Ev();
extern void _ZN7S3297C33v35Ev();
extern void _ZN7S3297C33v36Ev();
extern void _ZN7S3297C33v37Ev();
extern void _ZN7S3297C33v38Ev();
extern void _ZN7S3297C33v39Ev();
extern void _ZN7S3297C33v40Ev();
extern void _ZN7S3297C33v41Ev();
extern void _ZN7S3297C33v42Ev();
extern void _ZN7S3297C33v43Ev();
extern void _ZN7S3297C33v44Ev();
extern void _ZN7S3297C33v45Ev();
extern void _ZN7S3297C33v46Ev();
extern void _ZN7S3297C33v47Ev();
extern void _ZN7S3297C33v48Ev();
extern void _ZN7S3297C33v49Ev();
extern void _ZN7S3297C33v50Ev();
extern void _ZN7S3297C33v51Ev();
extern void _ZN7S3297C33v52Ev();
extern void _ZN7S3297C33v53Ev();
extern void _ZN7S3297C33v54Ev();
extern void _ZN7S3297C33v55Ev();
extern void _ZN7S3297C33v56Ev();
extern void _ZN7S3297C33v57Ev();
extern void _ZN7S3297C33v58Ev();
extern void _ZN7S3297C33v59Ev();
extern void _ZN7S3297C33v60Ev();
extern void _ZN7S3297C33v61Ev();
extern void _ZN7S3297C33v62Ev();
extern void _ZN7S3297C33v63Ev();
extern void _ZN7S3297C33v64Ev();
extern void _ZN7S3297C33v65Ev();
extern void _ZN7S3297C33v66Ev();
extern void _ZN7S3297C33v67Ev();
extern void _ZN7S3297C33v68Ev();
extern void _ZN7S3297C23v69Ev();
extern void _ZN7S3297C23v70Ev();
extern void _ZN7S3297C23v71Ev();
extern void _ZN7S3297C23v72Ev();
extern void _ZN7S3297C23v73Ev();
extern void _ZN7S3297C23v74Ev();
extern void _ZN7S3297C23v75Ev();
extern void _ZN7S3297C23v76Ev();
extern void _ZN7S3297C23v77Ev();
extern void _ZN7S3297C23v78Ev();
extern void _ZN7S3297C23v79Ev();
extern void _ZN7S3297C23v80Ev();
extern void _ZN7S3297C23v81Ev();
extern void _ZN7S3297C23v82Ev();
extern void _ZN7S3297C23v83Ev();
extern void _ZN7S3297C23v84Ev();
extern void _ZN7S3297C23v85Ev();
extern void _ZN7S3297C23v86Ev();
static  VTBL_ENTRY vtc_S3297C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3297C2[0]),
  (VTBL_ENTRY)&_ZN7S3297C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3297C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v86Ev,
};
extern VTBL_ENTRY _ZTI7S3297C2[];
extern  VTBL_ENTRY _ZTV7S3297C2[];
Class_Descriptor cd_S3297C2 = {  "S3297C2", // class name
  bases_S3297C2, 1,
  &(vtc_S3297C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3297C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3297C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3297C1  : S3297C2 {
  char s3297c1f0;
  ::S1573C9_nt s3297c1f1;
  ::S1573C9_nt s3297c1f2;
  int s3297c1f3;
  ::S1573C9_nt s3297c1f4;
  ::S1573C9_nt s3297c1f5;
  unsigned int s3297c1f6:1;
  unsigned int s3297c1f7:1;
  unsigned int s3297c1f8:1;
  virtual  ~S3297C1(); // _ZN7S3297C1D1Ev
  virtual void  v1(); // _ZN7S3297C12v1Ev
  virtual void  v2(); // _ZN7S3297C12v2Ev
  virtual void  v3(); // _ZN7S3297C12v3Ev
  virtual void  v4(); // _ZN7S3297C12v4Ev
  S3297C1(); // tgen
};
//SIG(1 S3297C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 Fc FC8{ BC9{ m Fc[4] FC10{ BC11{ BC7}} Fi[2]} Fp} FC8 Fi FC8 FC8 Fi:1 Fi:1 Fi:1}


 S3297C1 ::~S3297C1(){ note_dtor("S3297C1", this);}
void  S3297C1 ::v1(){vfunc_called(this, "_ZN7S3297C12v1Ev");}
void  S3297C1 ::v2(){vfunc_called(this, "_ZN7S3297C12v2Ev");}
void  S3297C1 ::v3(){vfunc_called(this, "_ZN7S3297C12v3Ev");}
void  S3297C1 ::v4(){vfunc_called(this, "_ZN7S3297C12v4Ev");}
S3297C1 ::S3297C1(){ note_ctor("S3297C1", this);} // tgen

static void Test_S3297C1()
{
  extern Class_Descriptor cd_S3297C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,51)];
    init_test(&cd_S3297C1, buf);
    S3297C1 *dp, &lv = *(dp=new (buf) S3297C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S3297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3297C1)");
    check_base_class_offset(lv, (S3297C3*)(S3297C2*), 0, "S3297C1");
    check_base_class_offset(lv, (S3297C2*), 0, "S3297C1");
    check_field_offset(lv, s3297c1f0, ABISELECT(120,76), "S3297C1.s3297c1f0");
    check_field_offset(lv, s3297c1f1, ABISELECT(128,80), "S3297C1.s3297c1f1");
    check_field_offset(lv, s3297c1f2, ABISELECT(168,108), "S3297C1.s3297c1f2");
    check_field_offset(lv, s3297c1f3, ABISELECT(208,136), "S3297C1.s3297c1f3");
    check_field_offset(lv, s3297c1f4, ABISELECT(216,140), "S3297C1.s3297c1f4");
    check_field_offset(lv, s3297c1f5, ABISELECT(256,168), "S3297C1.s3297c1f5");
    set_bf_and_test(lv, s3297c1f6, ABISELECT(296,196), 0, 1, 1, "S3297C1");
    set_bf_and_test(lv, s3297c1f7, ABISELECT(296,196), 1, 1, 1, "S3297C1");
    set_bf_and_test(lv, s3297c1f8, ABISELECT(296,196), 2, 1, 1, "S3297C1");
    test_class_info(&lv, &cd_S3297C1);
    dp->~S3297C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3297C1(Test_S3297C1, "S3297C1", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN7S3297C1C1Ev();
extern void _ZN7S3297C1D1Ev();
Name_Map name_map_S3297C1[] = {
  NSPAIR(_ZN7S3297C1C1Ev),
  NSPAIR(_ZN7S3297C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3297C3;
extern VTBL_ENTRY _ZTI7S3297C3[];
extern  VTBL_ENTRY _ZTV7S3297C3[];
extern Class_Descriptor cd_S3297C2;
extern VTBL_ENTRY _ZTI7S3297C2[];
extern  VTBL_ENTRY _ZTV7S3297C2[];
static Base_Class bases_S3297C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3297C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3297C1[];
extern void _ZN7S3297C1D1Ev();
extern void _ZN7S3297C1D0Ev();
extern void _ZN7S3297C32v5Ev();
extern void _ZN7S3297C32v6Ev();
extern void _ZN7S3297C32v7Ev();
extern void _ZN7S3297C32v8Ev();
extern void _ZN7S3297C32v9Ev();
extern void _ZN7S3297C33v10Ev();
extern void _ZN7S3297C33v11Ev();
extern void _ZN7S3297C33v12Ev();
extern void _ZN7S3297C33v13Ev();
extern void _ZN7S3297C33v14Ev();
extern void _ZN7S3297C33v15Ev();
extern void _ZN7S3297C33v16Ev();
extern void _ZN7S3297C33v17Ev();
extern void _ZN7S3297C33v18Ev();
extern void _ZN7S3297C33v19Ev();
extern void _ZN7S3297C33v20Ev();
extern void _ZN7S3297C33v21Ev();
extern void _ZN7S3297C33v22Ev();
extern void _ZN7S3297C33v23Ev();
extern void _ZN7S3297C33v24Ev();
extern void _ZN7S3297C33v25Ev();
extern void _ZN7S3297C33v26Ev();
extern void _ZN7S3297C33v27Ev();
extern void _ZN7S3297C33v28Ev();
extern void _ZN7S3297C33v29Ev();
extern void _ZN7S3297C33v30Ev();
extern void _ZN7S3297C33v31Ev();
extern void _ZN7S3297C33v32Ev();
extern void _ZN7S3297C33v33Ev();
extern void _ZN7S3297C33v34Ev();
extern void _ZN7S3297C33v35Ev();
extern void _ZN7S3297C33v36Ev();
extern void _ZN7S3297C33v37Ev();
extern void _ZN7S3297C33v38Ev();
extern void _ZN7S3297C33v39Ev();
extern void _ZN7S3297C33v40Ev();
extern void _ZN7S3297C33v41Ev();
extern void _ZN7S3297C33v42Ev();
extern void _ZN7S3297C33v43Ev();
extern void _ZN7S3297C33v44Ev();
extern void _ZN7S3297C33v45Ev();
extern void _ZN7S3297C33v46Ev();
extern void _ZN7S3297C33v47Ev();
extern void _ZN7S3297C33v48Ev();
extern void _ZN7S3297C33v49Ev();
extern void _ZN7S3297C33v50Ev();
extern void _ZN7S3297C33v51Ev();
extern void _ZN7S3297C33v52Ev();
extern void _ZN7S3297C33v53Ev();
extern void _ZN7S3297C33v54Ev();
extern void _ZN7S3297C33v55Ev();
extern void _ZN7S3297C33v56Ev();
extern void _ZN7S3297C33v57Ev();
extern void _ZN7S3297C33v58Ev();
extern void _ZN7S3297C33v59Ev();
extern void _ZN7S3297C33v60Ev();
extern void _ZN7S3297C33v61Ev();
extern void _ZN7S3297C33v62Ev();
extern void _ZN7S3297C33v63Ev();
extern void _ZN7S3297C33v64Ev();
extern void _ZN7S3297C33v65Ev();
extern void _ZN7S3297C33v66Ev();
extern void _ZN7S3297C33v67Ev();
extern void _ZN7S3297C33v68Ev();
extern void _ZN7S3297C23v69Ev();
extern void _ZN7S3297C23v70Ev();
extern void _ZN7S3297C23v71Ev();
extern void _ZN7S3297C23v72Ev();
extern void _ZN7S3297C23v73Ev();
extern void _ZN7S3297C23v74Ev();
extern void _ZN7S3297C23v75Ev();
extern void _ZN7S3297C23v76Ev();
extern void _ZN7S3297C23v77Ev();
extern void _ZN7S3297C23v78Ev();
extern void _ZN7S3297C23v79Ev();
extern void _ZN7S3297C23v80Ev();
extern void _ZN7S3297C23v81Ev();
extern void _ZN7S3297C23v82Ev();
extern void _ZN7S3297C23v83Ev();
extern void _ZN7S3297C23v84Ev();
extern void _ZN7S3297C23v85Ev();
extern void _ZN7S3297C23v86Ev();
extern void _ZN7S3297C12v1Ev();
extern void _ZN7S3297C12v2Ev();
extern void _ZN7S3297C12v3Ev();
extern void _ZN7S3297C12v4Ev();
static  VTBL_ENTRY vtc_S3297C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3297C1[0]),
  (VTBL_ENTRY)&_ZN7S3297C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3297C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3297C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3297C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3297C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3297C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3297C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3297C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3297C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3297C1[];
extern  VTBL_ENTRY _ZTV7S3297C1[];
Class_Descriptor cd_S3297C1 = {  "S3297C1", // class name
  bases_S3297C1, 2,
  &(vtc_S3297C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI7S3297C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3297C1),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3450C3  {
  int s3450c3f0;
  __tsi64 s3450c3f1;
  void *s3450c3f2[4];
  int s3450c3f3[2];
  void *s3450c3f4;
  ::S1409C5_nt s3450c3f5;
  void *s3450c3f6[2];
  virtual  ~S3450C3(); // _ZN7S3450C3D1Ev
  virtual void  v9(); // _ZN7S3450C32v9Ev
  virtual void  v10(); // _ZN7S3450C33v10Ev
  virtual void  v11(); // _ZN7S3450C33v11Ev
  virtual void  v12(); // _ZN7S3450C33v12Ev
  virtual void  v13(); // _ZN7S3450C33v13Ev
  virtual void  v14(); // _ZN7S3450C33v14Ev
  virtual void  v15(); // _ZN7S3450C33v15Ev
  virtual void  v16(); // _ZN7S3450C33v16Ev
  virtual void  v17(); // _ZN7S3450C33v17Ev
  virtual void  v18(); // _ZN7S3450C33v18Ev
  virtual void  v19(); // _ZN7S3450C33v19Ev
  virtual void  v20(); // _ZN7S3450C33v20Ev
  virtual void  v21(); // _ZN7S3450C33v21Ev
  virtual void  v22(); // _ZN7S3450C33v22Ev
  virtual void  v23(); // _ZN7S3450C33v23Ev
  virtual void  v24(); // _ZN7S3450C33v24Ev
  virtual void  v25(); // _ZN7S3450C33v25Ev
  virtual void  v26(); // _ZN7S3450C33v26Ev
  virtual void  v27(); // _ZN7S3450C33v27Ev
  virtual void  v28(); // _ZN7S3450C33v28Ev
  virtual void  v29(); // _ZN7S3450C33v29Ev
  virtual void  v30(); // _ZN7S3450C33v30Ev
  virtual void  v31(); // _ZN7S3450C33v31Ev
  virtual void  v32(); // _ZN7S3450C33v32Ev
  virtual void  v33(); // _ZN7S3450C33v33Ev
  virtual void  v34(); // _ZN7S3450C33v34Ev
  virtual void  v35(); // _ZN7S3450C33v35Ev
  virtual void  v36(); // _ZN7S3450C33v36Ev
  virtual void  v37(); // _ZN7S3450C33v37Ev
  virtual void  v38(); // _ZN7S3450C33v38Ev
  virtual void  v39(); // _ZN7S3450C33v39Ev
  virtual void  v40(); // _ZN7S3450C33v40Ev
  virtual void  v41(); // _ZN7S3450C33v41Ev
  virtual void  v42(); // _ZN7S3450C33v42Ev
  virtual void  v43(); // _ZN7S3450C33v43Ev
  virtual void  v44(); // _ZN7S3450C33v44Ev
  virtual void  v45(); // _ZN7S3450C33v45Ev
  virtual void  v46(); // _ZN7S3450C33v46Ev
  virtual void  v47(); // _ZN7S3450C33v47Ev
  virtual void  v48(); // _ZN7S3450C33v48Ev
  virtual void  v49(); // _ZN7S3450C33v49Ev
  virtual void  v50(); // _ZN7S3450C33v50Ev
  virtual void  v51(); // _ZN7S3450C33v51Ev
  virtual void  v52(); // _ZN7S3450C33v52Ev
  virtual void  v53(); // _ZN7S3450C33v53Ev
  virtual void  v54(); // _ZN7S3450C33v54Ev
  virtual void  v55(); // _ZN7S3450C33v55Ev
  virtual void  v56(); // _ZN7S3450C33v56Ev
  virtual void  v57(); // _ZN7S3450C33v57Ev
  virtual void  v58(); // _ZN7S3450C33v58Ev
  virtual void  v59(); // _ZN7S3450C33v59Ev
  virtual void  v60(); // _ZN7S3450C33v60Ev
  virtual void  v61(); // _ZN7S3450C33v61Ev
  virtual void  v62(); // _ZN7S3450C33v62Ev
  virtual void  v63(); // _ZN7S3450C33v63Ev
  virtual void  v64(); // _ZN7S3450C33v64Ev
  virtual void  v65(); // _ZN7S3450C33v65Ev
  virtual void  v66(); // _ZN7S3450C33v66Ev
  virtual void  v67(); // _ZN7S3450C33v67Ev
  virtual void  v68(); // _ZN7S3450C33v68Ev
  virtual void  v69(); // _ZN7S3450C33v69Ev
  virtual void  v70(); // _ZN7S3450C33v70Ev
  virtual void  v71(); // _ZN7S3450C33v71Ev
  virtual void  v72(); // _ZN7S3450C33v72Ev
  S3450C3(); // tgen
};
//SIG(-1 S3450C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3450C3 ::~S3450C3(){ note_dtor("S3450C3", this);}
void  S3450C3 ::v9(){vfunc_called(this, "_ZN7S3450C32v9Ev");}
void  S3450C3 ::v10(){vfunc_called(this, "_ZN7S3450C33v10Ev");}
void  S3450C3 ::v11(){vfunc_called(this, "_ZN7S3450C33v11Ev");}
void  S3450C3 ::v12(){vfunc_called(this, "_ZN7S3450C33v12Ev");}
void  S3450C3 ::v13(){vfunc_called(this, "_ZN7S3450C33v13Ev");}
void  S3450C3 ::v14(){vfunc_called(this, "_ZN7S3450C33v14Ev");}
void  S3450C3 ::v15(){vfunc_called(this, "_ZN7S3450C33v15Ev");}
void  S3450C3 ::v16(){vfunc_called(this, "_ZN7S3450C33v16Ev");}
void  S3450C3 ::v17(){vfunc_called(this, "_ZN7S3450C33v17Ev");}
void  S3450C3 ::v18(){vfunc_called(this, "_ZN7S3450C33v18Ev");}
void  S3450C3 ::v19(){vfunc_called(this, "_ZN7S3450C33v19Ev");}
void  S3450C3 ::v20(){vfunc_called(this, "_ZN7S3450C33v20Ev");}
void  S3450C3 ::v21(){vfunc_called(this, "_ZN7S3450C33v21Ev");}
void  S3450C3 ::v22(){vfunc_called(this, "_ZN7S3450C33v22Ev");}
void  S3450C3 ::v23(){vfunc_called(this, "_ZN7S3450C33v23Ev");}
void  S3450C3 ::v24(){vfunc_called(this, "_ZN7S3450C33v24Ev");}
void  S3450C3 ::v25(){vfunc_called(this, "_ZN7S3450C33v25Ev");}
void  S3450C3 ::v26(){vfunc_called(this, "_ZN7S3450C33v26Ev");}
void  S3450C3 ::v27(){vfunc_called(this, "_ZN7S3450C33v27Ev");}
void  S3450C3 ::v28(){vfunc_called(this, "_ZN7S3450C33v28Ev");}
void  S3450C3 ::v29(){vfunc_called(this, "_ZN7S3450C33v29Ev");}
void  S3450C3 ::v30(){vfunc_called(this, "_ZN7S3450C33v30Ev");}
void  S3450C3 ::v31(){vfunc_called(this, "_ZN7S3450C33v31Ev");}
void  S3450C3 ::v32(){vfunc_called(this, "_ZN7S3450C33v32Ev");}
void  S3450C3 ::v33(){vfunc_called(this, "_ZN7S3450C33v33Ev");}
void  S3450C3 ::v34(){vfunc_called(this, "_ZN7S3450C33v34Ev");}
void  S3450C3 ::v35(){vfunc_called(this, "_ZN7S3450C33v35Ev");}
void  S3450C3 ::v36(){vfunc_called(this, "_ZN7S3450C33v36Ev");}
void  S3450C3 ::v37(){vfunc_called(this, "_ZN7S3450C33v37Ev");}
void  S3450C3 ::v38(){vfunc_called(this, "_ZN7S3450C33v38Ev");}
void  S3450C3 ::v39(){vfunc_called(this, "_ZN7S3450C33v39Ev");}
void  S3450C3 ::v40(){vfunc_called(this, "_ZN7S3450C33v40Ev");}
void  S3450C3 ::v41(){vfunc_called(this, "_ZN7S3450C33v41Ev");}
void  S3450C3 ::v42(){vfunc_called(this, "_ZN7S3450C33v42Ev");}
void  S3450C3 ::v43(){vfunc_called(this, "_ZN7S3450C33v43Ev");}
void  S3450C3 ::v44(){vfunc_called(this, "_ZN7S3450C33v44Ev");}
void  S3450C3 ::v45(){vfunc_called(this, "_ZN7S3450C33v45Ev");}
void  S3450C3 ::v46(){vfunc_called(this, "_ZN7S3450C33v46Ev");}
void  S3450C3 ::v47(){vfunc_called(this, "_ZN7S3450C33v47Ev");}
void  S3450C3 ::v48(){vfunc_called(this, "_ZN7S3450C33v48Ev");}
void  S3450C3 ::v49(){vfunc_called(this, "_ZN7S3450C33v49Ev");}
void  S3450C3 ::v50(){vfunc_called(this, "_ZN7S3450C33v50Ev");}
void  S3450C3 ::v51(){vfunc_called(this, "_ZN7S3450C33v51Ev");}
void  S3450C3 ::v52(){vfunc_called(this, "_ZN7S3450C33v52Ev");}
void  S3450C3 ::v53(){vfunc_called(this, "_ZN7S3450C33v53Ev");}
void  S3450C3 ::v54(){vfunc_called(this, "_ZN7S3450C33v54Ev");}
void  S3450C3 ::v55(){vfunc_called(this, "_ZN7S3450C33v55Ev");}
void  S3450C3 ::v56(){vfunc_called(this, "_ZN7S3450C33v56Ev");}
void  S3450C3 ::v57(){vfunc_called(this, "_ZN7S3450C33v57Ev");}
void  S3450C3 ::v58(){vfunc_called(this, "_ZN7S3450C33v58Ev");}
void  S3450C3 ::v59(){vfunc_called(this, "_ZN7S3450C33v59Ev");}
void  S3450C3 ::v60(){vfunc_called(this, "_ZN7S3450C33v60Ev");}
void  S3450C3 ::v61(){vfunc_called(this, "_ZN7S3450C33v61Ev");}
void  S3450C3 ::v62(){vfunc_called(this, "_ZN7S3450C33v62Ev");}
void  S3450C3 ::v63(){vfunc_called(this, "_ZN7S3450C33v63Ev");}
void  S3450C3 ::v64(){vfunc_called(this, "_ZN7S3450C33v64Ev");}
void  S3450C3 ::v65(){vfunc_called(this, "_ZN7S3450C33v65Ev");}
void  S3450C3 ::v66(){vfunc_called(this, "_ZN7S3450C33v66Ev");}
void  S3450C3 ::v67(){vfunc_called(this, "_ZN7S3450C33v67Ev");}
void  S3450C3 ::v68(){vfunc_called(this, "_ZN7S3450C33v68Ev");}
void  S3450C3 ::v69(){vfunc_called(this, "_ZN7S3450C33v69Ev");}
void  S3450C3 ::v70(){vfunc_called(this, "_ZN7S3450C33v70Ev");}
void  S3450C3 ::v71(){vfunc_called(this, "_ZN7S3450C33v71Ev");}
void  S3450C3 ::v72(){vfunc_called(this, "_ZN7S3450C33v72Ev");}
S3450C3 ::S3450C3(){ note_ctor("S3450C3", this);} // tgen

static void Test_S3450C3()
{
  extern Class_Descriptor cd_S3450C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3450C3, buf);
    S3450C3 *dp, &lv = *(dp=new (buf) S3450C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3450C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3450C3)");
    check_field_offset(lv, s3450c3f0, ABISELECT(8,4), "S3450C3.s3450c3f0");
    check_field_offset(lv, s3450c3f1, ABISELECT(16,8), "S3450C3.s3450c3f1");
    check_field_offset(lv, s3450c3f2, ABISELECT(24,16), "S3450C3.s3450c3f2");
    check_field_offset(lv, s3450c3f3, ABISELECT(56,32), "S3450C3.s3450c3f3");
    check_field_offset(lv, s3450c3f4, ABISELECT(64,40), "S3450C3.s3450c3f4");
    check_field_offset(lv, s3450c3f5, ABISELECT(72,44), "S3450C3.s3450c3f5");
    check_field_offset(lv, s3450c3f6, ABISELECT(80,52), "S3450C3.s3450c3f6");
    test_class_info(&lv, &cd_S3450C3);
    dp->~S3450C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3450C3(Test_S3450C3, "S3450C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3450C3C1Ev();
extern void _ZN7S3450C3D1Ev();
Name_Map name_map_S3450C3[] = {
  NSPAIR(_ZN7S3450C3C1Ev),
  NSPAIR(_ZN7S3450C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3450C3[];
extern void _ZN7S3450C3D1Ev();
extern void _ZN7S3450C3D0Ev();
extern void _ZN7S3450C32v9Ev();
extern void _ZN7S3450C33v10Ev();
extern void _ZN7S3450C33v11Ev();
extern void _ZN7S3450C33v12Ev();
extern void _ZN7S3450C33v13Ev();
extern void _ZN7S3450C33v14Ev();
extern void _ZN7S3450C33v15Ev();
extern void _ZN7S3450C33v16Ev();
extern void _ZN7S3450C33v17Ev();
extern void _ZN7S3450C33v18Ev();
extern void _ZN7S3450C33v19Ev();
extern void _ZN7S3450C33v20Ev();
extern void _ZN7S3450C33v21Ev();
extern void _ZN7S3450C33v22Ev();
extern void _ZN7S3450C33v23Ev();
extern void _ZN7S3450C33v24Ev();
extern void _ZN7S3450C33v25Ev();
extern void _ZN7S3450C33v26Ev();
extern void _ZN7S3450C33v27Ev();
extern void _ZN7S3450C33v28Ev();
extern void _ZN7S3450C33v29Ev();
extern void _ZN7S3450C33v30Ev();
extern void _ZN7S3450C33v31Ev();
extern void _ZN7S3450C33v32Ev();
extern void _ZN7S3450C33v33Ev();
extern void _ZN7S3450C33v34Ev();
extern void _ZN7S3450C33v35Ev();
extern void _ZN7S3450C33v36Ev();
extern void _ZN7S3450C33v37Ev();
extern void _ZN7S3450C33v38Ev();
extern void _ZN7S3450C33v39Ev();
extern void _ZN7S3450C33v40Ev();
extern void _ZN7S3450C33v41Ev();
extern void _ZN7S3450C33v42Ev();
extern void _ZN7S3450C33v43Ev();
extern void _ZN7S3450C33v44Ev();
extern void _ZN7S3450C33v45Ev();
extern void _ZN7S3450C33v46Ev();
extern void _ZN7S3450C33v47Ev();
extern void _ZN7S3450C33v48Ev();
extern void _ZN7S3450C33v49Ev();
extern void _ZN7S3450C33v50Ev();
extern void _ZN7S3450C33v51Ev();
extern void _ZN7S3450C33v52Ev();
extern void _ZN7S3450C33v53Ev();
extern void _ZN7S3450C33v54Ev();
extern void _ZN7S3450C33v55Ev();
extern void _ZN7S3450C33v56Ev();
extern void _ZN7S3450C33v57Ev();
extern void _ZN7S3450C33v58Ev();
extern void _ZN7S3450C33v59Ev();
extern void _ZN7S3450C33v60Ev();
extern void _ZN7S3450C33v61Ev();
extern void _ZN7S3450C33v62Ev();
extern void _ZN7S3450C33v63Ev();
extern void _ZN7S3450C33v64Ev();
extern void _ZN7S3450C33v65Ev();
extern void _ZN7S3450C33v66Ev();
extern void _ZN7S3450C33v67Ev();
extern void _ZN7S3450C33v68Ev();
extern void _ZN7S3450C33v69Ev();
extern void _ZN7S3450C33v70Ev();
extern void _ZN7S3450C33v71Ev();
extern void _ZN7S3450C33v72Ev();
static  VTBL_ENTRY vtc_S3450C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3450C3[0]),
  (VTBL_ENTRY)&_ZN7S3450C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3450C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3450C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v72Ev,
};
extern VTBL_ENTRY _ZTI7S3450C3[];
extern  VTBL_ENTRY _ZTV7S3450C3[];
Class_Descriptor cd_S3450C3 = {  "S3450C3", // class name
  0,0,//no base classes
  &(vtc_S3450C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3450C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3450C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3450C2  : S3450C3 {
  int s3450c2f0;
  ::S1409C30 s3450c2f1;
  virtual  ~S3450C2(); // _ZN7S3450C2D1Ev
  virtual void  v73(); // _ZN7S3450C23v73Ev
  virtual void  v74(); // _ZN7S3450C23v74Ev
  virtual void  v75(); // _ZN7S3450C23v75Ev
  virtual void  v76(); // _ZN7S3450C23v76Ev
  virtual void  v77(); // _ZN7S3450C23v77Ev
  virtual void  v78(); // _ZN7S3450C23v78Ev
  virtual void  v79(); // _ZN7S3450C23v79Ev
  virtual void  v80(); // _ZN7S3450C23v80Ev
  virtual void  v81(); // _ZN7S3450C23v81Ev
  virtual void  v82(); // _ZN7S3450C23v82Ev
  virtual void  v83(); // _ZN7S3450C23v83Ev
  virtual void  v84(); // _ZN7S3450C23v84Ev
  virtual void  v85(); // _ZN7S3450C23v85Ev
  virtual void  v86(); // _ZN7S3450C23v86Ev
  virtual void  v87(); // _ZN7S3450C23v87Ev
  virtual void  v88(); // _ZN7S3450C23v88Ev
  virtual void  v89(); // _ZN7S3450C23v89Ev
  virtual void  v90(); // _ZN7S3450C23v90Ev
  S3450C2(); // tgen
};
//SIG(-1 S3450C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3450C2 ::~S3450C2(){ note_dtor("S3450C2", this);}
void  S3450C2 ::v73(){vfunc_called(this, "_ZN7S3450C23v73Ev");}
void  S3450C2 ::v74(){vfunc_called(this, "_ZN7S3450C23v74Ev");}
void  S3450C2 ::v75(){vfunc_called(this, "_ZN7S3450C23v75Ev");}
void  S3450C2 ::v76(){vfunc_called(this, "_ZN7S3450C23v76Ev");}
void  S3450C2 ::v77(){vfunc_called(this, "_ZN7S3450C23v77Ev");}
void  S3450C2 ::v78(){vfunc_called(this, "_ZN7S3450C23v78Ev");}
void  S3450C2 ::v79(){vfunc_called(this, "_ZN7S3450C23v79Ev");}
void  S3450C2 ::v80(){vfunc_called(this, "_ZN7S3450C23v80Ev");}
void  S3450C2 ::v81(){vfunc_called(this, "_ZN7S3450C23v81Ev");}
void  S3450C2 ::v82(){vfunc_called(this, "_ZN7S3450C23v82Ev");}
void  S3450C2 ::v83(){vfunc_called(this, "_ZN7S3450C23v83Ev");}
void  S3450C2 ::v84(){vfunc_called(this, "_ZN7S3450C23v84Ev");}
void  S3450C2 ::v85(){vfunc_called(this, "_ZN7S3450C23v85Ev");}
void  S3450C2 ::v86(){vfunc_called(this, "_ZN7S3450C23v86Ev");}
void  S3450C2 ::v87(){vfunc_called(this, "_ZN7S3450C23v87Ev");}
void  S3450C2 ::v88(){vfunc_called(this, "_ZN7S3450C23v88Ev");}
void  S3450C2 ::v89(){vfunc_called(this, "_ZN7S3450C23v89Ev");}
void  S3450C2 ::v90(){vfunc_called(this, "_ZN7S3450C23v90Ev");}
S3450C2 ::S3450C2(){ note_ctor("S3450C2", this);} // tgen

static void Test_S3450C2()
{
  extern Class_Descriptor cd_S3450C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3450C2, buf);
    S3450C2 *dp, &lv = *(dp=new (buf) S3450C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3450C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3450C2)");
    check_base_class_offset(lv, (S3450C3*), 0, "S3450C2");
    check_field_offset(lv, s3450c2f0, ABISELECT(96,60), "S3450C2.s3450c2f0");
    check_field_offset(lv, s3450c2f1, ABISELECT(104,64), "S3450C2.s3450c2f1");
    test_class_info(&lv, &cd_S3450C2);
    dp->~S3450C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3450C2(Test_S3450C2, "S3450C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3450C2C1Ev();
extern void _ZN7S3450C2D1Ev();
Name_Map name_map_S3450C2[] = {
  NSPAIR(_ZN7S3450C2C1Ev),
  NSPAIR(_ZN7S3450C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3450C3;
extern VTBL_ENTRY _ZTI7S3450C3[];
extern  VTBL_ENTRY _ZTV7S3450C3[];
static Base_Class bases_S3450C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3450C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3450C2[];
extern void _ZN7S3450C2D1Ev();
extern void _ZN7S3450C2D0Ev();
extern void _ZN7S3450C32v9Ev();
extern void _ZN7S3450C33v10Ev();
extern void _ZN7S3450C33v11Ev();
extern void _ZN7S3450C33v12Ev();
extern void _ZN7S3450C33v13Ev();
extern void _ZN7S3450C33v14Ev();
extern void _ZN7S3450C33v15Ev();
extern void _ZN7S3450C33v16Ev();
extern void _ZN7S3450C33v17Ev();
extern void _ZN7S3450C33v18Ev();
extern void _ZN7S3450C33v19Ev();
extern void _ZN7S3450C33v20Ev();
extern void _ZN7S3450C33v21Ev();
extern void _ZN7S3450C33v22Ev();
extern void _ZN7S3450C33v23Ev();
extern void _ZN7S3450C33v24Ev();
extern void _ZN7S3450C33v25Ev();
extern void _ZN7S3450C33v26Ev();
extern void _ZN7S3450C33v27Ev();
extern void _ZN7S3450C33v28Ev();
extern void _ZN7S3450C33v29Ev();
extern void _ZN7S3450C33v30Ev();
extern void _ZN7S3450C33v31Ev();
extern void _ZN7S3450C33v32Ev();
extern void _ZN7S3450C33v33Ev();
extern void _ZN7S3450C33v34Ev();
extern void _ZN7S3450C33v35Ev();
extern void _ZN7S3450C33v36Ev();
extern void _ZN7S3450C33v37Ev();
extern void _ZN7S3450C33v38Ev();
extern void _ZN7S3450C33v39Ev();
extern void _ZN7S3450C33v40Ev();
extern void _ZN7S3450C33v41Ev();
extern void _ZN7S3450C33v42Ev();
extern void _ZN7S3450C33v43Ev();
extern void _ZN7S3450C33v44Ev();
extern void _ZN7S3450C33v45Ev();
extern void _ZN7S3450C33v46Ev();
extern void _ZN7S3450C33v47Ev();
extern void _ZN7S3450C33v48Ev();
extern void _ZN7S3450C33v49Ev();
extern void _ZN7S3450C33v50Ev();
extern void _ZN7S3450C33v51Ev();
extern void _ZN7S3450C33v52Ev();
extern void _ZN7S3450C33v53Ev();
extern void _ZN7S3450C33v54Ev();
extern void _ZN7S3450C33v55Ev();
extern void _ZN7S3450C33v56Ev();
extern void _ZN7S3450C33v57Ev();
extern void _ZN7S3450C33v58Ev();
extern void _ZN7S3450C33v59Ev();
extern void _ZN7S3450C33v60Ev();
extern void _ZN7S3450C33v61Ev();
extern void _ZN7S3450C33v62Ev();
extern void _ZN7S3450C33v63Ev();
extern void _ZN7S3450C33v64Ev();
extern void _ZN7S3450C33v65Ev();
extern void _ZN7S3450C33v66Ev();
extern void _ZN7S3450C33v67Ev();
extern void _ZN7S3450C33v68Ev();
extern void _ZN7S3450C33v69Ev();
extern void _ZN7S3450C33v70Ev();
extern void _ZN7S3450C33v71Ev();
extern void _ZN7S3450C33v72Ev();
extern void _ZN7S3450C23v73Ev();
extern void _ZN7S3450C23v74Ev();
extern void _ZN7S3450C23v75Ev();
extern void _ZN7S3450C23v76Ev();
extern void _ZN7S3450C23v77Ev();
extern void _ZN7S3450C23v78Ev();
extern void _ZN7S3450C23v79Ev();
extern void _ZN7S3450C23v80Ev();
extern void _ZN7S3450C23v81Ev();
extern void _ZN7S3450C23v82Ev();
extern void _ZN7S3450C23v83Ev();
extern void _ZN7S3450C23v84Ev();
extern void _ZN7S3450C23v85Ev();
extern void _ZN7S3450C23v86Ev();
extern void _ZN7S3450C23v87Ev();
extern void _ZN7S3450C23v88Ev();
extern void _ZN7S3450C23v89Ev();
extern void _ZN7S3450C23v90Ev();
static  VTBL_ENTRY vtc_S3450C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3450C2[0]),
  (VTBL_ENTRY)&_ZN7S3450C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3450C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3450C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v90Ev,
};
extern VTBL_ENTRY _ZTI7S3450C2[];
extern  VTBL_ENTRY _ZTV7S3450C2[];
Class_Descriptor cd_S3450C2 = {  "S3450C2", // class name
  bases_S3450C2, 1,
  &(vtc_S3450C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3450C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3450C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3450C1  : S3450C2 {
  unsigned int s3450c1f0:1;
  ::S1573C9_nt s3450c1f1;
  virtual  ~S3450C1(); // _ZN7S3450C1D1Ev
  virtual void  v1(); // _ZN7S3450C12v1Ev
  virtual void  v2(); // _ZN7S3450C12v2Ev
  virtual void  v3(); // _ZN7S3450C12v3Ev
  virtual void  v4(); // _ZN7S3450C12v4Ev
  virtual void  v5(); // _ZN7S3450C12v5Ev
  virtual void  v6(); // _ZN7S3450C12v6Ev
  virtual void  v7(); // _ZN7S3450C12v7Ev
  virtual void  v8(); // _ZN7S3450C12v8Ev
  S3450C1(); // tgen
};
//SIG(1 S3450C1) C1{ BC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi:1 FC8{ BC9{ m Fc[4] FC10{ BC11{ BC7}} Fi[2]} Fp}}


 S3450C1 ::~S3450C1(){ note_dtor("S3450C1", this);}
void  S3450C1 ::v1(){vfunc_called(this, "_ZN7S3450C12v1Ev");}
void  S3450C1 ::v2(){vfunc_called(this, "_ZN7S3450C12v2Ev");}
void  S3450C1 ::v3(){vfunc_called(this, "_ZN7S3450C12v3Ev");}
void  S3450C1 ::v4(){vfunc_called(this, "_ZN7S3450C12v4Ev");}
void  S3450C1 ::v5(){vfunc_called(this, "_ZN7S3450C12v5Ev");}
void  S3450C1 ::v6(){vfunc_called(this, "_ZN7S3450C12v6Ev");}
void  S3450C1 ::v7(){vfunc_called(this, "_ZN7S3450C12v7Ev");}
void  S3450C1 ::v8(){vfunc_called(this, "_ZN7S3450C12v8Ev");}
S3450C1 ::S3450C1(){ note_ctor("S3450C1", this);} // tgen

static void Test_S3450C1()
{
  extern Class_Descriptor cd_S3450C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S3450C1, buf);
    S3450C1 *dp, &lv = *(dp=new (buf) S3450C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S3450C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3450C1)");
    check_base_class_offset(lv, (S3450C3*)(S3450C2*), 0, "S3450C1");
    check_base_class_offset(lv, (S3450C2*), 0, "S3450C1");
    set_bf_and_test(lv, s3450c1f0, ABISELECT(120,76), 0, 1, 1, "S3450C1");
    check_field_offset(lv, s3450c1f1, ABISELECT(128,80), "S3450C1.s3450c1f1");
    test_class_info(&lv, &cd_S3450C1);
    dp->~S3450C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3450C1(Test_S3450C1, "S3450C1", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN7S3450C1C1Ev();
extern void _ZN7S3450C1D1Ev();
Name_Map name_map_S3450C1[] = {
  NSPAIR(_ZN7S3450C1C1Ev),
  NSPAIR(_ZN7S3450C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3450C3;
extern VTBL_ENTRY _ZTI7S3450C3[];
extern  VTBL_ENTRY _ZTV7S3450C3[];
extern Class_Descriptor cd_S3450C2;
extern VTBL_ENTRY _ZTI7S3450C2[];
extern  VTBL_ENTRY _ZTV7S3450C2[];
static Base_Class bases_S3450C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3450C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3450C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3450C1[];
extern void _ZN7S3450C1D1Ev();
extern void _ZN7S3450C1D0Ev();
extern void _ZN7S3450C32v9Ev();
extern void _ZN7S3450C33v10Ev();
extern void _ZN7S3450C33v11Ev();
extern void _ZN7S3450C33v12Ev();
extern void _ZN7S3450C33v13Ev();
extern void _ZN7S3450C33v14Ev();
extern void _ZN7S3450C33v15Ev();
extern void _ZN7S3450C33v16Ev();
extern void _ZN7S3450C33v17Ev();
extern void _ZN7S3450C33v18Ev();
extern void _ZN7S3450C33v19Ev();
extern void _ZN7S3450C33v20Ev();
extern void _ZN7S3450C33v21Ev();
extern void _ZN7S3450C33v22Ev();
extern void _ZN7S3450C33v23Ev();
extern void _ZN7S3450C33v24Ev();
extern void _ZN7S3450C33v25Ev();
extern void _ZN7S3450C33v26Ev();
extern void _ZN7S3450C33v27Ev();
extern void _ZN7S3450C33v28Ev();
extern void _ZN7S3450C33v29Ev();
extern void _ZN7S3450C33v30Ev();
extern void _ZN7S3450C33v31Ev();
extern void _ZN7S3450C33v32Ev();
extern void _ZN7S3450C33v33Ev();
extern void _ZN7S3450C33v34Ev();
extern void _ZN7S3450C33v35Ev();
extern void _ZN7S3450C33v36Ev();
extern void _ZN7S3450C33v37Ev();
extern void _ZN7S3450C33v38Ev();
extern void _ZN7S3450C33v39Ev();
extern void _ZN7S3450C33v40Ev();
extern void _ZN7S3450C33v41Ev();
extern void _ZN7S3450C33v42Ev();
extern void _ZN7S3450C33v43Ev();
extern void _ZN7S3450C33v44Ev();
extern void _ZN7S3450C33v45Ev();
extern void _ZN7S3450C33v46Ev();
extern void _ZN7S3450C33v47Ev();
extern void _ZN7S3450C33v48Ev();
extern void _ZN7S3450C33v49Ev();
extern void _ZN7S3450C33v50Ev();
extern void _ZN7S3450C33v51Ev();
extern void _ZN7S3450C33v52Ev();
extern void _ZN7S3450C33v53Ev();
extern void _ZN7S3450C33v54Ev();
extern void _ZN7S3450C33v55Ev();
extern void _ZN7S3450C33v56Ev();
extern void _ZN7S3450C33v57Ev();
extern void _ZN7S3450C33v58Ev();
extern void _ZN7S3450C33v59Ev();
extern void _ZN7S3450C33v60Ev();
extern void _ZN7S3450C33v61Ev();
extern void _ZN7S3450C33v62Ev();
extern void _ZN7S3450C33v63Ev();
extern void _ZN7S3450C33v64Ev();
extern void _ZN7S3450C33v65Ev();
extern void _ZN7S3450C33v66Ev();
extern void _ZN7S3450C33v67Ev();
extern void _ZN7S3450C33v68Ev();
extern void _ZN7S3450C33v69Ev();
extern void _ZN7S3450C33v70Ev();
extern void _ZN7S3450C33v71Ev();
extern void _ZN7S3450C33v72Ev();
extern void _ZN7S3450C23v73Ev();
extern void _ZN7S3450C23v74Ev();
extern void _ZN7S3450C23v75Ev();
extern void _ZN7S3450C23v76Ev();
extern void _ZN7S3450C23v77Ev();
extern void _ZN7S3450C23v78Ev();
extern void _ZN7S3450C23v79Ev();
extern void _ZN7S3450C23v80Ev();
extern void _ZN7S3450C23v81Ev();
extern void _ZN7S3450C23v82Ev();
extern void _ZN7S3450C23v83Ev();
extern void _ZN7S3450C23v84Ev();
extern void _ZN7S3450C23v85Ev();
extern void _ZN7S3450C23v86Ev();
extern void _ZN7S3450C23v87Ev();
extern void _ZN7S3450C23v88Ev();
extern void _ZN7S3450C23v89Ev();
extern void _ZN7S3450C23v90Ev();
extern void _ZN7S3450C12v1Ev();
extern void _ZN7S3450C12v2Ev();
extern void _ZN7S3450C12v3Ev();
extern void _ZN7S3450C12v4Ev();
extern void _ZN7S3450C12v5Ev();
extern void _ZN7S3450C12v6Ev();
extern void _ZN7S3450C12v7Ev();
extern void _ZN7S3450C12v8Ev();
static  VTBL_ENTRY vtc_S3450C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3450C1[0]),
  (VTBL_ENTRY)&_ZN7S3450C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3450C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3450C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3450C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3450C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3450C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3450C1[];
extern  VTBL_ENTRY _ZTV7S3450C1[];
Class_Descriptor cd_S3450C1 = {  "S3450C1", // class name
  bases_S3450C1, 2,
  &(vtc_S3450C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI7S3450C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3450C1),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3244C3  {
  int s3244c3f0;
  __tsi64 s3244c3f1;
  void *s3244c3f2[4];
  int s3244c3f3[2];
  void *s3244c3f4;
  ::S1409C5_nt s3244c3f5;
  void *s3244c3f6[2];
  virtual  ~S3244C3(); // _ZN7S3244C3D1Ev
  virtual void  v4(); // _ZN7S3244C32v4Ev
  virtual void  v5(); // _ZN7S3244C32v5Ev
  virtual void  v6(); // _ZN7S3244C32v6Ev
  virtual void  v7(); // _ZN7S3244C32v7Ev
  virtual void  v8(); // _ZN7S3244C32v8Ev
  virtual void  v9(); // _ZN7S3244C32v9Ev
  virtual void  v10(); // _ZN7S3244C33v10Ev
  virtual void  v11(); // _ZN7S3244C33v11Ev
  virtual void  v12(); // _ZN7S3244C33v12Ev
  virtual void  v13(); // _ZN7S3244C33v13Ev
  virtual void  v14(); // _ZN7S3244C33v14Ev
  virtual void  v15(); // _ZN7S3244C33v15Ev
  virtual void  v16(); // _ZN7S3244C33v16Ev
  virtual void  v17(); // _ZN7S3244C33v17Ev
  virtual void  v18(); // _ZN7S3244C33v18Ev
  virtual void  v19(); // _ZN7S3244C33v19Ev
  virtual void  v20(); // _ZN7S3244C33v20Ev
  virtual void  v21(); // _ZN7S3244C33v21Ev
  virtual void  v22(); // _ZN7S3244C33v22Ev
  virtual void  v23(); // _ZN7S3244C33v23Ev
  virtual void  v24(); // _ZN7S3244C33v24Ev
  virtual void  v25(); // _ZN7S3244C33v25Ev
  virtual void  v26(); // _ZN7S3244C33v26Ev
  virtual void  v27(); // _ZN7S3244C33v27Ev
  virtual void  v28(); // _ZN7S3244C33v28Ev
  virtual void  v29(); // _ZN7S3244C33v29Ev
  virtual void  v30(); // _ZN7S3244C33v30Ev
  virtual void  v31(); // _ZN7S3244C33v31Ev
  virtual void  v32(); // _ZN7S3244C33v32Ev
  virtual void  v33(); // _ZN7S3244C33v33Ev
  virtual void  v34(); // _ZN7S3244C33v34Ev
  virtual void  v35(); // _ZN7S3244C33v35Ev
  virtual void  v36(); // _ZN7S3244C33v36Ev
  virtual void  v37(); // _ZN7S3244C33v37Ev
  virtual void  v38(); // _ZN7S3244C33v38Ev
  virtual void  v39(); // _ZN7S3244C33v39Ev
  virtual void  v40(); // _ZN7S3244C33v40Ev
  virtual void  v41(); // _ZN7S3244C33v41Ev
  virtual void  v42(); // _ZN7S3244C33v42Ev
  virtual void  v43(); // _ZN7S3244C33v43Ev
  virtual void  v44(); // _ZN7S3244C33v44Ev
  virtual void  v45(); // _ZN7S3244C33v45Ev
  virtual void  v46(); // _ZN7S3244C33v46Ev
  virtual void  v47(); // _ZN7S3244C33v47Ev
  virtual void  v48(); // _ZN7S3244C33v48Ev
  virtual void  v49(); // _ZN7S3244C33v49Ev
  virtual void  v50(); // _ZN7S3244C33v50Ev
  virtual void  v51(); // _ZN7S3244C33v51Ev
  virtual void  v52(); // _ZN7S3244C33v52Ev
  virtual void  v53(); // _ZN7S3244C33v53Ev
  virtual void  v54(); // _ZN7S3244C33v54Ev
  virtual void  v55(); // _ZN7S3244C33v55Ev
  virtual void  v56(); // _ZN7S3244C33v56Ev
  virtual void  v57(); // _ZN7S3244C33v57Ev
  virtual void  v58(); // _ZN7S3244C33v58Ev
  virtual void  v59(); // _ZN7S3244C33v59Ev
  virtual void  v60(); // _ZN7S3244C33v60Ev
  virtual void  v61(); // _ZN7S3244C33v61Ev
  virtual void  v62(); // _ZN7S3244C33v62Ev
  virtual void  v63(); // _ZN7S3244C33v63Ev
  virtual void  v64(); // _ZN7S3244C33v64Ev
  virtual void  v65(); // _ZN7S3244C33v65Ev
  virtual void  v66(); // _ZN7S3244C33v66Ev
  virtual void  v67(); // _ZN7S3244C33v67Ev
  S3244C3(); // tgen
};
//SIG(-1 S3244C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3244C3 ::~S3244C3(){ note_dtor("S3244C3", this);}
void  S3244C3 ::v4(){vfunc_called(this, "_ZN7S3244C32v4Ev");}
void  S3244C3 ::v5(){vfunc_called(this, "_ZN7S3244C32v5Ev");}
void  S3244C3 ::v6(){vfunc_called(this, "_ZN7S3244C32v6Ev");}
void  S3244C3 ::v7(){vfunc_called(this, "_ZN7S3244C32v7Ev");}
void  S3244C3 ::v8(){vfunc_called(this, "_ZN7S3244C32v8Ev");}
void  S3244C3 ::v9(){vfunc_called(this, "_ZN7S3244C32v9Ev");}
void  S3244C3 ::v10(){vfunc_called(this, "_ZN7S3244C33v10Ev");}
void  S3244C3 ::v11(){vfunc_called(this, "_ZN7S3244C33v11Ev");}
void  S3244C3 ::v12(){vfunc_called(this, "_ZN7S3244C33v12Ev");}
void  S3244C3 ::v13(){vfunc_called(this, "_ZN7S3244C33v13Ev");}
void  S3244C3 ::v14(){vfunc_called(this, "_ZN7S3244C33v14Ev");}
void  S3244C3 ::v15(){vfunc_called(this, "_ZN7S3244C33v15Ev");}
void  S3244C3 ::v16(){vfunc_called(this, "_ZN7S3244C33v16Ev");}
void  S3244C3 ::v17(){vfunc_called(this, "_ZN7S3244C33v17Ev");}
void  S3244C3 ::v18(){vfunc_called(this, "_ZN7S3244C33v18Ev");}
void  S3244C3 ::v19(){vfunc_called(this, "_ZN7S3244C33v19Ev");}
void  S3244C3 ::v20(){vfunc_called(this, "_ZN7S3244C33v20Ev");}
void  S3244C3 ::v21(){vfunc_called(this, "_ZN7S3244C33v21Ev");}
void  S3244C3 ::v22(){vfunc_called(this, "_ZN7S3244C33v22Ev");}
void  S3244C3 ::v23(){vfunc_called(this, "_ZN7S3244C33v23Ev");}
void  S3244C3 ::v24(){vfunc_called(this, "_ZN7S3244C33v24Ev");}
void  S3244C3 ::v25(){vfunc_called(this, "_ZN7S3244C33v25Ev");}
void  S3244C3 ::v26(){vfunc_called(this, "_ZN7S3244C33v26Ev");}
void  S3244C3 ::v27(){vfunc_called(this, "_ZN7S3244C33v27Ev");}
void  S3244C3 ::v28(){vfunc_called(this, "_ZN7S3244C33v28Ev");}
void  S3244C3 ::v29(){vfunc_called(this, "_ZN7S3244C33v29Ev");}
void  S3244C3 ::v30(){vfunc_called(this, "_ZN7S3244C33v30Ev");}
void  S3244C3 ::v31(){vfunc_called(this, "_ZN7S3244C33v31Ev");}
void  S3244C3 ::v32(){vfunc_called(this, "_ZN7S3244C33v32Ev");}
void  S3244C3 ::v33(){vfunc_called(this, "_ZN7S3244C33v33Ev");}
void  S3244C3 ::v34(){vfunc_called(this, "_ZN7S3244C33v34Ev");}
void  S3244C3 ::v35(){vfunc_called(this, "_ZN7S3244C33v35Ev");}
void  S3244C3 ::v36(){vfunc_called(this, "_ZN7S3244C33v36Ev");}
void  S3244C3 ::v37(){vfunc_called(this, "_ZN7S3244C33v37Ev");}
void  S3244C3 ::v38(){vfunc_called(this, "_ZN7S3244C33v38Ev");}
void  S3244C3 ::v39(){vfunc_called(this, "_ZN7S3244C33v39Ev");}
void  S3244C3 ::v40(){vfunc_called(this, "_ZN7S3244C33v40Ev");}
void  S3244C3 ::v41(){vfunc_called(this, "_ZN7S3244C33v41Ev");}
void  S3244C3 ::v42(){vfunc_called(this, "_ZN7S3244C33v42Ev");}
void  S3244C3 ::v43(){vfunc_called(this, "_ZN7S3244C33v43Ev");}
void  S3244C3 ::v44(){vfunc_called(this, "_ZN7S3244C33v44Ev");}
void  S3244C3 ::v45(){vfunc_called(this, "_ZN7S3244C33v45Ev");}
void  S3244C3 ::v46(){vfunc_called(this, "_ZN7S3244C33v46Ev");}
void  S3244C3 ::v47(){vfunc_called(this, "_ZN7S3244C33v47Ev");}
void  S3244C3 ::v48(){vfunc_called(this, "_ZN7S3244C33v48Ev");}
void  S3244C3 ::v49(){vfunc_called(this, "_ZN7S3244C33v49Ev");}
void  S3244C3 ::v50(){vfunc_called(this, "_ZN7S3244C33v50Ev");}
void  S3244C3 ::v51(){vfunc_called(this, "_ZN7S3244C33v51Ev");}
void  S3244C3 ::v52(){vfunc_called(this, "_ZN7S3244C33v52Ev");}
void  S3244C3 ::v53(){vfunc_called(this, "_ZN7S3244C33v53Ev");}
void  S3244C3 ::v54(){vfunc_called(this, "_ZN7S3244C33v54Ev");}
void  S3244C3 ::v55(){vfunc_called(this, "_ZN7S3244C33v55Ev");}
void  S3244C3 ::v56(){vfunc_called(this, "_ZN7S3244C33v56Ev");}
void  S3244C3 ::v57(){vfunc_called(this, "_ZN7S3244C33v57Ev");}
void  S3244C3 ::v58(){vfunc_called(this, "_ZN7S3244C33v58Ev");}
void  S3244C3 ::v59(){vfunc_called(this, "_ZN7S3244C33v59Ev");}
void  S3244C3 ::v60(){vfunc_called(this, "_ZN7S3244C33v60Ev");}
void  S3244C3 ::v61(){vfunc_called(this, "_ZN7S3244C33v61Ev");}
void  S3244C3 ::v62(){vfunc_called(this, "_ZN7S3244C33v62Ev");}
void  S3244C3 ::v63(){vfunc_called(this, "_ZN7S3244C33v63Ev");}
void  S3244C3 ::v64(){vfunc_called(this, "_ZN7S3244C33v64Ev");}
void  S3244C3 ::v65(){vfunc_called(this, "_ZN7S3244C33v65Ev");}
void  S3244C3 ::v66(){vfunc_called(this, "_ZN7S3244C33v66Ev");}
void  S3244C3 ::v67(){vfunc_called(this, "_ZN7S3244C33v67Ev");}
S3244C3 ::S3244C3(){ note_ctor("S3244C3", this);} // tgen

static void Test_S3244C3()
{
  extern Class_Descriptor cd_S3244C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3244C3, buf);
    S3244C3 *dp, &lv = *(dp=new (buf) S3244C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3244C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3244C3)");
    check_field_offset(lv, s3244c3f0, ABISELECT(8,4), "S3244C3.s3244c3f0");
    check_field_offset(lv, s3244c3f1, ABISELECT(16,8), "S3244C3.s3244c3f1");
    check_field_offset(lv, s3244c3f2, ABISELECT(24,16), "S3244C3.s3244c3f2");
    check_field_offset(lv, s3244c3f3, ABISELECT(56,32), "S3244C3.s3244c3f3");
    check_field_offset(lv, s3244c3f4, ABISELECT(64,40), "S3244C3.s3244c3f4");
    check_field_offset(lv, s3244c3f5, ABISELECT(72,44), "S3244C3.s3244c3f5");
    check_field_offset(lv, s3244c3f6, ABISELECT(80,52), "S3244C3.s3244c3f6");
    test_class_info(&lv, &cd_S3244C3);
    dp->~S3244C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3244C3(Test_S3244C3, "S3244C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3244C3C1Ev();
extern void _ZN7S3244C3D1Ev();
Name_Map name_map_S3244C3[] = {
  NSPAIR(_ZN7S3244C3C1Ev),
  NSPAIR(_ZN7S3244C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3244C3[];
extern void _ZN7S3244C3D1Ev();
extern void _ZN7S3244C3D0Ev();
extern void _ZN7S3244C32v4Ev();
extern void _ZN7S3244C32v5Ev();
extern void _ZN7S3244C32v6Ev();
extern void _ZN7S3244C32v7Ev();
extern void _ZN7S3244C32v8Ev();
extern void _ZN7S3244C32v9Ev();
extern void _ZN7S3244C33v10Ev();
extern void _ZN7S3244C33v11Ev();
extern void _ZN7S3244C33v12Ev();
extern void _ZN7S3244C33v13Ev();
extern void _ZN7S3244C33v14Ev();
extern void _ZN7S3244C33v15Ev();
extern void _ZN7S3244C33v16Ev();
extern void _ZN7S3244C33v17Ev();
extern void _ZN7S3244C33v18Ev();
extern void _ZN7S3244C33v19Ev();
extern void _ZN7S3244C33v20Ev();
extern void _ZN7S3244C33v21Ev();
extern void _ZN7S3244C33v22Ev();
extern void _ZN7S3244C33v23Ev();
extern void _ZN7S3244C33v24Ev();
extern void _ZN7S3244C33v25Ev();
extern void _ZN7S3244C33v26Ev();
extern void _ZN7S3244C33v27Ev();
extern void _ZN7S3244C33v28Ev();
extern void _ZN7S3244C33v29Ev();
extern void _ZN7S3244C33v30Ev();
extern void _ZN7S3244C33v31Ev();
extern void _ZN7S3244C33v32Ev();
extern void _ZN7S3244C33v33Ev();
extern void _ZN7S3244C33v34Ev();
extern void _ZN7S3244C33v35Ev();
extern void _ZN7S3244C33v36Ev();
extern void _ZN7S3244C33v37Ev();
extern void _ZN7S3244C33v38Ev();
extern void _ZN7S3244C33v39Ev();
extern void _ZN7S3244C33v40Ev();
extern void _ZN7S3244C33v41Ev();
extern void _ZN7S3244C33v42Ev();
extern void _ZN7S3244C33v43Ev();
extern void _ZN7S3244C33v44Ev();
extern void _ZN7S3244C33v45Ev();
extern void _ZN7S3244C33v46Ev();
extern void _ZN7S3244C33v47Ev();
extern void _ZN7S3244C33v48Ev();
extern void _ZN7S3244C33v49Ev();
extern void _ZN7S3244C33v50Ev();
extern void _ZN7S3244C33v51Ev();
extern void _ZN7S3244C33v52Ev();
extern void _ZN7S3244C33v53Ev();
extern void _ZN7S3244C33v54Ev();
extern void _ZN7S3244C33v55Ev();
extern void _ZN7S3244C33v56Ev();
extern void _ZN7S3244C33v57Ev();
extern void _ZN7S3244C33v58Ev();
extern void _ZN7S3244C33v59Ev();
extern void _ZN7S3244C33v60Ev();
extern void _ZN7S3244C33v61Ev();
extern void _ZN7S3244C33v62Ev();
extern void _ZN7S3244C33v63Ev();
extern void _ZN7S3244C33v64Ev();
extern void _ZN7S3244C33v65Ev();
extern void _ZN7S3244C33v66Ev();
extern void _ZN7S3244C33v67Ev();
static  VTBL_ENTRY vtc_S3244C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3244C3[0]),
  (VTBL_ENTRY)&_ZN7S3244C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3244C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3244C3[];
extern  VTBL_ENTRY _ZTV7S3244C3[];
Class_Descriptor cd_S3244C3 = {  "S3244C3", // class name
  0,0,//no base classes
  &(vtc_S3244C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3244C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3244C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3244C2  : S3244C3 {
  int s3244c2f0;
  ::S1409C30 s3244c2f1;
  virtual  ~S3244C2(); // _ZN7S3244C2D1Ev
  virtual void  v68(); // _ZN7S3244C23v68Ev
  virtual void  v69(); // _ZN7S3244C23v69Ev
  virtual void  v70(); // _ZN7S3244C23v70Ev
  virtual void  v71(); // _ZN7S3244C23v71Ev
  virtual void  v72(); // _ZN7S3244C23v72Ev
  virtual void  v73(); // _ZN7S3244C23v73Ev
  virtual void  v74(); // _ZN7S3244C23v74Ev
  virtual void  v75(); // _ZN7S3244C23v75Ev
  virtual void  v76(); // _ZN7S3244C23v76Ev
  virtual void  v77(); // _ZN7S3244C23v77Ev
  virtual void  v78(); // _ZN7S3244C23v78Ev
  virtual void  v79(); // _ZN7S3244C23v79Ev
  virtual void  v80(); // _ZN7S3244C23v80Ev
  virtual void  v81(); // _ZN7S3244C23v81Ev
  virtual void  v82(); // _ZN7S3244C23v82Ev
  virtual void  v83(); // _ZN7S3244C23v83Ev
  virtual void  v84(); // _ZN7S3244C23v84Ev
  virtual void  v85(); // _ZN7S3244C23v85Ev
  S3244C2(); // tgen
};
//SIG(-1 S3244C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3244C2 ::~S3244C2(){ note_dtor("S3244C2", this);}
void  S3244C2 ::v68(){vfunc_called(this, "_ZN7S3244C23v68Ev");}
void  S3244C2 ::v69(){vfunc_called(this, "_ZN7S3244C23v69Ev");}
void  S3244C2 ::v70(){vfunc_called(this, "_ZN7S3244C23v70Ev");}
void  S3244C2 ::v71(){vfunc_called(this, "_ZN7S3244C23v71Ev");}
void  S3244C2 ::v72(){vfunc_called(this, "_ZN7S3244C23v72Ev");}
void  S3244C2 ::v73(){vfunc_called(this, "_ZN7S3244C23v73Ev");}
void  S3244C2 ::v74(){vfunc_called(this, "_ZN7S3244C23v74Ev");}
void  S3244C2 ::v75(){vfunc_called(this, "_ZN7S3244C23v75Ev");}
void  S3244C2 ::v76(){vfunc_called(this, "_ZN7S3244C23v76Ev");}
void  S3244C2 ::v77(){vfunc_called(this, "_ZN7S3244C23v77Ev");}
void  S3244C2 ::v78(){vfunc_called(this, "_ZN7S3244C23v78Ev");}
void  S3244C2 ::v79(){vfunc_called(this, "_ZN7S3244C23v79Ev");}
void  S3244C2 ::v80(){vfunc_called(this, "_ZN7S3244C23v80Ev");}
void  S3244C2 ::v81(){vfunc_called(this, "_ZN7S3244C23v81Ev");}
void  S3244C2 ::v82(){vfunc_called(this, "_ZN7S3244C23v82Ev");}
void  S3244C2 ::v83(){vfunc_called(this, "_ZN7S3244C23v83Ev");}
void  S3244C2 ::v84(){vfunc_called(this, "_ZN7S3244C23v84Ev");}
void  S3244C2 ::v85(){vfunc_called(this, "_ZN7S3244C23v85Ev");}
S3244C2 ::S3244C2(){ note_ctor("S3244C2", this);} // tgen

static void Test_S3244C2()
{
  extern Class_Descriptor cd_S3244C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3244C2, buf);
    S3244C2 *dp, &lv = *(dp=new (buf) S3244C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3244C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3244C2)");
    check_base_class_offset(lv, (S3244C3*), 0, "S3244C2");
    check_field_offset(lv, s3244c2f0, ABISELECT(96,60), "S3244C2.s3244c2f0");
    check_field_offset(lv, s3244c2f1, ABISELECT(104,64), "S3244C2.s3244c2f1");
    test_class_info(&lv, &cd_S3244C2);
    dp->~S3244C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3244C2(Test_S3244C2, "S3244C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3244C2C1Ev();
extern void _ZN7S3244C2D1Ev();
Name_Map name_map_S3244C2[] = {
  NSPAIR(_ZN7S3244C2C1Ev),
  NSPAIR(_ZN7S3244C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3244C3;
extern VTBL_ENTRY _ZTI7S3244C3[];
extern  VTBL_ENTRY _ZTV7S3244C3[];
static Base_Class bases_S3244C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3244C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3244C2[];
extern void _ZN7S3244C2D1Ev();
extern void _ZN7S3244C2D0Ev();
extern void _ZN7S3244C32v4Ev();
extern void _ZN7S3244C32v5Ev();
extern void _ZN7S3244C32v6Ev();
extern void _ZN7S3244C32v7Ev();
extern void _ZN7S3244C32v8Ev();
extern void _ZN7S3244C32v9Ev();
extern void _ZN7S3244C33v10Ev();
extern void _ZN7S3244C33v11Ev();
extern void _ZN7S3244C33v12Ev();
extern void _ZN7S3244C33v13Ev();
extern void _ZN7S3244C33v14Ev();
extern void _ZN7S3244C33v15Ev();
extern void _ZN7S3244C33v16Ev();
extern void _ZN7S3244C33v17Ev();
extern void _ZN7S3244C33v18Ev();
extern void _ZN7S3244C33v19Ev();
extern void _ZN7S3244C33v20Ev();
extern void _ZN7S3244C33v21Ev();
extern void _ZN7S3244C33v22Ev();
extern void _ZN7S3244C33v23Ev();
extern void _ZN7S3244C33v24Ev();
extern void _ZN7S3244C33v25Ev();
extern void _ZN7S3244C33v26Ev();
extern void _ZN7S3244C33v27Ev();
extern void _ZN7S3244C33v28Ev();
extern void _ZN7S3244C33v29Ev();
extern void _ZN7S3244C33v30Ev();
extern void _ZN7S3244C33v31Ev();
extern void _ZN7S3244C33v32Ev();
extern void _ZN7S3244C33v33Ev();
extern void _ZN7S3244C33v34Ev();
extern void _ZN7S3244C33v35Ev();
extern void _ZN7S3244C33v36Ev();
extern void _ZN7S3244C33v37Ev();
extern void _ZN7S3244C33v38Ev();
extern void _ZN7S3244C33v39Ev();
extern void _ZN7S3244C33v40Ev();
extern void _ZN7S3244C33v41Ev();
extern void _ZN7S3244C33v42Ev();
extern void _ZN7S3244C33v43Ev();
extern void _ZN7S3244C33v44Ev();
extern void _ZN7S3244C33v45Ev();
extern void _ZN7S3244C33v46Ev();
extern void _ZN7S3244C33v47Ev();
extern void _ZN7S3244C33v48Ev();
extern void _ZN7S3244C33v49Ev();
extern void _ZN7S3244C33v50Ev();
extern void _ZN7S3244C33v51Ev();
extern void _ZN7S3244C33v52Ev();
extern void _ZN7S3244C33v53Ev();
extern void _ZN7S3244C33v54Ev();
extern void _ZN7S3244C33v55Ev();
extern void _ZN7S3244C33v56Ev();
extern void _ZN7S3244C33v57Ev();
extern void _ZN7S3244C33v58Ev();
extern void _ZN7S3244C33v59Ev();
extern void _ZN7S3244C33v60Ev();
extern void _ZN7S3244C33v61Ev();
extern void _ZN7S3244C33v62Ev();
extern void _ZN7S3244C33v63Ev();
extern void _ZN7S3244C33v64Ev();
extern void _ZN7S3244C33v65Ev();
extern void _ZN7S3244C33v66Ev();
extern void _ZN7S3244C33v67Ev();
extern void _ZN7S3244C23v68Ev();
extern void _ZN7S3244C23v69Ev();
extern void _ZN7S3244C23v70Ev();
extern void _ZN7S3244C23v71Ev();
extern void _ZN7S3244C23v72Ev();
extern void _ZN7S3244C23v73Ev();
extern void _ZN7S3244C23v74Ev();
extern void _ZN7S3244C23v75Ev();
extern void _ZN7S3244C23v76Ev();
extern void _ZN7S3244C23v77Ev();
extern void _ZN7S3244C23v78Ev();
extern void _ZN7S3244C23v79Ev();
extern void _ZN7S3244C23v80Ev();
extern void _ZN7S3244C23v81Ev();
extern void _ZN7S3244C23v82Ev();
extern void _ZN7S3244C23v83Ev();
extern void _ZN7S3244C23v84Ev();
extern void _ZN7S3244C23v85Ev();
static  VTBL_ENTRY vtc_S3244C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3244C2[0]),
  (VTBL_ENTRY)&_ZN7S3244C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3244C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v85Ev,
};
extern VTBL_ENTRY _ZTI7S3244C2[];
extern  VTBL_ENTRY _ZTV7S3244C2[];
Class_Descriptor cd_S3244C2 = {  "S3244C2", // class name
  bases_S3244C2, 1,
  &(vtc_S3244C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3244C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3244C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3244C1  : S3244C2 {
  ::S1573C9_nt s3244c1f0;
  ::S1573C9_nt s3244c1f1;
  ::S1573C9_nt s3244c1f2;
  ::S1573C9_nt s3244c1f3;
  unsigned int s3244c1f4:1;
  unsigned int s3244c1f5:1;
  virtual  ~S3244C1(); // _ZN7S3244C1D1Ev
  virtual void  v1(); // _ZN7S3244C12v1Ev
  virtual void  v2(); // _ZN7S3244C12v2Ev
  virtual void  v3(); // _ZN7S3244C12v3Ev
  S3244C1(); // tgen
};
//SIG(1 S3244C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 FC8{ BC9{ m Fc[4] FC10{ BC11{ BC7}} Fi[2]} Fp} FC8 FC8 FC8 Fi:1 Fi:1}


 S3244C1 ::~S3244C1(){ note_dtor("S3244C1", this);}
void  S3244C1 ::v1(){vfunc_called(this, "_ZN7S3244C12v1Ev");}
void  S3244C1 ::v2(){vfunc_called(this, "_ZN7S3244C12v2Ev");}
void  S3244C1 ::v3(){vfunc_called(this, "_ZN7S3244C12v3Ev");}
S3244C1 ::S3244C1(){ note_ctor("S3244C1", this);} // tgen

static void Test_S3244C1()
{
  extern Class_Descriptor cd_S3244C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,49)];
    init_test(&cd_S3244C1, buf);
    S3244C1 *dp, &lv = *(dp=new (buf) S3244C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,192), "sizeof(S3244C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3244C1)");
    check_base_class_offset(lv, (S3244C3*)(S3244C2*), 0, "S3244C1");
    check_base_class_offset(lv, (S3244C2*), 0, "S3244C1");
    check_field_offset(lv, s3244c1f0, ABISELECT(120,76), "S3244C1.s3244c1f0");
    check_field_offset(lv, s3244c1f1, ABISELECT(160,104), "S3244C1.s3244c1f1");
    check_field_offset(lv, s3244c1f2, ABISELECT(200,132), "S3244C1.s3244c1f2");
    check_field_offset(lv, s3244c1f3, ABISELECT(240,160), "S3244C1.s3244c1f3");
    set_bf_and_test(lv, s3244c1f4, ABISELECT(280,188), 0, 1, 1, "S3244C1");
    set_bf_and_test(lv, s3244c1f5, ABISELECT(280,188), 1, 1, 1, "S3244C1");
    test_class_info(&lv, &cd_S3244C1);
    dp->~S3244C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3244C1(Test_S3244C1, "S3244C1", ABISELECT(288,192));

#else // __cplusplus

extern void _ZN7S3244C1C1Ev();
extern void _ZN7S3244C1D1Ev();
Name_Map name_map_S3244C1[] = {
  NSPAIR(_ZN7S3244C1C1Ev),
  NSPAIR(_ZN7S3244C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3244C3;
extern VTBL_ENTRY _ZTI7S3244C3[];
extern  VTBL_ENTRY _ZTV7S3244C3[];
extern Class_Descriptor cd_S3244C2;
extern VTBL_ENTRY _ZTI7S3244C2[];
extern  VTBL_ENTRY _ZTV7S3244C2[];
static Base_Class bases_S3244C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3244C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3244C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3244C1[];
extern void _ZN7S3244C1D1Ev();
extern void _ZN7S3244C1D0Ev();
extern void _ZN7S3244C32v4Ev();
extern void _ZN7S3244C32v5Ev();
extern void _ZN7S3244C32v6Ev();
extern void _ZN7S3244C32v7Ev();
extern void _ZN7S3244C32v8Ev();
extern void _ZN7S3244C32v9Ev();
extern void _ZN7S3244C33v10Ev();
extern void _ZN7S3244C33v11Ev();
extern void _ZN7S3244C33v12Ev();
extern void _ZN7S3244C33v13Ev();
extern void _ZN7S3244C33v14Ev();
extern void _ZN7S3244C33v15Ev();
extern void _ZN7S3244C33v16Ev();
extern void _ZN7S3244C33v17Ev();
extern void _ZN7S3244C33v18Ev();
extern void _ZN7S3244C33v19Ev();
extern void _ZN7S3244C33v20Ev();
extern void _ZN7S3244C33v21Ev();
extern void _ZN7S3244C33v22Ev();
extern void _ZN7S3244C33v23Ev();
extern void _ZN7S3244C33v24Ev();
extern void _ZN7S3244C33v25Ev();
extern void _ZN7S3244C33v26Ev();
extern void _ZN7S3244C33v27Ev();
extern void _ZN7S3244C33v28Ev();
extern void _ZN7S3244C33v29Ev();
extern void _ZN7S3244C33v30Ev();
extern void _ZN7S3244C33v31Ev();
extern void _ZN7S3244C33v32Ev();
extern void _ZN7S3244C33v33Ev();
extern void _ZN7S3244C33v34Ev();
extern void _ZN7S3244C33v35Ev();
extern void _ZN7S3244C33v36Ev();
extern void _ZN7S3244C33v37Ev();
extern void _ZN7S3244C33v38Ev();
extern void _ZN7S3244C33v39Ev();
extern void _ZN7S3244C33v40Ev();
extern void _ZN7S3244C33v41Ev();
extern void _ZN7S3244C33v42Ev();
extern void _ZN7S3244C33v43Ev();
extern void _ZN7S3244C33v44Ev();
extern void _ZN7S3244C33v45Ev();
extern void _ZN7S3244C33v46Ev();
extern void _ZN7S3244C33v47Ev();
extern void _ZN7S3244C33v48Ev();
extern void _ZN7S3244C33v49Ev();
extern void _ZN7S3244C33v50Ev();
extern void _ZN7S3244C33v51Ev();
extern void _ZN7S3244C33v52Ev();
extern void _ZN7S3244C33v53Ev();
extern void _ZN7S3244C33v54Ev();
extern void _ZN7S3244C33v55Ev();
extern void _ZN7S3244C33v56Ev();
extern void _ZN7S3244C33v57Ev();
extern void _ZN7S3244C33v58Ev();
extern void _ZN7S3244C33v59Ev();
extern void _ZN7S3244C33v60Ev();
extern void _ZN7S3244C33v61Ev();
extern void _ZN7S3244C33v62Ev();
extern void _ZN7S3244C33v63Ev();
extern void _ZN7S3244C33v64Ev();
extern void _ZN7S3244C33v65Ev();
extern void _ZN7S3244C33v66Ev();
extern void _ZN7S3244C33v67Ev();
extern void _ZN7S3244C23v68Ev();
extern void _ZN7S3244C23v69Ev();
extern void _ZN7S3244C23v70Ev();
extern void _ZN7S3244C23v71Ev();
extern void _ZN7S3244C23v72Ev();
extern void _ZN7S3244C23v73Ev();
extern void _ZN7S3244C23v74Ev();
extern void _ZN7S3244C23v75Ev();
extern void _ZN7S3244C23v76Ev();
extern void _ZN7S3244C23v77Ev();
extern void _ZN7S3244C23v78Ev();
extern void _ZN7S3244C23v79Ev();
extern void _ZN7S3244C23v80Ev();
extern void _ZN7S3244C23v81Ev();
extern void _ZN7S3244C23v82Ev();
extern void _ZN7S3244C23v83Ev();
extern void _ZN7S3244C23v84Ev();
extern void _ZN7S3244C23v85Ev();
extern void _ZN7S3244C12v1Ev();
extern void _ZN7S3244C12v2Ev();
extern void _ZN7S3244C12v3Ev();
static  VTBL_ENTRY vtc_S3244C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3244C1[0]),
  (VTBL_ENTRY)&_ZN7S3244C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3244C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3244C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3244C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3244C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3244C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3244C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3244C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3244C1[];
extern  VTBL_ENTRY _ZTV7S3244C1[];
Class_Descriptor cd_S3244C1 = {  "S3244C1", // class name
  bases_S3244C1, 2,
  &(vtc_S3244C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,192), // object size
  NSPAIRA(_ZTI7S3244C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3244C1),89, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3448C3  {
  int s3448c3f0;
  __tsi64 s3448c3f1;
  void *s3448c3f2[4];
  int s3448c3f3[2];
  void *s3448c3f4;
  ::S1409C5_nt s3448c3f5;
  void *s3448c3f6[2];
  virtual  ~S3448C3(); // _ZN7S3448C3D1Ev
  virtual void  v9(); // _ZN7S3448C32v9Ev
  virtual void  v10(); // _ZN7S3448C33v10Ev
  virtual void  v11(); // _ZN7S3448C33v11Ev
  virtual void  v12(); // _ZN7S3448C33v12Ev
  virtual void  v13(); // _ZN7S3448C33v13Ev
  virtual void  v14(); // _ZN7S3448C33v14Ev
  virtual void  v15(); // _ZN7S3448C33v15Ev
  virtual void  v16(); // _ZN7S3448C33v16Ev
  virtual void  v17(); // _ZN7S3448C33v17Ev
  virtual void  v18(); // _ZN7S3448C33v18Ev
  virtual void  v19(); // _ZN7S3448C33v19Ev
  virtual void  v20(); // _ZN7S3448C33v20Ev
  virtual void  v21(); // _ZN7S3448C33v21Ev
  virtual void  v22(); // _ZN7S3448C33v22Ev
  virtual void  v23(); // _ZN7S3448C33v23Ev
  virtual void  v24(); // _ZN7S3448C33v24Ev
  virtual void  v25(); // _ZN7S3448C33v25Ev
  virtual void  v26(); // _ZN7S3448C33v26Ev
  virtual void  v27(); // _ZN7S3448C33v27Ev
  virtual void  v28(); // _ZN7S3448C33v28Ev
  virtual void  v29(); // _ZN7S3448C33v29Ev
  virtual void  v30(); // _ZN7S3448C33v30Ev
  virtual void  v31(); // _ZN7S3448C33v31Ev
  virtual void  v32(); // _ZN7S3448C33v32Ev
  virtual void  v33(); // _ZN7S3448C33v33Ev
  virtual void  v34(); // _ZN7S3448C33v34Ev
  virtual void  v35(); // _ZN7S3448C33v35Ev
  virtual void  v36(); // _ZN7S3448C33v36Ev
  virtual void  v37(); // _ZN7S3448C33v37Ev
  virtual void  v38(); // _ZN7S3448C33v38Ev
  virtual void  v39(); // _ZN7S3448C33v39Ev
  virtual void  v40(); // _ZN7S3448C33v40Ev
  virtual void  v41(); // _ZN7S3448C33v41Ev
  virtual void  v42(); // _ZN7S3448C33v42Ev
  virtual void  v43(); // _ZN7S3448C33v43Ev
  virtual void  v44(); // _ZN7S3448C33v44Ev
  virtual void  v45(); // _ZN7S3448C33v45Ev
  virtual void  v46(); // _ZN7S3448C33v46Ev
  virtual void  v47(); // _ZN7S3448C33v47Ev
  virtual void  v48(); // _ZN7S3448C33v48Ev
  virtual void  v49(); // _ZN7S3448C33v49Ev
  virtual void  v50(); // _ZN7S3448C33v50Ev
  virtual void  v51(); // _ZN7S3448C33v51Ev
  virtual void  v52(); // _ZN7S3448C33v52Ev
  virtual void  v53(); // _ZN7S3448C33v53Ev
  virtual void  v54(); // _ZN7S3448C33v54Ev
  virtual void  v55(); // _ZN7S3448C33v55Ev
  virtual void  v56(); // _ZN7S3448C33v56Ev
  virtual void  v57(); // _ZN7S3448C33v57Ev
  virtual void  v58(); // _ZN7S3448C33v58Ev
  virtual void  v59(); // _ZN7S3448C33v59Ev
  virtual void  v60(); // _ZN7S3448C33v60Ev
  virtual void  v61(); // _ZN7S3448C33v61Ev
  virtual void  v62(); // _ZN7S3448C33v62Ev
  virtual void  v63(); // _ZN7S3448C33v63Ev
  virtual void  v64(); // _ZN7S3448C33v64Ev
  virtual void  v65(); // _ZN7S3448C33v65Ev
  virtual void  v66(); // _ZN7S3448C33v66Ev
  virtual void  v67(); // _ZN7S3448C33v67Ev
  virtual void  v68(); // _ZN7S3448C33v68Ev
  virtual void  v69(); // _ZN7S3448C33v69Ev
  virtual void  v70(); // _ZN7S3448C33v70Ev
  virtual void  v71(); // _ZN7S3448C33v71Ev
  virtual void  v72(); // _ZN7S3448C33v72Ev
  S3448C3(); // tgen
};
//SIG(-1 S3448C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3448C3 ::~S3448C3(){ note_dtor("S3448C3", this);}
void  S3448C3 ::v9(){vfunc_called(this, "_ZN7S3448C32v9Ev");}
void  S3448C3 ::v10(){vfunc_called(this, "_ZN7S3448C33v10Ev");}
void  S3448C3 ::v11(){vfunc_called(this, "_ZN7S3448C33v11Ev");}
void  S3448C3 ::v12(){vfunc_called(this, "_ZN7S3448C33v12Ev");}
void  S3448C3 ::v13(){vfunc_called(this, "_ZN7S3448C33v13Ev");}
void  S3448C3 ::v14(){vfunc_called(this, "_ZN7S3448C33v14Ev");}
void  S3448C3 ::v15(){vfunc_called(this, "_ZN7S3448C33v15Ev");}
void  S3448C3 ::v16(){vfunc_called(this, "_ZN7S3448C33v16Ev");}
void  S3448C3 ::v17(){vfunc_called(this, "_ZN7S3448C33v17Ev");}
void  S3448C3 ::v18(){vfunc_called(this, "_ZN7S3448C33v18Ev");}
void  S3448C3 ::v19(){vfunc_called(this, "_ZN7S3448C33v19Ev");}
void  S3448C3 ::v20(){vfunc_called(this, "_ZN7S3448C33v20Ev");}
void  S3448C3 ::v21(){vfunc_called(this, "_ZN7S3448C33v21Ev");}
void  S3448C3 ::v22(){vfunc_called(this, "_ZN7S3448C33v22Ev");}
void  S3448C3 ::v23(){vfunc_called(this, "_ZN7S3448C33v23Ev");}
void  S3448C3 ::v24(){vfunc_called(this, "_ZN7S3448C33v24Ev");}
void  S3448C3 ::v25(){vfunc_called(this, "_ZN7S3448C33v25Ev");}
void  S3448C3 ::v26(){vfunc_called(this, "_ZN7S3448C33v26Ev");}
void  S3448C3 ::v27(){vfunc_called(this, "_ZN7S3448C33v27Ev");}
void  S3448C3 ::v28(){vfunc_called(this, "_ZN7S3448C33v28Ev");}
void  S3448C3 ::v29(){vfunc_called(this, "_ZN7S3448C33v29Ev");}
void  S3448C3 ::v30(){vfunc_called(this, "_ZN7S3448C33v30Ev");}
void  S3448C3 ::v31(){vfunc_called(this, "_ZN7S3448C33v31Ev");}
void  S3448C3 ::v32(){vfunc_called(this, "_ZN7S3448C33v32Ev");}
void  S3448C3 ::v33(){vfunc_called(this, "_ZN7S3448C33v33Ev");}
void  S3448C3 ::v34(){vfunc_called(this, "_ZN7S3448C33v34Ev");}
void  S3448C3 ::v35(){vfunc_called(this, "_ZN7S3448C33v35Ev");}
void  S3448C3 ::v36(){vfunc_called(this, "_ZN7S3448C33v36Ev");}
void  S3448C3 ::v37(){vfunc_called(this, "_ZN7S3448C33v37Ev");}
void  S3448C3 ::v38(){vfunc_called(this, "_ZN7S3448C33v38Ev");}
void  S3448C3 ::v39(){vfunc_called(this, "_ZN7S3448C33v39Ev");}
void  S3448C3 ::v40(){vfunc_called(this, "_ZN7S3448C33v40Ev");}
void  S3448C3 ::v41(){vfunc_called(this, "_ZN7S3448C33v41Ev");}
void  S3448C3 ::v42(){vfunc_called(this, "_ZN7S3448C33v42Ev");}
void  S3448C3 ::v43(){vfunc_called(this, "_ZN7S3448C33v43Ev");}
void  S3448C3 ::v44(){vfunc_called(this, "_ZN7S3448C33v44Ev");}
void  S3448C3 ::v45(){vfunc_called(this, "_ZN7S3448C33v45Ev");}
void  S3448C3 ::v46(){vfunc_called(this, "_ZN7S3448C33v46Ev");}
void  S3448C3 ::v47(){vfunc_called(this, "_ZN7S3448C33v47Ev");}
void  S3448C3 ::v48(){vfunc_called(this, "_ZN7S3448C33v48Ev");}
void  S3448C3 ::v49(){vfunc_called(this, "_ZN7S3448C33v49Ev");}
void  S3448C3 ::v50(){vfunc_called(this, "_ZN7S3448C33v50Ev");}
void  S3448C3 ::v51(){vfunc_called(this, "_ZN7S3448C33v51Ev");}
void  S3448C3 ::v52(){vfunc_called(this, "_ZN7S3448C33v52Ev");}
void  S3448C3 ::v53(){vfunc_called(this, "_ZN7S3448C33v53Ev");}
void  S3448C3 ::v54(){vfunc_called(this, "_ZN7S3448C33v54Ev");}
void  S3448C3 ::v55(){vfunc_called(this, "_ZN7S3448C33v55Ev");}
void  S3448C3 ::v56(){vfunc_called(this, "_ZN7S3448C33v56Ev");}
void  S3448C3 ::v57(){vfunc_called(this, "_ZN7S3448C33v57Ev");}
void  S3448C3 ::v58(){vfunc_called(this, "_ZN7S3448C33v58Ev");}
void  S3448C3 ::v59(){vfunc_called(this, "_ZN7S3448C33v59Ev");}
void  S3448C3 ::v60(){vfunc_called(this, "_ZN7S3448C33v60Ev");}
void  S3448C3 ::v61(){vfunc_called(this, "_ZN7S3448C33v61Ev");}
void  S3448C3 ::v62(){vfunc_called(this, "_ZN7S3448C33v62Ev");}
void  S3448C3 ::v63(){vfunc_called(this, "_ZN7S3448C33v63Ev");}
void  S3448C3 ::v64(){vfunc_called(this, "_ZN7S3448C33v64Ev");}
void  S3448C3 ::v65(){vfunc_called(this, "_ZN7S3448C33v65Ev");}
void  S3448C3 ::v66(){vfunc_called(this, "_ZN7S3448C33v66Ev");}
void  S3448C3 ::v67(){vfunc_called(this, "_ZN7S3448C33v67Ev");}
void  S3448C3 ::v68(){vfunc_called(this, "_ZN7S3448C33v68Ev");}
void  S3448C3 ::v69(){vfunc_called(this, "_ZN7S3448C33v69Ev");}
void  S3448C3 ::v70(){vfunc_called(this, "_ZN7S3448C33v70Ev");}
void  S3448C3 ::v71(){vfunc_called(this, "_ZN7S3448C33v71Ev");}
void  S3448C3 ::v72(){vfunc_called(this, "_ZN7S3448C33v72Ev");}
S3448C3 ::S3448C3(){ note_ctor("S3448C3", this);} // tgen

static void Test_S3448C3()
{
  extern Class_Descriptor cd_S3448C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3448C3, buf);
    S3448C3 *dp, &lv = *(dp=new (buf) S3448C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3448C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3448C3)");
    check_field_offset(lv, s3448c3f0, ABISELECT(8,4), "S3448C3.s3448c3f0");
    check_field_offset(lv, s3448c3f1, ABISELECT(16,8), "S3448C3.s3448c3f1");
    check_field_offset(lv, s3448c3f2, ABISELECT(24,16), "S3448C3.s3448c3f2");
    check_field_offset(lv, s3448c3f3, ABISELECT(56,32), "S3448C3.s3448c3f3");
    check_field_offset(lv, s3448c3f4, ABISELECT(64,40), "S3448C3.s3448c3f4");
    check_field_offset(lv, s3448c3f5, ABISELECT(72,44), "S3448C3.s3448c3f5");
    check_field_offset(lv, s3448c3f6, ABISELECT(80,52), "S3448C3.s3448c3f6");
    test_class_info(&lv, &cd_S3448C3);
    dp->~S3448C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3448C3(Test_S3448C3, "S3448C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3448C3C1Ev();
extern void _ZN7S3448C3D1Ev();
Name_Map name_map_S3448C3[] = {
  NSPAIR(_ZN7S3448C3C1Ev),
  NSPAIR(_ZN7S3448C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3448C3[];
extern void _ZN7S3448C3D1Ev();
extern void _ZN7S3448C3D0Ev();
extern void _ZN7S3448C32v9Ev();
extern void _ZN7S3448C33v10Ev();
extern void _ZN7S3448C33v11Ev();
extern void _ZN7S3448C33v12Ev();
extern void _ZN7S3448C33v13Ev();
extern void _ZN7S3448C33v14Ev();
extern void _ZN7S3448C33v15Ev();
extern void _ZN7S3448C33v16Ev();
extern void _ZN7S3448C33v17Ev();
extern void _ZN7S3448C33v18Ev();
extern void _ZN7S3448C33v19Ev();
extern void _ZN7S3448C33v20Ev();
extern void _ZN7S3448C33v21Ev();
extern void _ZN7S3448C33v22Ev();
extern void _ZN7S3448C33v23Ev();
extern void _ZN7S3448C33v24Ev();
extern void _ZN7S3448C33v25Ev();
extern void _ZN7S3448C33v26Ev();
extern void _ZN7S3448C33v27Ev();
extern void _ZN7S3448C33v28Ev();
extern void _ZN7S3448C33v29Ev();
extern void _ZN7S3448C33v30Ev();
extern void _ZN7S3448C33v31Ev();
extern void _ZN7S3448C33v32Ev();
extern void _ZN7S3448C33v33Ev();
extern void _ZN7S3448C33v34Ev();
extern void _ZN7S3448C33v35Ev();
extern void _ZN7S3448C33v36Ev();
extern void _ZN7S3448C33v37Ev();
extern void _ZN7S3448C33v38Ev();
extern void _ZN7S3448C33v39Ev();
extern void _ZN7S3448C33v40Ev();
extern void _ZN7S3448C33v41Ev();
extern void _ZN7S3448C33v42Ev();
extern void _ZN7S3448C33v43Ev();
extern void _ZN7S3448C33v44Ev();
extern void _ZN7S3448C33v45Ev();
extern void _ZN7S3448C33v46Ev();
extern void _ZN7S3448C33v47Ev();
extern void _ZN7S3448C33v48Ev();
extern void _ZN7S3448C33v49Ev();
extern void _ZN7S3448C33v50Ev();
extern void _ZN7S3448C33v51Ev();
extern void _ZN7S3448C33v52Ev();
extern void _ZN7S3448C33v53Ev();
extern void _ZN7S3448C33v54Ev();
extern void _ZN7S3448C33v55Ev();
extern void _ZN7S3448C33v56Ev();
extern void _ZN7S3448C33v57Ev();
extern void _ZN7S3448C33v58Ev();
extern void _ZN7S3448C33v59Ev();
extern void _ZN7S3448C33v60Ev();
extern void _ZN7S3448C33v61Ev();
extern void _ZN7S3448C33v62Ev();
extern void _ZN7S3448C33v63Ev();
extern void _ZN7S3448C33v64Ev();
extern void _ZN7S3448C33v65Ev();
extern void _ZN7S3448C33v66Ev();
extern void _ZN7S3448C33v67Ev();
extern void _ZN7S3448C33v68Ev();
extern void _ZN7S3448C33v69Ev();
extern void _ZN7S3448C33v70Ev();
extern void _ZN7S3448C33v71Ev();
extern void _ZN7S3448C33v72Ev();
static  VTBL_ENTRY vtc_S3448C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3448C3[0]),
  (VTBL_ENTRY)&_ZN7S3448C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3448C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3448C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v72Ev,
};
extern VTBL_ENTRY _ZTI7S3448C3[];
extern  VTBL_ENTRY _ZTV7S3448C3[];
Class_Descriptor cd_S3448C3 = {  "S3448C3", // class name
  0,0,//no base classes
  &(vtc_S3448C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3448C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3448C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3448C2  : S3448C3 {
  int s3448c2f0;
  ::S1409C30 s3448c2f1;
  virtual  ~S3448C2(); // _ZN7S3448C2D1Ev
  virtual void  v73(); // _ZN7S3448C23v73Ev
  virtual void  v74(); // _ZN7S3448C23v74Ev
  virtual void  v75(); // _ZN7S3448C23v75Ev
  virtual void  v76(); // _ZN7S3448C23v76Ev
  virtual void  v77(); // _ZN7S3448C23v77Ev
  virtual void  v78(); // _ZN7S3448C23v78Ev
  virtual void  v79(); // _ZN7S3448C23v79Ev
  virtual void  v80(); // _ZN7S3448C23v80Ev
  virtual void  v81(); // _ZN7S3448C23v81Ev
  virtual void  v82(); // _ZN7S3448C23v82Ev
  virtual void  v83(); // _ZN7S3448C23v83Ev
  virtual void  v84(); // _ZN7S3448C23v84Ev
  virtual void  v85(); // _ZN7S3448C23v85Ev
  virtual void  v86(); // _ZN7S3448C23v86Ev
  virtual void  v87(); // _ZN7S3448C23v87Ev
  virtual void  v88(); // _ZN7S3448C23v88Ev
  virtual void  v89(); // _ZN7S3448C23v89Ev
  virtual void  v90(); // _ZN7S3448C23v90Ev
  S3448C2(); // tgen
};
//SIG(-1 S3448C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3448C2 ::~S3448C2(){ note_dtor("S3448C2", this);}
void  S3448C2 ::v73(){vfunc_called(this, "_ZN7S3448C23v73Ev");}
void  S3448C2 ::v74(){vfunc_called(this, "_ZN7S3448C23v74Ev");}
void  S3448C2 ::v75(){vfunc_called(this, "_ZN7S3448C23v75Ev");}
void  S3448C2 ::v76(){vfunc_called(this, "_ZN7S3448C23v76Ev");}
void  S3448C2 ::v77(){vfunc_called(this, "_ZN7S3448C23v77Ev");}
void  S3448C2 ::v78(){vfunc_called(this, "_ZN7S3448C23v78Ev");}
void  S3448C2 ::v79(){vfunc_called(this, "_ZN7S3448C23v79Ev");}
void  S3448C2 ::v80(){vfunc_called(this, "_ZN7S3448C23v80Ev");}
void  S3448C2 ::v81(){vfunc_called(this, "_ZN7S3448C23v81Ev");}
void  S3448C2 ::v82(){vfunc_called(this, "_ZN7S3448C23v82Ev");}
void  S3448C2 ::v83(){vfunc_called(this, "_ZN7S3448C23v83Ev");}
void  S3448C2 ::v84(){vfunc_called(this, "_ZN7S3448C23v84Ev");}
void  S3448C2 ::v85(){vfunc_called(this, "_ZN7S3448C23v85Ev");}
void  S3448C2 ::v86(){vfunc_called(this, "_ZN7S3448C23v86Ev");}
void  S3448C2 ::v87(){vfunc_called(this, "_ZN7S3448C23v87Ev");}
void  S3448C2 ::v88(){vfunc_called(this, "_ZN7S3448C23v88Ev");}
void  S3448C2 ::v89(){vfunc_called(this, "_ZN7S3448C23v89Ev");}
void  S3448C2 ::v90(){vfunc_called(this, "_ZN7S3448C23v90Ev");}
S3448C2 ::S3448C2(){ note_ctor("S3448C2", this);} // tgen

static void Test_S3448C2()
{
  extern Class_Descriptor cd_S3448C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3448C2, buf);
    S3448C2 *dp, &lv = *(dp=new (buf) S3448C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3448C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3448C2)");
    check_base_class_offset(lv, (S3448C3*), 0, "S3448C2");
    check_field_offset(lv, s3448c2f0, ABISELECT(96,60), "S3448C2.s3448c2f0");
    check_field_offset(lv, s3448c2f1, ABISELECT(104,64), "S3448C2.s3448c2f1");
    test_class_info(&lv, &cd_S3448C2);
    dp->~S3448C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3448C2(Test_S3448C2, "S3448C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3448C2C1Ev();
extern void _ZN7S3448C2D1Ev();
Name_Map name_map_S3448C2[] = {
  NSPAIR(_ZN7S3448C2C1Ev),
  NSPAIR(_ZN7S3448C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3448C3;
extern VTBL_ENTRY _ZTI7S3448C3[];
extern  VTBL_ENTRY _ZTV7S3448C3[];
static Base_Class bases_S3448C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3448C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3448C2[];
extern void _ZN7S3448C2D1Ev();
extern void _ZN7S3448C2D0Ev();
extern void _ZN7S3448C32v9Ev();
extern void _ZN7S3448C33v10Ev();
extern void _ZN7S3448C33v11Ev();
extern void _ZN7S3448C33v12Ev();
extern void _ZN7S3448C33v13Ev();
extern void _ZN7S3448C33v14Ev();
extern void _ZN7S3448C33v15Ev();
extern void _ZN7S3448C33v16Ev();
extern void _ZN7S3448C33v17Ev();
extern void _ZN7S3448C33v18Ev();
extern void _ZN7S3448C33v19Ev();
extern void _ZN7S3448C33v20Ev();
extern void _ZN7S3448C33v21Ev();
extern void _ZN7S3448C33v22Ev();
extern void _ZN7S3448C33v23Ev();
extern void _ZN7S3448C33v24Ev();
extern void _ZN7S3448C33v25Ev();
extern void _ZN7S3448C33v26Ev();
extern void _ZN7S3448C33v27Ev();
extern void _ZN7S3448C33v28Ev();
extern void _ZN7S3448C33v29Ev();
extern void _ZN7S3448C33v30Ev();
extern void _ZN7S3448C33v31Ev();
extern void _ZN7S3448C33v32Ev();
extern void _ZN7S3448C33v33Ev();
extern void _ZN7S3448C33v34Ev();
extern void _ZN7S3448C33v35Ev();
extern void _ZN7S3448C33v36Ev();
extern void _ZN7S3448C33v37Ev();
extern void _ZN7S3448C33v38Ev();
extern void _ZN7S3448C33v39Ev();
extern void _ZN7S3448C33v40Ev();
extern void _ZN7S3448C33v41Ev();
extern void _ZN7S3448C33v42Ev();
extern void _ZN7S3448C33v43Ev();
extern void _ZN7S3448C33v44Ev();
extern void _ZN7S3448C33v45Ev();
extern void _ZN7S3448C33v46Ev();
extern void _ZN7S3448C33v47Ev();
extern void _ZN7S3448C33v48Ev();
extern void _ZN7S3448C33v49Ev();
extern void _ZN7S3448C33v50Ev();
extern void _ZN7S3448C33v51Ev();
extern void _ZN7S3448C33v52Ev();
extern void _ZN7S3448C33v53Ev();
extern void _ZN7S3448C33v54Ev();
extern void _ZN7S3448C33v55Ev();
extern void _ZN7S3448C33v56Ev();
extern void _ZN7S3448C33v57Ev();
extern void _ZN7S3448C33v58Ev();
extern void _ZN7S3448C33v59Ev();
extern void _ZN7S3448C33v60Ev();
extern void _ZN7S3448C33v61Ev();
extern void _ZN7S3448C33v62Ev();
extern void _ZN7S3448C33v63Ev();
extern void _ZN7S3448C33v64Ev();
extern void _ZN7S3448C33v65Ev();
extern void _ZN7S3448C33v66Ev();
extern void _ZN7S3448C33v67Ev();
extern void _ZN7S3448C33v68Ev();
extern void _ZN7S3448C33v69Ev();
extern void _ZN7S3448C33v70Ev();
extern void _ZN7S3448C33v71Ev();
extern void _ZN7S3448C33v72Ev();
extern void _ZN7S3448C23v73Ev();
extern void _ZN7S3448C23v74Ev();
extern void _ZN7S3448C23v75Ev();
extern void _ZN7S3448C23v76Ev();
extern void _ZN7S3448C23v77Ev();
extern void _ZN7S3448C23v78Ev();
extern void _ZN7S3448C23v79Ev();
extern void _ZN7S3448C23v80Ev();
extern void _ZN7S3448C23v81Ev();
extern void _ZN7S3448C23v82Ev();
extern void _ZN7S3448C23v83Ev();
extern void _ZN7S3448C23v84Ev();
extern void _ZN7S3448C23v85Ev();
extern void _ZN7S3448C23v86Ev();
extern void _ZN7S3448C23v87Ev();
extern void _ZN7S3448C23v88Ev();
extern void _ZN7S3448C23v89Ev();
extern void _ZN7S3448C23v90Ev();
static  VTBL_ENTRY vtc_S3448C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3448C2[0]),
  (VTBL_ENTRY)&_ZN7S3448C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3448C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3448C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v90Ev,
};
extern VTBL_ENTRY _ZTI7S3448C2[];
extern  VTBL_ENTRY _ZTV7S3448C2[];
Class_Descriptor cd_S3448C2 = {  "S3448C2", // class name
  bases_S3448C2, 1,
  &(vtc_S3448C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3448C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3448C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3448C1  : S3448C2 {
  ::S1409C26 s3448c1f0;
  unsigned int s3448c1f1:1;
  ::S1409C22 s3448c1f2;
  int s3448c1f3;
  virtual  ~S3448C1(); // _ZN7S3448C1D1Ev
  virtual void  v1(); // _ZN7S3448C12v1Ev
  virtual void  v2(); // _ZN7S3448C12v2Ev
  virtual void  v3(); // _ZN7S3448C12v3Ev
  virtual void  v4(); // _ZN7S3448C12v4Ev
  virtual void  v5(); // _ZN7S3448C12v5Ev
  virtual void  v6(); // _ZN7S3448C12v6Ev
  virtual void  v7(); // _ZN7S3448C12v7Ev
  virtual void  v8(); // _ZN7S3448C12v8Ev
  S3448C1(); // tgen
};
//SIG(1 S3448C1) C1{ BC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 FC8{ BC9{ BC7}} Fi:1 FC10{ BC11{ BC7}} Fi}


 S3448C1 ::~S3448C1(){ note_dtor("S3448C1", this);}
void  S3448C1 ::v1(){vfunc_called(this, "_ZN7S3448C12v1Ev");}
void  S3448C1 ::v2(){vfunc_called(this, "_ZN7S3448C12v2Ev");}
void  S3448C1 ::v3(){vfunc_called(this, "_ZN7S3448C12v3Ev");}
void  S3448C1 ::v4(){vfunc_called(this, "_ZN7S3448C12v4Ev");}
void  S3448C1 ::v5(){vfunc_called(this, "_ZN7S3448C12v5Ev");}
void  S3448C1 ::v6(){vfunc_called(this, "_ZN7S3448C12v6Ev");}
void  S3448C1 ::v7(){vfunc_called(this, "_ZN7S3448C12v7Ev");}
void  S3448C1 ::v8(){vfunc_called(this, "_ZN7S3448C12v8Ev");}
S3448C1 ::S3448C1(){ note_ctor("S3448C1", this);} // tgen

static void Test_S3448C1()
{
  extern Class_Descriptor cd_S3448C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S3448C1, buf);
    S3448C1 *dp, &lv = *(dp=new (buf) S3448C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S3448C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3448C1)");
    check_base_class_offset(lv, (S3448C3*)(S3448C2*), 0, "S3448C1");
    check_base_class_offset(lv, (S3448C2*), 0, "S3448C1");
    check_field_offset(lv, s3448c1f0, ABISELECT(120,76), "S3448C1.s3448c1f0");
    set_bf_and_test(lv, s3448c1f1, ABISELECT(136,88), 0, 1, 1, "S3448C1");
    check_field_offset(lv, s3448c1f2, ABISELECT(144,92), "S3448C1.s3448c1f2");
    check_field_offset(lv, s3448c1f3, ABISELECT(160,104), "S3448C1.s3448c1f3");
    test_class_info(&lv, &cd_S3448C1);
    dp->~S3448C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3448C1(Test_S3448C1, "S3448C1", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN7S3448C1C1Ev();
extern void _ZN7S3448C1D1Ev();
Name_Map name_map_S3448C1[] = {
  NSPAIR(_ZN7S3448C1C1Ev),
  NSPAIR(_ZN7S3448C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3448C3;
extern VTBL_ENTRY _ZTI7S3448C3[];
extern  VTBL_ENTRY _ZTV7S3448C3[];
extern Class_Descriptor cd_S3448C2;
extern VTBL_ENTRY _ZTI7S3448C2[];
extern  VTBL_ENTRY _ZTV7S3448C2[];
static Base_Class bases_S3448C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3448C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3448C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3448C1[];
extern void _ZN7S3448C1D1Ev();
extern void _ZN7S3448C1D0Ev();
extern void _ZN7S3448C32v9Ev();
extern void _ZN7S3448C33v10Ev();
extern void _ZN7S3448C33v11Ev();
extern void _ZN7S3448C33v12Ev();
extern void _ZN7S3448C33v13Ev();
extern void _ZN7S3448C33v14Ev();
extern void _ZN7S3448C33v15Ev();
extern void _ZN7S3448C33v16Ev();
extern void _ZN7S3448C33v17Ev();
extern void _ZN7S3448C33v18Ev();
extern void _ZN7S3448C33v19Ev();
extern void _ZN7S3448C33v20Ev();
extern void _ZN7S3448C33v21Ev();
extern void _ZN7S3448C33v22Ev();
extern void _ZN7S3448C33v23Ev();
extern void _ZN7S3448C33v24Ev();
extern void _ZN7S3448C33v25Ev();
extern void _ZN7S3448C33v26Ev();
extern void _ZN7S3448C33v27Ev();
extern void _ZN7S3448C33v28Ev();
extern void _ZN7S3448C33v29Ev();
extern void _ZN7S3448C33v30Ev();
extern void _ZN7S3448C33v31Ev();
extern void _ZN7S3448C33v32Ev();
extern void _ZN7S3448C33v33Ev();
extern void _ZN7S3448C33v34Ev();
extern void _ZN7S3448C33v35Ev();
extern void _ZN7S3448C33v36Ev();
extern void _ZN7S3448C33v37Ev();
extern void _ZN7S3448C33v38Ev();
extern void _ZN7S3448C33v39Ev();
extern void _ZN7S3448C33v40Ev();
extern void _ZN7S3448C33v41Ev();
extern void _ZN7S3448C33v42Ev();
extern void _ZN7S3448C33v43Ev();
extern void _ZN7S3448C33v44Ev();
extern void _ZN7S3448C33v45Ev();
extern void _ZN7S3448C33v46Ev();
extern void _ZN7S3448C33v47Ev();
extern void _ZN7S3448C33v48Ev();
extern void _ZN7S3448C33v49Ev();
extern void _ZN7S3448C33v50Ev();
extern void _ZN7S3448C33v51Ev();
extern void _ZN7S3448C33v52Ev();
extern void _ZN7S3448C33v53Ev();
extern void _ZN7S3448C33v54Ev();
extern void _ZN7S3448C33v55Ev();
extern void _ZN7S3448C33v56Ev();
extern void _ZN7S3448C33v57Ev();
extern void _ZN7S3448C33v58Ev();
extern void _ZN7S3448C33v59Ev();
extern void _ZN7S3448C33v60Ev();
extern void _ZN7S3448C33v61Ev();
extern void _ZN7S3448C33v62Ev();
extern void _ZN7S3448C33v63Ev();
extern void _ZN7S3448C33v64Ev();
extern void _ZN7S3448C33v65Ev();
extern void _ZN7S3448C33v66Ev();
extern void _ZN7S3448C33v67Ev();
extern void _ZN7S3448C33v68Ev();
extern void _ZN7S3448C33v69Ev();
extern void _ZN7S3448C33v70Ev();
extern void _ZN7S3448C33v71Ev();
extern void _ZN7S3448C33v72Ev();
extern void _ZN7S3448C23v73Ev();
extern void _ZN7S3448C23v74Ev();
extern void _ZN7S3448C23v75Ev();
extern void _ZN7S3448C23v76Ev();
extern void _ZN7S3448C23v77Ev();
extern void _ZN7S3448C23v78Ev();
extern void _ZN7S3448C23v79Ev();
extern void _ZN7S3448C23v80Ev();
extern void _ZN7S3448C23v81Ev();
extern void _ZN7S3448C23v82Ev();
extern void _ZN7S3448C23v83Ev();
extern void _ZN7S3448C23v84Ev();
extern void _ZN7S3448C23v85Ev();
extern void _ZN7S3448C23v86Ev();
extern void _ZN7S3448C23v87Ev();
extern void _ZN7S3448C23v88Ev();
extern void _ZN7S3448C23v89Ev();
extern void _ZN7S3448C23v90Ev();
extern void _ZN7S3448C12v1Ev();
extern void _ZN7S3448C12v2Ev();
extern void _ZN7S3448C12v3Ev();
extern void _ZN7S3448C12v4Ev();
extern void _ZN7S3448C12v5Ev();
extern void _ZN7S3448C12v6Ev();
extern void _ZN7S3448C12v7Ev();
extern void _ZN7S3448C12v8Ev();
static  VTBL_ENTRY vtc_S3448C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3448C1[0]),
  (VTBL_ENTRY)&_ZN7S3448C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3448C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3448C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3448C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3448C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3448C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3448C1[];
extern  VTBL_ENTRY _ZTV7S3448C1[];
Class_Descriptor cd_S3448C1 = {  "S3448C1", // class name
  bases_S3448C1, 2,
  &(vtc_S3448C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI7S3448C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3448C1),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3021C3  {
  int s3021c3f0;
  __tsi64 s3021c3f1;
  void *s3021c3f2[4];
  int s3021c3f3[2];
  void *s3021c3f4;
  ::S1409C5_nt s3021c3f5;
  void *s3021c3f6[2];
  virtual  ~S3021C3(); // _ZN7S3021C3D1Ev
  virtual void  v12(); // _ZN7S3021C33v12Ev
  virtual void  v13(); // _ZN7S3021C33v13Ev
  virtual void  v14(); // _ZN7S3021C33v14Ev
  virtual void  v15(); // _ZN7S3021C33v15Ev
  virtual void  v16(); // _ZN7S3021C33v16Ev
  virtual void  v17(); // _ZN7S3021C33v17Ev
  virtual void  v18(); // _ZN7S3021C33v18Ev
  virtual void  v19(); // _ZN7S3021C33v19Ev
  virtual void  v20(); // _ZN7S3021C33v20Ev
  virtual void  v21(); // _ZN7S3021C33v21Ev
  virtual void  v22(); // _ZN7S3021C33v22Ev
  virtual void  v23(); // _ZN7S3021C33v23Ev
  virtual void  v24(); // _ZN7S3021C33v24Ev
  virtual void  v25(); // _ZN7S3021C33v25Ev
  virtual void  v26(); // _ZN7S3021C33v26Ev
  virtual void  v27(); // _ZN7S3021C33v27Ev
  virtual void  v28(); // _ZN7S3021C33v28Ev
  virtual void  v29(); // _ZN7S3021C33v29Ev
  virtual void  v30(); // _ZN7S3021C33v30Ev
  virtual void  v31(); // _ZN7S3021C33v31Ev
  virtual void  v32(); // _ZN7S3021C33v32Ev
  virtual void  v33(); // _ZN7S3021C33v33Ev
  virtual void  v34(); // _ZN7S3021C33v34Ev
  virtual void  v35(); // _ZN7S3021C33v35Ev
  virtual void  v36(); // _ZN7S3021C33v36Ev
  virtual void  v37(); // _ZN7S3021C33v37Ev
  virtual void  v38(); // _ZN7S3021C33v38Ev
  virtual void  v39(); // _ZN7S3021C33v39Ev
  virtual void  v40(); // _ZN7S3021C33v40Ev
  virtual void  v41(); // _ZN7S3021C33v41Ev
  virtual void  v42(); // _ZN7S3021C33v42Ev
  virtual void  v43(); // _ZN7S3021C33v43Ev
  virtual void  v44(); // _ZN7S3021C33v44Ev
  virtual void  v45(); // _ZN7S3021C33v45Ev
  virtual void  v46(); // _ZN7S3021C33v46Ev
  virtual void  v47(); // _ZN7S3021C33v47Ev
  virtual void  v48(); // _ZN7S3021C33v48Ev
  virtual void  v49(); // _ZN7S3021C33v49Ev
  virtual void  v50(); // _ZN7S3021C33v50Ev
  virtual void  v51(); // _ZN7S3021C33v51Ev
  virtual void  v52(); // _ZN7S3021C33v52Ev
  virtual void  v53(); // _ZN7S3021C33v53Ev
  virtual void  v54(); // _ZN7S3021C33v54Ev
  virtual void  v55(); // _ZN7S3021C33v55Ev
  virtual void  v56(); // _ZN7S3021C33v56Ev
  virtual void  v57(); // _ZN7S3021C33v57Ev
  virtual void  v58(); // _ZN7S3021C33v58Ev
  virtual void  v59(); // _ZN7S3021C33v59Ev
  virtual void  v60(); // _ZN7S3021C33v60Ev
  virtual void  v61(); // _ZN7S3021C33v61Ev
  virtual void  v62(); // _ZN7S3021C33v62Ev
  virtual void  v63(); // _ZN7S3021C33v63Ev
  virtual void  v64(); // _ZN7S3021C33v64Ev
  virtual void  v65(); // _ZN7S3021C33v65Ev
  virtual void  v66(); // _ZN7S3021C33v66Ev
  virtual void  v67(); // _ZN7S3021C33v67Ev
  virtual void  v68(); // _ZN7S3021C33v68Ev
  virtual void  v69(); // _ZN7S3021C33v69Ev
  virtual void  v70(); // _ZN7S3021C33v70Ev
  virtual void  v71(); // _ZN7S3021C33v71Ev
  virtual void  v72(); // _ZN7S3021C33v72Ev
  virtual void  v73(); // _ZN7S3021C33v73Ev
  virtual void  v74(); // _ZN7S3021C33v74Ev
  virtual void  v75(); // _ZN7S3021C33v75Ev
  S3021C3(); // tgen
};
//SIG(-1 S3021C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3021C3 ::~S3021C3(){ note_dtor("S3021C3", this);}
void  S3021C3 ::v12(){vfunc_called(this, "_ZN7S3021C33v12Ev");}
void  S3021C3 ::v13(){vfunc_called(this, "_ZN7S3021C33v13Ev");}
void  S3021C3 ::v14(){vfunc_called(this, "_ZN7S3021C33v14Ev");}
void  S3021C3 ::v15(){vfunc_called(this, "_ZN7S3021C33v15Ev");}
void  S3021C3 ::v16(){vfunc_called(this, "_ZN7S3021C33v16Ev");}
void  S3021C3 ::v17(){vfunc_called(this, "_ZN7S3021C33v17Ev");}
void  S3021C3 ::v18(){vfunc_called(this, "_ZN7S3021C33v18Ev");}
void  S3021C3 ::v19(){vfunc_called(this, "_ZN7S3021C33v19Ev");}
void  S3021C3 ::v20(){vfunc_called(this, "_ZN7S3021C33v20Ev");}
void  S3021C3 ::v21(){vfunc_called(this, "_ZN7S3021C33v21Ev");}
void  S3021C3 ::v22(){vfunc_called(this, "_ZN7S3021C33v22Ev");}
void  S3021C3 ::v23(){vfunc_called(this, "_ZN7S3021C33v23Ev");}
void  S3021C3 ::v24(){vfunc_called(this, "_ZN7S3021C33v24Ev");}
void  S3021C3 ::v25(){vfunc_called(this, "_ZN7S3021C33v25Ev");}
void  S3021C3 ::v26(){vfunc_called(this, "_ZN7S3021C33v26Ev");}
void  S3021C3 ::v27(){vfunc_called(this, "_ZN7S3021C33v27Ev");}
void  S3021C3 ::v28(){vfunc_called(this, "_ZN7S3021C33v28Ev");}
void  S3021C3 ::v29(){vfunc_called(this, "_ZN7S3021C33v29Ev");}
void  S3021C3 ::v30(){vfunc_called(this, "_ZN7S3021C33v30Ev");}
void  S3021C3 ::v31(){vfunc_called(this, "_ZN7S3021C33v31Ev");}
void  S3021C3 ::v32(){vfunc_called(this, "_ZN7S3021C33v32Ev");}
void  S3021C3 ::v33(){vfunc_called(this, "_ZN7S3021C33v33Ev");}
void  S3021C3 ::v34(){vfunc_called(this, "_ZN7S3021C33v34Ev");}
void  S3021C3 ::v35(){vfunc_called(this, "_ZN7S3021C33v35Ev");}
void  S3021C3 ::v36(){vfunc_called(this, "_ZN7S3021C33v36Ev");}
void  S3021C3 ::v37(){vfunc_called(this, "_ZN7S3021C33v37Ev");}
void  S3021C3 ::v38(){vfunc_called(this, "_ZN7S3021C33v38Ev");}
void  S3021C3 ::v39(){vfunc_called(this, "_ZN7S3021C33v39Ev");}
void  S3021C3 ::v40(){vfunc_called(this, "_ZN7S3021C33v40Ev");}
void  S3021C3 ::v41(){vfunc_called(this, "_ZN7S3021C33v41Ev");}
void  S3021C3 ::v42(){vfunc_called(this, "_ZN7S3021C33v42Ev");}
void  S3021C3 ::v43(){vfunc_called(this, "_ZN7S3021C33v43Ev");}
void  S3021C3 ::v44(){vfunc_called(this, "_ZN7S3021C33v44Ev");}
void  S3021C3 ::v45(){vfunc_called(this, "_ZN7S3021C33v45Ev");}
void  S3021C3 ::v46(){vfunc_called(this, "_ZN7S3021C33v46Ev");}
void  S3021C3 ::v47(){vfunc_called(this, "_ZN7S3021C33v47Ev");}
void  S3021C3 ::v48(){vfunc_called(this, "_ZN7S3021C33v48Ev");}
void  S3021C3 ::v49(){vfunc_called(this, "_ZN7S3021C33v49Ev");}
void  S3021C3 ::v50(){vfunc_called(this, "_ZN7S3021C33v50Ev");}
void  S3021C3 ::v51(){vfunc_called(this, "_ZN7S3021C33v51Ev");}
void  S3021C3 ::v52(){vfunc_called(this, "_ZN7S3021C33v52Ev");}
void  S3021C3 ::v53(){vfunc_called(this, "_ZN7S3021C33v53Ev");}
void  S3021C3 ::v54(){vfunc_called(this, "_ZN7S3021C33v54Ev");}
void  S3021C3 ::v55(){vfunc_called(this, "_ZN7S3021C33v55Ev");}
void  S3021C3 ::v56(){vfunc_called(this, "_ZN7S3021C33v56Ev");}
void  S3021C3 ::v57(){vfunc_called(this, "_ZN7S3021C33v57Ev");}
void  S3021C3 ::v58(){vfunc_called(this, "_ZN7S3021C33v58Ev");}
void  S3021C3 ::v59(){vfunc_called(this, "_ZN7S3021C33v59Ev");}
void  S3021C3 ::v60(){vfunc_called(this, "_ZN7S3021C33v60Ev");}
void  S3021C3 ::v61(){vfunc_called(this, "_ZN7S3021C33v61Ev");}
void  S3021C3 ::v62(){vfunc_called(this, "_ZN7S3021C33v62Ev");}
void  S3021C3 ::v63(){vfunc_called(this, "_ZN7S3021C33v63Ev");}
void  S3021C3 ::v64(){vfunc_called(this, "_ZN7S3021C33v64Ev");}
void  S3021C3 ::v65(){vfunc_called(this, "_ZN7S3021C33v65Ev");}
void  S3021C3 ::v66(){vfunc_called(this, "_ZN7S3021C33v66Ev");}
void  S3021C3 ::v67(){vfunc_called(this, "_ZN7S3021C33v67Ev");}
void  S3021C3 ::v68(){vfunc_called(this, "_ZN7S3021C33v68Ev");}
void  S3021C3 ::v69(){vfunc_called(this, "_ZN7S3021C33v69Ev");}
void  S3021C3 ::v70(){vfunc_called(this, "_ZN7S3021C33v70Ev");}
void  S3021C3 ::v71(){vfunc_called(this, "_ZN7S3021C33v71Ev");}
void  S3021C3 ::v72(){vfunc_called(this, "_ZN7S3021C33v72Ev");}
void  S3021C3 ::v73(){vfunc_called(this, "_ZN7S3021C33v73Ev");}
void  S3021C3 ::v74(){vfunc_called(this, "_ZN7S3021C33v74Ev");}
void  S3021C3 ::v75(){vfunc_called(this, "_ZN7S3021C33v75Ev");}
S3021C3 ::S3021C3(){ note_ctor("S3021C3", this);} // tgen

static void Test_S3021C3()
{
  extern Class_Descriptor cd_S3021C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3021C3, buf);
    S3021C3 *dp, &lv = *(dp=new (buf) S3021C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3021C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3021C3)");
    check_field_offset(lv, s3021c3f0, ABISELECT(8,4), "S3021C3.s3021c3f0");
    check_field_offset(lv, s3021c3f1, ABISELECT(16,8), "S3021C3.s3021c3f1");
    check_field_offset(lv, s3021c3f2, ABISELECT(24,16), "S3021C3.s3021c3f2");
    check_field_offset(lv, s3021c3f3, ABISELECT(56,32), "S3021C3.s3021c3f3");
    check_field_offset(lv, s3021c3f4, ABISELECT(64,40), "S3021C3.s3021c3f4");
    check_field_offset(lv, s3021c3f5, ABISELECT(72,44), "S3021C3.s3021c3f5");
    check_field_offset(lv, s3021c3f6, ABISELECT(80,52), "S3021C3.s3021c3f6");
    test_class_info(&lv, &cd_S3021C3);
    dp->~S3021C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3021C3(Test_S3021C3, "S3021C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3021C3C1Ev();
extern void _ZN7S3021C3D1Ev();
Name_Map name_map_S3021C3[] = {
  NSPAIR(_ZN7S3021C3C1Ev),
  NSPAIR(_ZN7S3021C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3021C3[];
extern void _ZN7S3021C3D1Ev();
extern void _ZN7S3021C3D0Ev();
extern void _ZN7S3021C33v12Ev();
extern void _ZN7S3021C33v13Ev();
extern void _ZN7S3021C33v14Ev();
extern void _ZN7S3021C33v15Ev();
extern void _ZN7S3021C33v16Ev();
extern void _ZN7S3021C33v17Ev();
extern void _ZN7S3021C33v18Ev();
extern void _ZN7S3021C33v19Ev();
extern void _ZN7S3021C33v20Ev();
extern void _ZN7S3021C33v21Ev();
extern void _ZN7S3021C33v22Ev();
extern void _ZN7S3021C33v23Ev();
extern void _ZN7S3021C33v24Ev();
extern void _ZN7S3021C33v25Ev();
extern void _ZN7S3021C33v26Ev();
extern void _ZN7S3021C33v27Ev();
extern void _ZN7S3021C33v28Ev();
extern void _ZN7S3021C33v29Ev();
extern void _ZN7S3021C33v30Ev();
extern void _ZN7S3021C33v31Ev();
extern void _ZN7S3021C33v32Ev();
extern void _ZN7S3021C33v33Ev();
extern void _ZN7S3021C33v34Ev();
extern void _ZN7S3021C33v35Ev();
extern void _ZN7S3021C33v36Ev();
extern void _ZN7S3021C33v37Ev();
extern void _ZN7S3021C33v38Ev();
extern void _ZN7S3021C33v39Ev();
extern void _ZN7S3021C33v40Ev();
extern void _ZN7S3021C33v41Ev();
extern void _ZN7S3021C33v42Ev();
extern void _ZN7S3021C33v43Ev();
extern void _ZN7S3021C33v44Ev();
extern void _ZN7S3021C33v45Ev();
extern void _ZN7S3021C33v46Ev();
extern void _ZN7S3021C33v47Ev();
extern void _ZN7S3021C33v48Ev();
extern void _ZN7S3021C33v49Ev();
extern void _ZN7S3021C33v50Ev();
extern void _ZN7S3021C33v51Ev();
extern void _ZN7S3021C33v52Ev();
extern void _ZN7S3021C33v53Ev();
extern void _ZN7S3021C33v54Ev();
extern void _ZN7S3021C33v55Ev();
extern void _ZN7S3021C33v56Ev();
extern void _ZN7S3021C33v57Ev();
extern void _ZN7S3021C33v58Ev();
extern void _ZN7S3021C33v59Ev();
extern void _ZN7S3021C33v60Ev();
extern void _ZN7S3021C33v61Ev();
extern void _ZN7S3021C33v62Ev();
extern void _ZN7S3021C33v63Ev();
extern void _ZN7S3021C33v64Ev();
extern void _ZN7S3021C33v65Ev();
extern void _ZN7S3021C33v66Ev();
extern void _ZN7S3021C33v67Ev();
extern void _ZN7S3021C33v68Ev();
extern void _ZN7S3021C33v69Ev();
extern void _ZN7S3021C33v70Ev();
extern void _ZN7S3021C33v71Ev();
extern void _ZN7S3021C33v72Ev();
extern void _ZN7S3021C33v73Ev();
extern void _ZN7S3021C33v74Ev();
extern void _ZN7S3021C33v75Ev();
static  VTBL_ENTRY vtc_S3021C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3021C3[0]),
  (VTBL_ENTRY)&_ZN7S3021C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3021C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v75Ev,
};
extern VTBL_ENTRY _ZTI7S3021C3[];
extern  VTBL_ENTRY _ZTV7S3021C3[];
Class_Descriptor cd_S3021C3 = {  "S3021C3", // class name
  0,0,//no base classes
  &(vtc_S3021C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3021C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3021C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3021C2  : S3021C3 {
  int s3021c2f0;
  ::S1409C30 s3021c2f1;
  virtual  ~S3021C2(); // _ZN7S3021C2D1Ev
  virtual void  v76(); // _ZN7S3021C23v76Ev
  virtual void  v77(); // _ZN7S3021C23v77Ev
  virtual void  v78(); // _ZN7S3021C23v78Ev
  virtual void  v79(); // _ZN7S3021C23v79Ev
  virtual void  v80(); // _ZN7S3021C23v80Ev
  virtual void  v81(); // _ZN7S3021C23v81Ev
  virtual void  v82(); // _ZN7S3021C23v82Ev
  virtual void  v83(); // _ZN7S3021C23v83Ev
  virtual void  v84(); // _ZN7S3021C23v84Ev
  virtual void  v85(); // _ZN7S3021C23v85Ev
  virtual void  v86(); // _ZN7S3021C23v86Ev
  virtual void  v87(); // _ZN7S3021C23v87Ev
  virtual void  v88(); // _ZN7S3021C23v88Ev
  virtual void  v89(); // _ZN7S3021C23v89Ev
  virtual void  v90(); // _ZN7S3021C23v90Ev
  virtual void  v91(); // _ZN7S3021C23v91Ev
  virtual void  v92(); // _ZN7S3021C23v92Ev
  virtual void  v93(); // _ZN7S3021C23v93Ev
  S3021C2(); // tgen
};
//SIG(-1 S3021C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3021C2 ::~S3021C2(){ note_dtor("S3021C2", this);}
void  S3021C2 ::v76(){vfunc_called(this, "_ZN7S3021C23v76Ev");}
void  S3021C2 ::v77(){vfunc_called(this, "_ZN7S3021C23v77Ev");}
void  S3021C2 ::v78(){vfunc_called(this, "_ZN7S3021C23v78Ev");}
void  S3021C2 ::v79(){vfunc_called(this, "_ZN7S3021C23v79Ev");}
void  S3021C2 ::v80(){vfunc_called(this, "_ZN7S3021C23v80Ev");}
void  S3021C2 ::v81(){vfunc_called(this, "_ZN7S3021C23v81Ev");}
void  S3021C2 ::v82(){vfunc_called(this, "_ZN7S3021C23v82Ev");}
void  S3021C2 ::v83(){vfunc_called(this, "_ZN7S3021C23v83Ev");}
void  S3021C2 ::v84(){vfunc_called(this, "_ZN7S3021C23v84Ev");}
void  S3021C2 ::v85(){vfunc_called(this, "_ZN7S3021C23v85Ev");}
void  S3021C2 ::v86(){vfunc_called(this, "_ZN7S3021C23v86Ev");}
void  S3021C2 ::v87(){vfunc_called(this, "_ZN7S3021C23v87Ev");}
void  S3021C2 ::v88(){vfunc_called(this, "_ZN7S3021C23v88Ev");}
void  S3021C2 ::v89(){vfunc_called(this, "_ZN7S3021C23v89Ev");}
void  S3021C2 ::v90(){vfunc_called(this, "_ZN7S3021C23v90Ev");}
void  S3021C2 ::v91(){vfunc_called(this, "_ZN7S3021C23v91Ev");}
void  S3021C2 ::v92(){vfunc_called(this, "_ZN7S3021C23v92Ev");}
void  S3021C2 ::v93(){vfunc_called(this, "_ZN7S3021C23v93Ev");}
S3021C2 ::S3021C2(){ note_ctor("S3021C2", this);} // tgen

static void Test_S3021C2()
{
  extern Class_Descriptor cd_S3021C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3021C2, buf);
    S3021C2 *dp, &lv = *(dp=new (buf) S3021C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3021C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3021C2)");
    check_base_class_offset(lv, (S3021C3*), 0, "S3021C2");
    check_field_offset(lv, s3021c2f0, ABISELECT(96,60), "S3021C2.s3021c2f0");
    check_field_offset(lv, s3021c2f1, ABISELECT(104,64), "S3021C2.s3021c2f1");
    test_class_info(&lv, &cd_S3021C2);
    dp->~S3021C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3021C2(Test_S3021C2, "S3021C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3021C2C1Ev();
extern void _ZN7S3021C2D1Ev();
Name_Map name_map_S3021C2[] = {
  NSPAIR(_ZN7S3021C2C1Ev),
  NSPAIR(_ZN7S3021C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3021C3;
extern VTBL_ENTRY _ZTI7S3021C3[];
extern  VTBL_ENTRY _ZTV7S3021C3[];
static Base_Class bases_S3021C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3021C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3021C2[];
extern void _ZN7S3021C2D1Ev();
extern void _ZN7S3021C2D0Ev();
extern void _ZN7S3021C33v12Ev();
extern void _ZN7S3021C33v13Ev();
extern void _ZN7S3021C33v14Ev();
extern void _ZN7S3021C33v15Ev();
extern void _ZN7S3021C33v16Ev();
extern void _ZN7S3021C33v17Ev();
extern void _ZN7S3021C33v18Ev();
extern void _ZN7S3021C33v19Ev();
extern void _ZN7S3021C33v20Ev();
extern void _ZN7S3021C33v21Ev();
extern void _ZN7S3021C33v22Ev();
extern void _ZN7S3021C33v23Ev();
extern void _ZN7S3021C33v24Ev();
extern void _ZN7S3021C33v25Ev();
extern void _ZN7S3021C33v26Ev();
extern void _ZN7S3021C33v27Ev();
extern void _ZN7S3021C33v28Ev();
extern void _ZN7S3021C33v29Ev();
extern void _ZN7S3021C33v30Ev();
extern void _ZN7S3021C33v31Ev();
extern void _ZN7S3021C33v32Ev();
extern void _ZN7S3021C33v33Ev();
extern void _ZN7S3021C33v34Ev();
extern void _ZN7S3021C33v35Ev();
extern void _ZN7S3021C33v36Ev();
extern void _ZN7S3021C33v37Ev();
extern void _ZN7S3021C33v38Ev();
extern void _ZN7S3021C33v39Ev();
extern void _ZN7S3021C33v40Ev();
extern void _ZN7S3021C33v41Ev();
extern void _ZN7S3021C33v42Ev();
extern void _ZN7S3021C33v43Ev();
extern void _ZN7S3021C33v44Ev();
extern void _ZN7S3021C33v45Ev();
extern void _ZN7S3021C33v46Ev();
extern void _ZN7S3021C33v47Ev();
extern void _ZN7S3021C33v48Ev();
extern void _ZN7S3021C33v49Ev();
extern void _ZN7S3021C33v50Ev();
extern void _ZN7S3021C33v51Ev();
extern void _ZN7S3021C33v52Ev();
extern void _ZN7S3021C33v53Ev();
extern void _ZN7S3021C33v54Ev();
extern void _ZN7S3021C33v55Ev();
extern void _ZN7S3021C33v56Ev();
extern void _ZN7S3021C33v57Ev();
extern void _ZN7S3021C33v58Ev();
extern void _ZN7S3021C33v59Ev();
extern void _ZN7S3021C33v60Ev();
extern void _ZN7S3021C33v61Ev();
extern void _ZN7S3021C33v62Ev();
extern void _ZN7S3021C33v63Ev();
extern void _ZN7S3021C33v64Ev();
extern void _ZN7S3021C33v65Ev();
extern void _ZN7S3021C33v66Ev();
extern void _ZN7S3021C33v67Ev();
extern void _ZN7S3021C33v68Ev();
extern void _ZN7S3021C33v69Ev();
extern void _ZN7S3021C33v70Ev();
extern void _ZN7S3021C33v71Ev();
extern void _ZN7S3021C33v72Ev();
extern void _ZN7S3021C33v73Ev();
extern void _ZN7S3021C33v74Ev();
extern void _ZN7S3021C33v75Ev();
extern void _ZN7S3021C23v76Ev();
extern void _ZN7S3021C23v77Ev();
extern void _ZN7S3021C23v78Ev();
extern void _ZN7S3021C23v79Ev();
extern void _ZN7S3021C23v80Ev();
extern void _ZN7S3021C23v81Ev();
extern void _ZN7S3021C23v82Ev();
extern void _ZN7S3021C23v83Ev();
extern void _ZN7S3021C23v84Ev();
extern void _ZN7S3021C23v85Ev();
extern void _ZN7S3021C23v86Ev();
extern void _ZN7S3021C23v87Ev();
extern void _ZN7S3021C23v88Ev();
extern void _ZN7S3021C23v89Ev();
extern void _ZN7S3021C23v90Ev();
extern void _ZN7S3021C23v91Ev();
extern void _ZN7S3021C23v92Ev();
extern void _ZN7S3021C23v93Ev();
static  VTBL_ENTRY vtc_S3021C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3021C2[0]),
  (VTBL_ENTRY)&_ZN7S3021C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3021C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v93Ev,
};
extern VTBL_ENTRY _ZTI7S3021C2[];
extern  VTBL_ENTRY _ZTV7S3021C2[];
Class_Descriptor cd_S3021C2 = {  "S3021C2", // class name
  bases_S3021C2, 1,
  &(vtc_S3021C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3021C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3021C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3021C1  : S3021C2 {
  ::S1409C26 s3021c1f0;
  virtual  ~S3021C1(); // _ZN7S3021C1D1Ev
  virtual void  v1(); // _ZN7S3021C12v1Ev
  virtual void  v2(); // _ZN7S3021C12v2Ev
  virtual void  v3(); // _ZN7S3021C12v3Ev
  virtual void  v4(); // _ZN7S3021C12v4Ev
  virtual void  v5(); // _ZN7S3021C12v5Ev
  virtual void  v6(); // _ZN7S3021C12v6Ev
  virtual void  v7(); // _ZN7S3021C12v7Ev
  virtual void  v8(); // _ZN7S3021C12v8Ev
  virtual void  v9(); // _ZN7S3021C12v9Ev
  virtual void  v10(); // _ZN7S3021C13v10Ev
  virtual void  v11(); // _ZN7S3021C13v11Ev
  S3021C1(); // tgen
};
//SIG(1 S3021C1) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC8{ BC9{ BC7}}}


 S3021C1 ::~S3021C1(){ note_dtor("S3021C1", this);}
void  S3021C1 ::v1(){vfunc_called(this, "_ZN7S3021C12v1Ev");}
void  S3021C1 ::v2(){vfunc_called(this, "_ZN7S3021C12v2Ev");}
void  S3021C1 ::v3(){vfunc_called(this, "_ZN7S3021C12v3Ev");}
void  S3021C1 ::v4(){vfunc_called(this, "_ZN7S3021C12v4Ev");}
void  S3021C1 ::v5(){vfunc_called(this, "_ZN7S3021C12v5Ev");}
void  S3021C1 ::v6(){vfunc_called(this, "_ZN7S3021C12v6Ev");}
void  S3021C1 ::v7(){vfunc_called(this, "_ZN7S3021C12v7Ev");}
void  S3021C1 ::v8(){vfunc_called(this, "_ZN7S3021C12v8Ev");}
void  S3021C1 ::v9(){vfunc_called(this, "_ZN7S3021C12v9Ev");}
void  S3021C1 ::v10(){vfunc_called(this, "_ZN7S3021C13v10Ev");}
void  S3021C1 ::v11(){vfunc_called(this, "_ZN7S3021C13v11Ev");}
S3021C1 ::S3021C1(){ note_ctor("S3021C1", this);} // tgen

static void Test_S3021C1()
{
  extern Class_Descriptor cd_S3021C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S3021C1, buf);
    S3021C1 *dp, &lv = *(dp=new (buf) S3021C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S3021C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3021C1)");
    check_base_class_offset(lv, (S3021C3*)(S3021C2*), 0, "S3021C1");
    check_base_class_offset(lv, (S3021C2*), 0, "S3021C1");
    check_field_offset(lv, s3021c1f0, ABISELECT(120,76), "S3021C1.s3021c1f0");
    test_class_info(&lv, &cd_S3021C1);
    dp->~S3021C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3021C1(Test_S3021C1, "S3021C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S3021C1C1Ev();
extern void _ZN7S3021C1D1Ev();
Name_Map name_map_S3021C1[] = {
  NSPAIR(_ZN7S3021C1C1Ev),
  NSPAIR(_ZN7S3021C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3021C3;
extern VTBL_ENTRY _ZTI7S3021C3[];
extern  VTBL_ENTRY _ZTV7S3021C3[];
extern Class_Descriptor cd_S3021C2;
extern VTBL_ENTRY _ZTI7S3021C2[];
extern  VTBL_ENTRY _ZTV7S3021C2[];
static Base_Class bases_S3021C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3021C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3021C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3021C1[];
extern void _ZN7S3021C1D1Ev();
extern void _ZN7S3021C1D0Ev();
extern void _ZN7S3021C33v12Ev();
extern void _ZN7S3021C33v13Ev();
extern void _ZN7S3021C33v14Ev();
extern void _ZN7S3021C33v15Ev();
extern void _ZN7S3021C33v16Ev();
extern void _ZN7S3021C33v17Ev();
extern void _ZN7S3021C33v18Ev();
extern void _ZN7S3021C33v19Ev();
extern void _ZN7S3021C33v20Ev();
extern void _ZN7S3021C33v21Ev();
extern void _ZN7S3021C33v22Ev();
extern void _ZN7S3021C33v23Ev();
extern void _ZN7S3021C33v24Ev();
extern void _ZN7S3021C33v25Ev();
extern void _ZN7S3021C33v26Ev();
extern void _ZN7S3021C33v27Ev();
extern void _ZN7S3021C33v28Ev();
extern void _ZN7S3021C33v29Ev();
extern void _ZN7S3021C33v30Ev();
extern void _ZN7S3021C33v31Ev();
extern void _ZN7S3021C33v32Ev();
extern void _ZN7S3021C33v33Ev();
extern void _ZN7S3021C33v34Ev();
extern void _ZN7S3021C33v35Ev();
extern void _ZN7S3021C33v36Ev();
extern void _ZN7S3021C33v37Ev();
extern void _ZN7S3021C33v38Ev();
extern void _ZN7S3021C33v39Ev();
extern void _ZN7S3021C33v40Ev();
extern void _ZN7S3021C33v41Ev();
extern void _ZN7S3021C33v42Ev();
extern void _ZN7S3021C33v43Ev();
extern void _ZN7S3021C33v44Ev();
extern void _ZN7S3021C33v45Ev();
extern void _ZN7S3021C33v46Ev();
extern void _ZN7S3021C33v47Ev();
extern void _ZN7S3021C33v48Ev();
extern void _ZN7S3021C33v49Ev();
extern void _ZN7S3021C33v50Ev();
extern void _ZN7S3021C33v51Ev();
extern void _ZN7S3021C33v52Ev();
extern void _ZN7S3021C33v53Ev();
extern void _ZN7S3021C33v54Ev();
extern void _ZN7S3021C33v55Ev();
extern void _ZN7S3021C33v56Ev();
extern void _ZN7S3021C33v57Ev();
extern void _ZN7S3021C33v58Ev();
extern void _ZN7S3021C33v59Ev();
extern void _ZN7S3021C33v60Ev();
extern void _ZN7S3021C33v61Ev();
extern void _ZN7S3021C33v62Ev();
extern void _ZN7S3021C33v63Ev();
extern void _ZN7S3021C33v64Ev();
extern void _ZN7S3021C33v65Ev();
extern void _ZN7S3021C33v66Ev();
extern void _ZN7S3021C33v67Ev();
extern void _ZN7S3021C33v68Ev();
extern void _ZN7S3021C33v69Ev();
extern void _ZN7S3021C33v70Ev();
extern void _ZN7S3021C33v71Ev();
extern void _ZN7S3021C33v72Ev();
extern void _ZN7S3021C33v73Ev();
extern void _ZN7S3021C33v74Ev();
extern void _ZN7S3021C33v75Ev();
extern void _ZN7S3021C23v76Ev();
extern void _ZN7S3021C23v77Ev();
extern void _ZN7S3021C23v78Ev();
extern void _ZN7S3021C23v79Ev();
extern void _ZN7S3021C23v80Ev();
extern void _ZN7S3021C23v81Ev();
extern void _ZN7S3021C23v82Ev();
extern void _ZN7S3021C23v83Ev();
extern void _ZN7S3021C23v84Ev();
extern void _ZN7S3021C23v85Ev();
extern void _ZN7S3021C23v86Ev();
extern void _ZN7S3021C23v87Ev();
extern void _ZN7S3021C23v88Ev();
extern void _ZN7S3021C23v89Ev();
extern void _ZN7S3021C23v90Ev();
extern void _ZN7S3021C23v91Ev();
extern void _ZN7S3021C23v92Ev();
extern void _ZN7S3021C23v93Ev();
extern void _ZN7S3021C12v1Ev();
extern void _ZN7S3021C12v2Ev();
extern void _ZN7S3021C12v3Ev();
extern void _ZN7S3021C12v4Ev();
extern void _ZN7S3021C12v5Ev();
extern void _ZN7S3021C12v6Ev();
extern void _ZN7S3021C12v7Ev();
extern void _ZN7S3021C12v8Ev();
extern void _ZN7S3021C12v9Ev();
extern void _ZN7S3021C13v10Ev();
extern void _ZN7S3021C13v11Ev();
static  VTBL_ENTRY vtc_S3021C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3021C1[0]),
  (VTBL_ENTRY)&_ZN7S3021C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3021C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v73Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v74Ev,
  (VTBL_ENTRY)&_ZN7S3021C33v75Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v91Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v92Ev,
  (VTBL_ENTRY)&_ZN7S3021C23v93Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3021C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3021C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3021C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S3021C1[];
extern  VTBL_ENTRY _ZTV7S3021C1[];
Class_Descriptor cd_S3021C1 = {  "S3021C1", // class name
  bases_S3021C1, 2,
  &(vtc_S3021C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S3021C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3021C1),97, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3298C3  {
  int s3298c3f0;
  __tsi64 s3298c3f1;
  void *s3298c3f2[4];
  int s3298c3f3[2];
  void *s3298c3f4;
  ::S1409C5_nt s3298c3f5;
  void *s3298c3f6[2];
  virtual  ~S3298C3(); // _ZN7S3298C3D1Ev
  virtual void  v5(); // _ZN7S3298C32v5Ev
  virtual void  v6(); // _ZN7S3298C32v6Ev
  virtual void  v7(); // _ZN7S3298C32v7Ev
  virtual void  v8(); // _ZN7S3298C32v8Ev
  virtual void  v9(); // _ZN7S3298C32v9Ev
  virtual void  v10(); // _ZN7S3298C33v10Ev
  virtual void  v11(); // _ZN7S3298C33v11Ev
  virtual void  v12(); // _ZN7S3298C33v12Ev
  virtual void  v13(); // _ZN7S3298C33v13Ev
  virtual void  v14(); // _ZN7S3298C33v14Ev
  virtual void  v15(); // _ZN7S3298C33v15Ev
  virtual void  v16(); // _ZN7S3298C33v16Ev
  virtual void  v17(); // _ZN7S3298C33v17Ev
  virtual void  v18(); // _ZN7S3298C33v18Ev
  virtual void  v19(); // _ZN7S3298C33v19Ev
  virtual void  v20(); // _ZN7S3298C33v20Ev
  virtual void  v21(); // _ZN7S3298C33v21Ev
  virtual void  v22(); // _ZN7S3298C33v22Ev
  virtual void  v23(); // _ZN7S3298C33v23Ev
  virtual void  v24(); // _ZN7S3298C33v24Ev
  virtual void  v25(); // _ZN7S3298C33v25Ev
  virtual void  v26(); // _ZN7S3298C33v26Ev
  virtual void  v27(); // _ZN7S3298C33v27Ev
  virtual void  v28(); // _ZN7S3298C33v28Ev
  virtual void  v29(); // _ZN7S3298C33v29Ev
  virtual void  v30(); // _ZN7S3298C33v30Ev
  virtual void  v31(); // _ZN7S3298C33v31Ev
  virtual void  v32(); // _ZN7S3298C33v32Ev
  virtual void  v33(); // _ZN7S3298C33v33Ev
  virtual void  v34(); // _ZN7S3298C33v34Ev
  virtual void  v35(); // _ZN7S3298C33v35Ev
  virtual void  v36(); // _ZN7S3298C33v36Ev
  virtual void  v37(); // _ZN7S3298C33v37Ev
  virtual void  v38(); // _ZN7S3298C33v38Ev
  virtual void  v39(); // _ZN7S3298C33v39Ev
  virtual void  v40(); // _ZN7S3298C33v40Ev
  virtual void  v41(); // _ZN7S3298C33v41Ev
  virtual void  v42(); // _ZN7S3298C33v42Ev
  virtual void  v43(); // _ZN7S3298C33v43Ev
  virtual void  v44(); // _ZN7S3298C33v44Ev
  virtual void  v45(); // _ZN7S3298C33v45Ev
  virtual void  v46(); // _ZN7S3298C33v46Ev
  virtual void  v47(); // _ZN7S3298C33v47Ev
  virtual void  v48(); // _ZN7S3298C33v48Ev
  virtual void  v49(); // _ZN7S3298C33v49Ev
  virtual void  v50(); // _ZN7S3298C33v50Ev
  virtual void  v51(); // _ZN7S3298C33v51Ev
  virtual void  v52(); // _ZN7S3298C33v52Ev
  virtual void  v53(); // _ZN7S3298C33v53Ev
  virtual void  v54(); // _ZN7S3298C33v54Ev
  virtual void  v55(); // _ZN7S3298C33v55Ev
  virtual void  v56(); // _ZN7S3298C33v56Ev
  virtual void  v57(); // _ZN7S3298C33v57Ev
  virtual void  v58(); // _ZN7S3298C33v58Ev
  virtual void  v59(); // _ZN7S3298C33v59Ev
  virtual void  v60(); // _ZN7S3298C33v60Ev
  virtual void  v61(); // _ZN7S3298C33v61Ev
  virtual void  v62(); // _ZN7S3298C33v62Ev
  virtual void  v63(); // _ZN7S3298C33v63Ev
  virtual void  v64(); // _ZN7S3298C33v64Ev
  virtual void  v65(); // _ZN7S3298C33v65Ev
  virtual void  v66(); // _ZN7S3298C33v66Ev
  virtual void  v67(); // _ZN7S3298C33v67Ev
  virtual void  v68(); // _ZN7S3298C33v68Ev
  S3298C3(); // tgen
};
//SIG(-1 S3298C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3298C3 ::~S3298C3(){ note_dtor("S3298C3", this);}
void  S3298C3 ::v5(){vfunc_called(this, "_ZN7S3298C32v5Ev");}
void  S3298C3 ::v6(){vfunc_called(this, "_ZN7S3298C32v6Ev");}
void  S3298C3 ::v7(){vfunc_called(this, "_ZN7S3298C32v7Ev");}
void  S3298C3 ::v8(){vfunc_called(this, "_ZN7S3298C32v8Ev");}
void  S3298C3 ::v9(){vfunc_called(this, "_ZN7S3298C32v9Ev");}
void  S3298C3 ::v10(){vfunc_called(this, "_ZN7S3298C33v10Ev");}
void  S3298C3 ::v11(){vfunc_called(this, "_ZN7S3298C33v11Ev");}
void  S3298C3 ::v12(){vfunc_called(this, "_ZN7S3298C33v12Ev");}
void  S3298C3 ::v13(){vfunc_called(this, "_ZN7S3298C33v13Ev");}
void  S3298C3 ::v14(){vfunc_called(this, "_ZN7S3298C33v14Ev");}
void  S3298C3 ::v15(){vfunc_called(this, "_ZN7S3298C33v15Ev");}
void  S3298C3 ::v16(){vfunc_called(this, "_ZN7S3298C33v16Ev");}
void  S3298C3 ::v17(){vfunc_called(this, "_ZN7S3298C33v17Ev");}
void  S3298C3 ::v18(){vfunc_called(this, "_ZN7S3298C33v18Ev");}
void  S3298C3 ::v19(){vfunc_called(this, "_ZN7S3298C33v19Ev");}
void  S3298C3 ::v20(){vfunc_called(this, "_ZN7S3298C33v20Ev");}
void  S3298C3 ::v21(){vfunc_called(this, "_ZN7S3298C33v21Ev");}
void  S3298C3 ::v22(){vfunc_called(this, "_ZN7S3298C33v22Ev");}
void  S3298C3 ::v23(){vfunc_called(this, "_ZN7S3298C33v23Ev");}
void  S3298C3 ::v24(){vfunc_called(this, "_ZN7S3298C33v24Ev");}
void  S3298C3 ::v25(){vfunc_called(this, "_ZN7S3298C33v25Ev");}
void  S3298C3 ::v26(){vfunc_called(this, "_ZN7S3298C33v26Ev");}
void  S3298C3 ::v27(){vfunc_called(this, "_ZN7S3298C33v27Ev");}
void  S3298C3 ::v28(){vfunc_called(this, "_ZN7S3298C33v28Ev");}
void  S3298C3 ::v29(){vfunc_called(this, "_ZN7S3298C33v29Ev");}
void  S3298C3 ::v30(){vfunc_called(this, "_ZN7S3298C33v30Ev");}
void  S3298C3 ::v31(){vfunc_called(this, "_ZN7S3298C33v31Ev");}
void  S3298C3 ::v32(){vfunc_called(this, "_ZN7S3298C33v32Ev");}
void  S3298C3 ::v33(){vfunc_called(this, "_ZN7S3298C33v33Ev");}
void  S3298C3 ::v34(){vfunc_called(this, "_ZN7S3298C33v34Ev");}
void  S3298C3 ::v35(){vfunc_called(this, "_ZN7S3298C33v35Ev");}
void  S3298C3 ::v36(){vfunc_called(this, "_ZN7S3298C33v36Ev");}
void  S3298C3 ::v37(){vfunc_called(this, "_ZN7S3298C33v37Ev");}
void  S3298C3 ::v38(){vfunc_called(this, "_ZN7S3298C33v38Ev");}
void  S3298C3 ::v39(){vfunc_called(this, "_ZN7S3298C33v39Ev");}
void  S3298C3 ::v40(){vfunc_called(this, "_ZN7S3298C33v40Ev");}
void  S3298C3 ::v41(){vfunc_called(this, "_ZN7S3298C33v41Ev");}
void  S3298C3 ::v42(){vfunc_called(this, "_ZN7S3298C33v42Ev");}
void  S3298C3 ::v43(){vfunc_called(this, "_ZN7S3298C33v43Ev");}
void  S3298C3 ::v44(){vfunc_called(this, "_ZN7S3298C33v44Ev");}
void  S3298C3 ::v45(){vfunc_called(this, "_ZN7S3298C33v45Ev");}
void  S3298C3 ::v46(){vfunc_called(this, "_ZN7S3298C33v46Ev");}
void  S3298C3 ::v47(){vfunc_called(this, "_ZN7S3298C33v47Ev");}
void  S3298C3 ::v48(){vfunc_called(this, "_ZN7S3298C33v48Ev");}
void  S3298C3 ::v49(){vfunc_called(this, "_ZN7S3298C33v49Ev");}
void  S3298C3 ::v50(){vfunc_called(this, "_ZN7S3298C33v50Ev");}
void  S3298C3 ::v51(){vfunc_called(this, "_ZN7S3298C33v51Ev");}
void  S3298C3 ::v52(){vfunc_called(this, "_ZN7S3298C33v52Ev");}
void  S3298C3 ::v53(){vfunc_called(this, "_ZN7S3298C33v53Ev");}
void  S3298C3 ::v54(){vfunc_called(this, "_ZN7S3298C33v54Ev");}
void  S3298C3 ::v55(){vfunc_called(this, "_ZN7S3298C33v55Ev");}
void  S3298C3 ::v56(){vfunc_called(this, "_ZN7S3298C33v56Ev");}
void  S3298C3 ::v57(){vfunc_called(this, "_ZN7S3298C33v57Ev");}
void  S3298C3 ::v58(){vfunc_called(this, "_ZN7S3298C33v58Ev");}
void  S3298C3 ::v59(){vfunc_called(this, "_ZN7S3298C33v59Ev");}
void  S3298C3 ::v60(){vfunc_called(this, "_ZN7S3298C33v60Ev");}
void  S3298C3 ::v61(){vfunc_called(this, "_ZN7S3298C33v61Ev");}
void  S3298C3 ::v62(){vfunc_called(this, "_ZN7S3298C33v62Ev");}
void  S3298C3 ::v63(){vfunc_called(this, "_ZN7S3298C33v63Ev");}
void  S3298C3 ::v64(){vfunc_called(this, "_ZN7S3298C33v64Ev");}
void  S3298C3 ::v65(){vfunc_called(this, "_ZN7S3298C33v65Ev");}
void  S3298C3 ::v66(){vfunc_called(this, "_ZN7S3298C33v66Ev");}
void  S3298C3 ::v67(){vfunc_called(this, "_ZN7S3298C33v67Ev");}
void  S3298C3 ::v68(){vfunc_called(this, "_ZN7S3298C33v68Ev");}
S3298C3 ::S3298C3(){ note_ctor("S3298C3", this);} // tgen

static void Test_S3298C3()
{
  extern Class_Descriptor cd_S3298C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3298C3, buf);
    S3298C3 *dp, &lv = *(dp=new (buf) S3298C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3298C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3298C3)");
    check_field_offset(lv, s3298c3f0, ABISELECT(8,4), "S3298C3.s3298c3f0");
    check_field_offset(lv, s3298c3f1, ABISELECT(16,8), "S3298C3.s3298c3f1");
    check_field_offset(lv, s3298c3f2, ABISELECT(24,16), "S3298C3.s3298c3f2");
    check_field_offset(lv, s3298c3f3, ABISELECT(56,32), "S3298C3.s3298c3f3");
    check_field_offset(lv, s3298c3f4, ABISELECT(64,40), "S3298C3.s3298c3f4");
    check_field_offset(lv, s3298c3f5, ABISELECT(72,44), "S3298C3.s3298c3f5");
    check_field_offset(lv, s3298c3f6, ABISELECT(80,52), "S3298C3.s3298c3f6");
    test_class_info(&lv, &cd_S3298C3);
    dp->~S3298C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3298C3(Test_S3298C3, "S3298C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3298C3C1Ev();
extern void _ZN7S3298C3D1Ev();
Name_Map name_map_S3298C3[] = {
  NSPAIR(_ZN7S3298C3C1Ev),
  NSPAIR(_ZN7S3298C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3298C3[];
extern void _ZN7S3298C3D1Ev();
extern void _ZN7S3298C3D0Ev();
extern void _ZN7S3298C32v5Ev();
extern void _ZN7S3298C32v6Ev();
extern void _ZN7S3298C32v7Ev();
extern void _ZN7S3298C32v8Ev();
extern void _ZN7S3298C32v9Ev();
extern void _ZN7S3298C33v10Ev();
extern void _ZN7S3298C33v11Ev();
extern void _ZN7S3298C33v12Ev();
extern void _ZN7S3298C33v13Ev();
extern void _ZN7S3298C33v14Ev();
extern void _ZN7S3298C33v15Ev();
extern void _ZN7S3298C33v16Ev();
extern void _ZN7S3298C33v17Ev();
extern void _ZN7S3298C33v18Ev();
extern void _ZN7S3298C33v19Ev();
extern void _ZN7S3298C33v20Ev();
extern void _ZN7S3298C33v21Ev();
extern void _ZN7S3298C33v22Ev();
extern void _ZN7S3298C33v23Ev();
extern void _ZN7S3298C33v24Ev();
extern void _ZN7S3298C33v25Ev();
extern void _ZN7S3298C33v26Ev();
extern void _ZN7S3298C33v27Ev();
extern void _ZN7S3298C33v28Ev();
extern void _ZN7S3298C33v29Ev();
extern void _ZN7S3298C33v30Ev();
extern void _ZN7S3298C33v31Ev();
extern void _ZN7S3298C33v32Ev();
extern void _ZN7S3298C33v33Ev();
extern void _ZN7S3298C33v34Ev();
extern void _ZN7S3298C33v35Ev();
extern void _ZN7S3298C33v36Ev();
extern void _ZN7S3298C33v37Ev();
extern void _ZN7S3298C33v38Ev();
extern void _ZN7S3298C33v39Ev();
extern void _ZN7S3298C33v40Ev();
extern void _ZN7S3298C33v41Ev();
extern void _ZN7S3298C33v42Ev();
extern void _ZN7S3298C33v43Ev();
extern void _ZN7S3298C33v44Ev();
extern void _ZN7S3298C33v45Ev();
extern void _ZN7S3298C33v46Ev();
extern void _ZN7S3298C33v47Ev();
extern void _ZN7S3298C33v48Ev();
extern void _ZN7S3298C33v49Ev();
extern void _ZN7S3298C33v50Ev();
extern void _ZN7S3298C33v51Ev();
extern void _ZN7S3298C33v52Ev();
extern void _ZN7S3298C33v53Ev();
extern void _ZN7S3298C33v54Ev();
extern void _ZN7S3298C33v55Ev();
extern void _ZN7S3298C33v56Ev();
extern void _ZN7S3298C33v57Ev();
extern void _ZN7S3298C33v58Ev();
extern void _ZN7S3298C33v59Ev();
extern void _ZN7S3298C33v60Ev();
extern void _ZN7S3298C33v61Ev();
extern void _ZN7S3298C33v62Ev();
extern void _ZN7S3298C33v63Ev();
extern void _ZN7S3298C33v64Ev();
extern void _ZN7S3298C33v65Ev();
extern void _ZN7S3298C33v66Ev();
extern void _ZN7S3298C33v67Ev();
extern void _ZN7S3298C33v68Ev();
static  VTBL_ENTRY vtc_S3298C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3298C3[0]),
  (VTBL_ENTRY)&_ZN7S3298C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3298C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v68Ev,
};
extern VTBL_ENTRY _ZTI7S3298C3[];
extern  VTBL_ENTRY _ZTV7S3298C3[];
Class_Descriptor cd_S3298C3 = {  "S3298C3", // class name
  0,0,//no base classes
  &(vtc_S3298C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3298C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3298C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3298C2  : S3298C3 {
  int s3298c2f0;
  ::S1409C30 s3298c2f1;
  virtual  ~S3298C2(); // _ZN7S3298C2D1Ev
  virtual void  v69(); // _ZN7S3298C23v69Ev
  virtual void  v70(); // _ZN7S3298C23v70Ev
  virtual void  v71(); // _ZN7S3298C23v71Ev
  virtual void  v72(); // _ZN7S3298C23v72Ev
  virtual void  v73(); // _ZN7S3298C23v73Ev
  virtual void  v74(); // _ZN7S3298C23v74Ev
  virtual void  v75(); // _ZN7S3298C23v75Ev
  virtual void  v76(); // _ZN7S3298C23v76Ev
  virtual void  v77(); // _ZN7S3298C23v77Ev
  virtual void  v78(); // _ZN7S3298C23v78Ev
  virtual void  v79(); // _ZN7S3298C23v79Ev
  virtual void  v80(); // _ZN7S3298C23v80Ev
  virtual void  v81(); // _ZN7S3298C23v81Ev
  virtual void  v82(); // _ZN7S3298C23v82Ev
  virtual void  v83(); // _ZN7S3298C23v83Ev
  virtual void  v84(); // _ZN7S3298C23v84Ev
  virtual void  v85(); // _ZN7S3298C23v85Ev
  virtual void  v86(); // _ZN7S3298C23v86Ev
  S3298C2(); // tgen
};
//SIG(-1 S3298C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3298C2 ::~S3298C2(){ note_dtor("S3298C2", this);}
void  S3298C2 ::v69(){vfunc_called(this, "_ZN7S3298C23v69Ev");}
void  S3298C2 ::v70(){vfunc_called(this, "_ZN7S3298C23v70Ev");}
void  S3298C2 ::v71(){vfunc_called(this, "_ZN7S3298C23v71Ev");}
void  S3298C2 ::v72(){vfunc_called(this, "_ZN7S3298C23v72Ev");}
void  S3298C2 ::v73(){vfunc_called(this, "_ZN7S3298C23v73Ev");}
void  S3298C2 ::v74(){vfunc_called(this, "_ZN7S3298C23v74Ev");}
void  S3298C2 ::v75(){vfunc_called(this, "_ZN7S3298C23v75Ev");}
void  S3298C2 ::v76(){vfunc_called(this, "_ZN7S3298C23v76Ev");}
void  S3298C2 ::v77(){vfunc_called(this, "_ZN7S3298C23v77Ev");}
void  S3298C2 ::v78(){vfunc_called(this, "_ZN7S3298C23v78Ev");}
void  S3298C2 ::v79(){vfunc_called(this, "_ZN7S3298C23v79Ev");}
void  S3298C2 ::v80(){vfunc_called(this, "_ZN7S3298C23v80Ev");}
void  S3298C2 ::v81(){vfunc_called(this, "_ZN7S3298C23v81Ev");}
void  S3298C2 ::v82(){vfunc_called(this, "_ZN7S3298C23v82Ev");}
void  S3298C2 ::v83(){vfunc_called(this, "_ZN7S3298C23v83Ev");}
void  S3298C2 ::v84(){vfunc_called(this, "_ZN7S3298C23v84Ev");}
void  S3298C2 ::v85(){vfunc_called(this, "_ZN7S3298C23v85Ev");}
void  S3298C2 ::v86(){vfunc_called(this, "_ZN7S3298C23v86Ev");}
S3298C2 ::S3298C2(){ note_ctor("S3298C2", this);} // tgen

static void Test_S3298C2()
{
  extern Class_Descriptor cd_S3298C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3298C2, buf);
    S3298C2 *dp, &lv = *(dp=new (buf) S3298C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3298C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3298C2)");
    check_base_class_offset(lv, (S3298C3*), 0, "S3298C2");
    check_field_offset(lv, s3298c2f0, ABISELECT(96,60), "S3298C2.s3298c2f0");
    check_field_offset(lv, s3298c2f1, ABISELECT(104,64), "S3298C2.s3298c2f1");
    test_class_info(&lv, &cd_S3298C2);
    dp->~S3298C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3298C2(Test_S3298C2, "S3298C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3298C2C1Ev();
extern void _ZN7S3298C2D1Ev();
Name_Map name_map_S3298C2[] = {
  NSPAIR(_ZN7S3298C2C1Ev),
  NSPAIR(_ZN7S3298C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3298C3;
extern VTBL_ENTRY _ZTI7S3298C3[];
extern  VTBL_ENTRY _ZTV7S3298C3[];
static Base_Class bases_S3298C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3298C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3298C2[];
extern void _ZN7S3298C2D1Ev();
extern void _ZN7S3298C2D0Ev();
extern void _ZN7S3298C32v5Ev();
extern void _ZN7S3298C32v6Ev();
extern void _ZN7S3298C32v7Ev();
extern void _ZN7S3298C32v8Ev();
extern void _ZN7S3298C32v9Ev();
extern void _ZN7S3298C33v10Ev();
extern void _ZN7S3298C33v11Ev();
extern void _ZN7S3298C33v12Ev();
extern void _ZN7S3298C33v13Ev();
extern void _ZN7S3298C33v14Ev();
extern void _ZN7S3298C33v15Ev();
extern void _ZN7S3298C33v16Ev();
extern void _ZN7S3298C33v17Ev();
extern void _ZN7S3298C33v18Ev();
extern void _ZN7S3298C33v19Ev();
extern void _ZN7S3298C33v20Ev();
extern void _ZN7S3298C33v21Ev();
extern void _ZN7S3298C33v22Ev();
extern void _ZN7S3298C33v23Ev();
extern void _ZN7S3298C33v24Ev();
extern void _ZN7S3298C33v25Ev();
extern void _ZN7S3298C33v26Ev();
extern void _ZN7S3298C33v27Ev();
extern void _ZN7S3298C33v28Ev();
extern void _ZN7S3298C33v29Ev();
extern void _ZN7S3298C33v30Ev();
extern void _ZN7S3298C33v31Ev();
extern void _ZN7S3298C33v32Ev();
extern void _ZN7S3298C33v33Ev();
extern void _ZN7S3298C33v34Ev();
extern void _ZN7S3298C33v35Ev();
extern void _ZN7S3298C33v36Ev();
extern void _ZN7S3298C33v37Ev();
extern void _ZN7S3298C33v38Ev();
extern void _ZN7S3298C33v39Ev();
extern void _ZN7S3298C33v40Ev();
extern void _ZN7S3298C33v41Ev();
extern void _ZN7S3298C33v42Ev();
extern void _ZN7S3298C33v43Ev();
extern void _ZN7S3298C33v44Ev();
extern void _ZN7S3298C33v45Ev();
extern void _ZN7S3298C33v46Ev();
extern void _ZN7S3298C33v47Ev();
extern void _ZN7S3298C33v48Ev();
extern void _ZN7S3298C33v49Ev();
extern void _ZN7S3298C33v50Ev();
extern void _ZN7S3298C33v51Ev();
extern void _ZN7S3298C33v52Ev();
extern void _ZN7S3298C33v53Ev();
extern void _ZN7S3298C33v54Ev();
extern void _ZN7S3298C33v55Ev();
extern void _ZN7S3298C33v56Ev();
extern void _ZN7S3298C33v57Ev();
extern void _ZN7S3298C33v58Ev();
extern void _ZN7S3298C33v59Ev();
extern void _ZN7S3298C33v60Ev();
extern void _ZN7S3298C33v61Ev();
extern void _ZN7S3298C33v62Ev();
extern void _ZN7S3298C33v63Ev();
extern void _ZN7S3298C33v64Ev();
extern void _ZN7S3298C33v65Ev();
extern void _ZN7S3298C33v66Ev();
extern void _ZN7S3298C33v67Ev();
extern void _ZN7S3298C33v68Ev();
extern void _ZN7S3298C23v69Ev();
extern void _ZN7S3298C23v70Ev();
extern void _ZN7S3298C23v71Ev();
extern void _ZN7S3298C23v72Ev();
extern void _ZN7S3298C23v73Ev();
extern void _ZN7S3298C23v74Ev();
extern void _ZN7S3298C23v75Ev();
extern void _ZN7S3298C23v76Ev();
extern void _ZN7S3298C23v77Ev();
extern void _ZN7S3298C23v78Ev();
extern void _ZN7S3298C23v79Ev();
extern void _ZN7S3298C23v80Ev();
extern void _ZN7S3298C23v81Ev();
extern void _ZN7S3298C23v82Ev();
extern void _ZN7S3298C23v83Ev();
extern void _ZN7S3298C23v84Ev();
extern void _ZN7S3298C23v85Ev();
extern void _ZN7S3298C23v86Ev();
static  VTBL_ENTRY vtc_S3298C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3298C2[0]),
  (VTBL_ENTRY)&_ZN7S3298C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3298C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v86Ev,
};
extern VTBL_ENTRY _ZTI7S3298C2[];
extern  VTBL_ENTRY _ZTV7S3298C2[];
Class_Descriptor cd_S3298C2 = {  "S3298C2", // class name
  bases_S3298C2, 1,
  &(vtc_S3298C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3298C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3298C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3298C1  : S3298C2 {
  ::S1573C9_nt s3298c1f0;
  virtual  ~S3298C1(); // _ZN7S3298C1D1Ev
  virtual void  v1(); // _ZN7S3298C12v1Ev
  virtual void  v2(); // _ZN7S3298C12v2Ev
  virtual void  v3(); // _ZN7S3298C12v3Ev
  virtual void  v4(); // _ZN7S3298C12v4Ev
  S3298C1(); // tgen
};
//SIG(1 S3298C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 FC8{ BC9{ m Fc[4] FC10{ BC11{ BC7}} Fi[2]} Fp}}


 S3298C1 ::~S3298C1(){ note_dtor("S3298C1", this);}
void  S3298C1 ::v1(){vfunc_called(this, "_ZN7S3298C12v1Ev");}
void  S3298C1 ::v2(){vfunc_called(this, "_ZN7S3298C12v2Ev");}
void  S3298C1 ::v3(){vfunc_called(this, "_ZN7S3298C12v3Ev");}
void  S3298C1 ::v4(){vfunc_called(this, "_ZN7S3298C12v4Ev");}
S3298C1 ::S3298C1(){ note_ctor("S3298C1", this);} // tgen

static void Test_S3298C1()
{
  extern Class_Descriptor cd_S3298C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,27)];
    init_test(&cd_S3298C1, buf);
    S3298C1 *dp, &lv = *(dp=new (buf) S3298C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,104), "sizeof(S3298C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3298C1)");
    check_base_class_offset(lv, (S3298C3*)(S3298C2*), 0, "S3298C1");
    check_base_class_offset(lv, (S3298C2*), 0, "S3298C1");
    check_field_offset(lv, s3298c1f0, ABISELECT(120,76), "S3298C1.s3298c1f0");
    test_class_info(&lv, &cd_S3298C1);
    dp->~S3298C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3298C1(Test_S3298C1, "S3298C1", ABISELECT(160,104));

#else // __cplusplus

extern void _ZN7S3298C1C1Ev();
extern void _ZN7S3298C1D1Ev();
Name_Map name_map_S3298C1[] = {
  NSPAIR(_ZN7S3298C1C1Ev),
  NSPAIR(_ZN7S3298C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3298C3;
extern VTBL_ENTRY _ZTI7S3298C3[];
extern  VTBL_ENTRY _ZTV7S3298C3[];
extern Class_Descriptor cd_S3298C2;
extern VTBL_ENTRY _ZTI7S3298C2[];
extern  VTBL_ENTRY _ZTV7S3298C2[];
static Base_Class bases_S3298C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3298C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3298C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3298C1[];
extern void _ZN7S3298C1D1Ev();
extern void _ZN7S3298C1D0Ev();
extern void _ZN7S3298C32v5Ev();
extern void _ZN7S3298C32v6Ev();
extern void _ZN7S3298C32v7Ev();
extern void _ZN7S3298C32v8Ev();
extern void _ZN7S3298C32v9Ev();
extern void _ZN7S3298C33v10Ev();
extern void _ZN7S3298C33v11Ev();
extern void _ZN7S3298C33v12Ev();
extern void _ZN7S3298C33v13Ev();
extern void _ZN7S3298C33v14Ev();
extern void _ZN7S3298C33v15Ev();
extern void _ZN7S3298C33v16Ev();
extern void _ZN7S3298C33v17Ev();
extern void _ZN7S3298C33v18Ev();
extern void _ZN7S3298C33v19Ev();
extern void _ZN7S3298C33v20Ev();
extern void _ZN7S3298C33v21Ev();
extern void _ZN7S3298C33v22Ev();
extern void _ZN7S3298C33v23Ev();
extern void _ZN7S3298C33v24Ev();
extern void _ZN7S3298C33v25Ev();
extern void _ZN7S3298C33v26Ev();
extern void _ZN7S3298C33v27Ev();
extern void _ZN7S3298C33v28Ev();
extern void _ZN7S3298C33v29Ev();
extern void _ZN7S3298C33v30Ev();
extern void _ZN7S3298C33v31Ev();
extern void _ZN7S3298C33v32Ev();
extern void _ZN7S3298C33v33Ev();
extern void _ZN7S3298C33v34Ev();
extern void _ZN7S3298C33v35Ev();
extern void _ZN7S3298C33v36Ev();
extern void _ZN7S3298C33v37Ev();
extern void _ZN7S3298C33v38Ev();
extern void _ZN7S3298C33v39Ev();
extern void _ZN7S3298C33v40Ev();
extern void _ZN7S3298C33v41Ev();
extern void _ZN7S3298C33v42Ev();
extern void _ZN7S3298C33v43Ev();
extern void _ZN7S3298C33v44Ev();
extern void _ZN7S3298C33v45Ev();
extern void _ZN7S3298C33v46Ev();
extern void _ZN7S3298C33v47Ev();
extern void _ZN7S3298C33v48Ev();
extern void _ZN7S3298C33v49Ev();
extern void _ZN7S3298C33v50Ev();
extern void _ZN7S3298C33v51Ev();
extern void _ZN7S3298C33v52Ev();
extern void _ZN7S3298C33v53Ev();
extern void _ZN7S3298C33v54Ev();
extern void _ZN7S3298C33v55Ev();
extern void _ZN7S3298C33v56Ev();
extern void _ZN7S3298C33v57Ev();
extern void _ZN7S3298C33v58Ev();
extern void _ZN7S3298C33v59Ev();
extern void _ZN7S3298C33v60Ev();
extern void _ZN7S3298C33v61Ev();
extern void _ZN7S3298C33v62Ev();
extern void _ZN7S3298C33v63Ev();
extern void _ZN7S3298C33v64Ev();
extern void _ZN7S3298C33v65Ev();
extern void _ZN7S3298C33v66Ev();
extern void _ZN7S3298C33v67Ev();
extern void _ZN7S3298C33v68Ev();
extern void _ZN7S3298C23v69Ev();
extern void _ZN7S3298C23v70Ev();
extern void _ZN7S3298C23v71Ev();
extern void _ZN7S3298C23v72Ev();
extern void _ZN7S3298C23v73Ev();
extern void _ZN7S3298C23v74Ev();
extern void _ZN7S3298C23v75Ev();
extern void _ZN7S3298C23v76Ev();
extern void _ZN7S3298C23v77Ev();
extern void _ZN7S3298C23v78Ev();
extern void _ZN7S3298C23v79Ev();
extern void _ZN7S3298C23v80Ev();
extern void _ZN7S3298C23v81Ev();
extern void _ZN7S3298C23v82Ev();
extern void _ZN7S3298C23v83Ev();
extern void _ZN7S3298C23v84Ev();
extern void _ZN7S3298C23v85Ev();
extern void _ZN7S3298C23v86Ev();
extern void _ZN7S3298C12v1Ev();
extern void _ZN7S3298C12v2Ev();
extern void _ZN7S3298C12v3Ev();
extern void _ZN7S3298C12v4Ev();
static  VTBL_ENTRY vtc_S3298C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3298C1[0]),
  (VTBL_ENTRY)&_ZN7S3298C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3298C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3298C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3298C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3298C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3298C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3298C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3298C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3298C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3298C1[];
extern  VTBL_ENTRY _ZTV7S3298C1[];
Class_Descriptor cd_S3298C1 = {  "S3298C1", // class name
  bases_S3298C1, 2,
  &(vtc_S3298C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,104), // object size
  NSPAIRA(_ZTI7S3298C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3298C1),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3245C3  {
  int s3245c3f0;
  __tsi64 s3245c3f1;
  void *s3245c3f2[4];
  int s3245c3f3[2];
  void *s3245c3f4;
  ::S1409C5_nt s3245c3f5;
  void *s3245c3f6[2];
  virtual  ~S3245C3(); // _ZN7S3245C3D1Ev
  virtual void  v4(); // _ZN7S3245C32v4Ev
  virtual void  v5(); // _ZN7S3245C32v5Ev
  virtual void  v6(); // _ZN7S3245C32v6Ev
  virtual void  v7(); // _ZN7S3245C32v7Ev
  virtual void  v8(); // _ZN7S3245C32v8Ev
  virtual void  v9(); // _ZN7S3245C32v9Ev
  virtual void  v10(); // _ZN7S3245C33v10Ev
  virtual void  v11(); // _ZN7S3245C33v11Ev
  virtual void  v12(); // _ZN7S3245C33v12Ev
  virtual void  v13(); // _ZN7S3245C33v13Ev
  virtual void  v14(); // _ZN7S3245C33v14Ev
  virtual void  v15(); // _ZN7S3245C33v15Ev
  virtual void  v16(); // _ZN7S3245C33v16Ev
  virtual void  v17(); // _ZN7S3245C33v17Ev
  virtual void  v18(); // _ZN7S3245C33v18Ev
  virtual void  v19(); // _ZN7S3245C33v19Ev
  virtual void  v20(); // _ZN7S3245C33v20Ev
  virtual void  v21(); // _ZN7S3245C33v21Ev
  virtual void  v22(); // _ZN7S3245C33v22Ev
  virtual void  v23(); // _ZN7S3245C33v23Ev
  virtual void  v24(); // _ZN7S3245C33v24Ev
  virtual void  v25(); // _ZN7S3245C33v25Ev
  virtual void  v26(); // _ZN7S3245C33v26Ev
  virtual void  v27(); // _ZN7S3245C33v27Ev
  virtual void  v28(); // _ZN7S3245C33v28Ev
  virtual void  v29(); // _ZN7S3245C33v29Ev
  virtual void  v30(); // _ZN7S3245C33v30Ev
  virtual void  v31(); // _ZN7S3245C33v31Ev
  virtual void  v32(); // _ZN7S3245C33v32Ev
  virtual void  v33(); // _ZN7S3245C33v33Ev
  virtual void  v34(); // _ZN7S3245C33v34Ev
  virtual void  v35(); // _ZN7S3245C33v35Ev
  virtual void  v36(); // _ZN7S3245C33v36Ev
  virtual void  v37(); // _ZN7S3245C33v37Ev
  virtual void  v38(); // _ZN7S3245C33v38Ev
  virtual void  v39(); // _ZN7S3245C33v39Ev
  virtual void  v40(); // _ZN7S3245C33v40Ev
  virtual void  v41(); // _ZN7S3245C33v41Ev
  virtual void  v42(); // _ZN7S3245C33v42Ev
  virtual void  v43(); // _ZN7S3245C33v43Ev
  virtual void  v44(); // _ZN7S3245C33v44Ev
  virtual void  v45(); // _ZN7S3245C33v45Ev
  virtual void  v46(); // _ZN7S3245C33v46Ev
  virtual void  v47(); // _ZN7S3245C33v47Ev
  virtual void  v48(); // _ZN7S3245C33v48Ev
  virtual void  v49(); // _ZN7S3245C33v49Ev
  virtual void  v50(); // _ZN7S3245C33v50Ev
  virtual void  v51(); // _ZN7S3245C33v51Ev
  virtual void  v52(); // _ZN7S3245C33v52Ev
  virtual void  v53(); // _ZN7S3245C33v53Ev
  virtual void  v54(); // _ZN7S3245C33v54Ev
  virtual void  v55(); // _ZN7S3245C33v55Ev
  virtual void  v56(); // _ZN7S3245C33v56Ev
  virtual void  v57(); // _ZN7S3245C33v57Ev
  virtual void  v58(); // _ZN7S3245C33v58Ev
  virtual void  v59(); // _ZN7S3245C33v59Ev
  virtual void  v60(); // _ZN7S3245C33v60Ev
  virtual void  v61(); // _ZN7S3245C33v61Ev
  virtual void  v62(); // _ZN7S3245C33v62Ev
  virtual void  v63(); // _ZN7S3245C33v63Ev
  virtual void  v64(); // _ZN7S3245C33v64Ev
  virtual void  v65(); // _ZN7S3245C33v65Ev
  virtual void  v66(); // _ZN7S3245C33v66Ev
  virtual void  v67(); // _ZN7S3245C33v67Ev
  S3245C3(); // tgen
};
//SIG(-1 S3245C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3245C3 ::~S3245C3(){ note_dtor("S3245C3", this);}
void  S3245C3 ::v4(){vfunc_called(this, "_ZN7S3245C32v4Ev");}
void  S3245C3 ::v5(){vfunc_called(this, "_ZN7S3245C32v5Ev");}
void  S3245C3 ::v6(){vfunc_called(this, "_ZN7S3245C32v6Ev");}
void  S3245C3 ::v7(){vfunc_called(this, "_ZN7S3245C32v7Ev");}
void  S3245C3 ::v8(){vfunc_called(this, "_ZN7S3245C32v8Ev");}
void  S3245C3 ::v9(){vfunc_called(this, "_ZN7S3245C32v9Ev");}
void  S3245C3 ::v10(){vfunc_called(this, "_ZN7S3245C33v10Ev");}
void  S3245C3 ::v11(){vfunc_called(this, "_ZN7S3245C33v11Ev");}
void  S3245C3 ::v12(){vfunc_called(this, "_ZN7S3245C33v12Ev");}
void  S3245C3 ::v13(){vfunc_called(this, "_ZN7S3245C33v13Ev");}
void  S3245C3 ::v14(){vfunc_called(this, "_ZN7S3245C33v14Ev");}
void  S3245C3 ::v15(){vfunc_called(this, "_ZN7S3245C33v15Ev");}
void  S3245C3 ::v16(){vfunc_called(this, "_ZN7S3245C33v16Ev");}
void  S3245C3 ::v17(){vfunc_called(this, "_ZN7S3245C33v17Ev");}
void  S3245C3 ::v18(){vfunc_called(this, "_ZN7S3245C33v18Ev");}
void  S3245C3 ::v19(){vfunc_called(this, "_ZN7S3245C33v19Ev");}
void  S3245C3 ::v20(){vfunc_called(this, "_ZN7S3245C33v20Ev");}
void  S3245C3 ::v21(){vfunc_called(this, "_ZN7S3245C33v21Ev");}
void  S3245C3 ::v22(){vfunc_called(this, "_ZN7S3245C33v22Ev");}
void  S3245C3 ::v23(){vfunc_called(this, "_ZN7S3245C33v23Ev");}
void  S3245C3 ::v24(){vfunc_called(this, "_ZN7S3245C33v24Ev");}
void  S3245C3 ::v25(){vfunc_called(this, "_ZN7S3245C33v25Ev");}
void  S3245C3 ::v26(){vfunc_called(this, "_ZN7S3245C33v26Ev");}
void  S3245C3 ::v27(){vfunc_called(this, "_ZN7S3245C33v27Ev");}
void  S3245C3 ::v28(){vfunc_called(this, "_ZN7S3245C33v28Ev");}
void  S3245C3 ::v29(){vfunc_called(this, "_ZN7S3245C33v29Ev");}
void  S3245C3 ::v30(){vfunc_called(this, "_ZN7S3245C33v30Ev");}
void  S3245C3 ::v31(){vfunc_called(this, "_ZN7S3245C33v31Ev");}
void  S3245C3 ::v32(){vfunc_called(this, "_ZN7S3245C33v32Ev");}
void  S3245C3 ::v33(){vfunc_called(this, "_ZN7S3245C33v33Ev");}
void  S3245C3 ::v34(){vfunc_called(this, "_ZN7S3245C33v34Ev");}
void  S3245C3 ::v35(){vfunc_called(this, "_ZN7S3245C33v35Ev");}
void  S3245C3 ::v36(){vfunc_called(this, "_ZN7S3245C33v36Ev");}
void  S3245C3 ::v37(){vfunc_called(this, "_ZN7S3245C33v37Ev");}
void  S3245C3 ::v38(){vfunc_called(this, "_ZN7S3245C33v38Ev");}
void  S3245C3 ::v39(){vfunc_called(this, "_ZN7S3245C33v39Ev");}
void  S3245C3 ::v40(){vfunc_called(this, "_ZN7S3245C33v40Ev");}
void  S3245C3 ::v41(){vfunc_called(this, "_ZN7S3245C33v41Ev");}
void  S3245C3 ::v42(){vfunc_called(this, "_ZN7S3245C33v42Ev");}
void  S3245C3 ::v43(){vfunc_called(this, "_ZN7S3245C33v43Ev");}
void  S3245C3 ::v44(){vfunc_called(this, "_ZN7S3245C33v44Ev");}
void  S3245C3 ::v45(){vfunc_called(this, "_ZN7S3245C33v45Ev");}
void  S3245C3 ::v46(){vfunc_called(this, "_ZN7S3245C33v46Ev");}
void  S3245C3 ::v47(){vfunc_called(this, "_ZN7S3245C33v47Ev");}
void  S3245C3 ::v48(){vfunc_called(this, "_ZN7S3245C33v48Ev");}
void  S3245C3 ::v49(){vfunc_called(this, "_ZN7S3245C33v49Ev");}
void  S3245C3 ::v50(){vfunc_called(this, "_ZN7S3245C33v50Ev");}
void  S3245C3 ::v51(){vfunc_called(this, "_ZN7S3245C33v51Ev");}
void  S3245C3 ::v52(){vfunc_called(this, "_ZN7S3245C33v52Ev");}
void  S3245C3 ::v53(){vfunc_called(this, "_ZN7S3245C33v53Ev");}
void  S3245C3 ::v54(){vfunc_called(this, "_ZN7S3245C33v54Ev");}
void  S3245C3 ::v55(){vfunc_called(this, "_ZN7S3245C33v55Ev");}
void  S3245C3 ::v56(){vfunc_called(this, "_ZN7S3245C33v56Ev");}
void  S3245C3 ::v57(){vfunc_called(this, "_ZN7S3245C33v57Ev");}
void  S3245C3 ::v58(){vfunc_called(this, "_ZN7S3245C33v58Ev");}
void  S3245C3 ::v59(){vfunc_called(this, "_ZN7S3245C33v59Ev");}
void  S3245C3 ::v60(){vfunc_called(this, "_ZN7S3245C33v60Ev");}
void  S3245C3 ::v61(){vfunc_called(this, "_ZN7S3245C33v61Ev");}
void  S3245C3 ::v62(){vfunc_called(this, "_ZN7S3245C33v62Ev");}
void  S3245C3 ::v63(){vfunc_called(this, "_ZN7S3245C33v63Ev");}
void  S3245C3 ::v64(){vfunc_called(this, "_ZN7S3245C33v64Ev");}
void  S3245C3 ::v65(){vfunc_called(this, "_ZN7S3245C33v65Ev");}
void  S3245C3 ::v66(){vfunc_called(this, "_ZN7S3245C33v66Ev");}
void  S3245C3 ::v67(){vfunc_called(this, "_ZN7S3245C33v67Ev");}
S3245C3 ::S3245C3(){ note_ctor("S3245C3", this);} // tgen

static void Test_S3245C3()
{
  extern Class_Descriptor cd_S3245C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3245C3, buf);
    S3245C3 *dp, &lv = *(dp=new (buf) S3245C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3245C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3245C3)");
    check_field_offset(lv, s3245c3f0, ABISELECT(8,4), "S3245C3.s3245c3f0");
    check_field_offset(lv, s3245c3f1, ABISELECT(16,8), "S3245C3.s3245c3f1");
    check_field_offset(lv, s3245c3f2, ABISELECT(24,16), "S3245C3.s3245c3f2");
    check_field_offset(lv, s3245c3f3, ABISELECT(56,32), "S3245C3.s3245c3f3");
    check_field_offset(lv, s3245c3f4, ABISELECT(64,40), "S3245C3.s3245c3f4");
    check_field_offset(lv, s3245c3f5, ABISELECT(72,44), "S3245C3.s3245c3f5");
    check_field_offset(lv, s3245c3f6, ABISELECT(80,52), "S3245C3.s3245c3f6");
    test_class_info(&lv, &cd_S3245C3);
    dp->~S3245C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3245C3(Test_S3245C3, "S3245C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3245C3C1Ev();
extern void _ZN7S3245C3D1Ev();
Name_Map name_map_S3245C3[] = {
  NSPAIR(_ZN7S3245C3C1Ev),
  NSPAIR(_ZN7S3245C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3245C3[];
extern void _ZN7S3245C3D1Ev();
extern void _ZN7S3245C3D0Ev();
extern void _ZN7S3245C32v4Ev();
extern void _ZN7S3245C32v5Ev();
extern void _ZN7S3245C32v6Ev();
extern void _ZN7S3245C32v7Ev();
extern void _ZN7S3245C32v8Ev();
extern void _ZN7S3245C32v9Ev();
extern void _ZN7S3245C33v10Ev();
extern void _ZN7S3245C33v11Ev();
extern void _ZN7S3245C33v12Ev();
extern void _ZN7S3245C33v13Ev();
extern void _ZN7S3245C33v14Ev();
extern void _ZN7S3245C33v15Ev();
extern void _ZN7S3245C33v16Ev();
extern void _ZN7S3245C33v17Ev();
extern void _ZN7S3245C33v18Ev();
extern void _ZN7S3245C33v19Ev();
extern void _ZN7S3245C33v20Ev();
extern void _ZN7S3245C33v21Ev();
extern void _ZN7S3245C33v22Ev();
extern void _ZN7S3245C33v23Ev();
extern void _ZN7S3245C33v24Ev();
extern void _ZN7S3245C33v25Ev();
extern void _ZN7S3245C33v26Ev();
extern void _ZN7S3245C33v27Ev();
extern void _ZN7S3245C33v28Ev();
extern void _ZN7S3245C33v29Ev();
extern void _ZN7S3245C33v30Ev();
extern void _ZN7S3245C33v31Ev();
extern void _ZN7S3245C33v32Ev();
extern void _ZN7S3245C33v33Ev();
extern void _ZN7S3245C33v34Ev();
extern void _ZN7S3245C33v35Ev();
extern void _ZN7S3245C33v36Ev();
extern void _ZN7S3245C33v37Ev();
extern void _ZN7S3245C33v38Ev();
extern void _ZN7S3245C33v39Ev();
extern void _ZN7S3245C33v40Ev();
extern void _ZN7S3245C33v41Ev();
extern void _ZN7S3245C33v42Ev();
extern void _ZN7S3245C33v43Ev();
extern void _ZN7S3245C33v44Ev();
extern void _ZN7S3245C33v45Ev();
extern void _ZN7S3245C33v46Ev();
extern void _ZN7S3245C33v47Ev();
extern void _ZN7S3245C33v48Ev();
extern void _ZN7S3245C33v49Ev();
extern void _ZN7S3245C33v50Ev();
extern void _ZN7S3245C33v51Ev();
extern void _ZN7S3245C33v52Ev();
extern void _ZN7S3245C33v53Ev();
extern void _ZN7S3245C33v54Ev();
extern void _ZN7S3245C33v55Ev();
extern void _ZN7S3245C33v56Ev();
extern void _ZN7S3245C33v57Ev();
extern void _ZN7S3245C33v58Ev();
extern void _ZN7S3245C33v59Ev();
extern void _ZN7S3245C33v60Ev();
extern void _ZN7S3245C33v61Ev();
extern void _ZN7S3245C33v62Ev();
extern void _ZN7S3245C33v63Ev();
extern void _ZN7S3245C33v64Ev();
extern void _ZN7S3245C33v65Ev();
extern void _ZN7S3245C33v66Ev();
extern void _ZN7S3245C33v67Ev();
static  VTBL_ENTRY vtc_S3245C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3245C3[0]),
  (VTBL_ENTRY)&_ZN7S3245C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3245C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3245C3[];
extern  VTBL_ENTRY _ZTV7S3245C3[];
Class_Descriptor cd_S3245C3 = {  "S3245C3", // class name
  0,0,//no base classes
  &(vtc_S3245C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3245C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3245C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3245C2  : S3245C3 {
  int s3245c2f0;
  ::S1409C30 s3245c2f1;
  virtual  ~S3245C2(); // _ZN7S3245C2D1Ev
  virtual void  v68(); // _ZN7S3245C23v68Ev
  virtual void  v69(); // _ZN7S3245C23v69Ev
  virtual void  v70(); // _ZN7S3245C23v70Ev
  virtual void  v71(); // _ZN7S3245C23v71Ev
  virtual void  v72(); // _ZN7S3245C23v72Ev
  virtual void  v73(); // _ZN7S3245C23v73Ev
  virtual void  v74(); // _ZN7S3245C23v74Ev
  virtual void  v75(); // _ZN7S3245C23v75Ev
  virtual void  v76(); // _ZN7S3245C23v76Ev
  virtual void  v77(); // _ZN7S3245C23v77Ev
  virtual void  v78(); // _ZN7S3245C23v78Ev
  virtual void  v79(); // _ZN7S3245C23v79Ev
  virtual void  v80(); // _ZN7S3245C23v80Ev
  virtual void  v81(); // _ZN7S3245C23v81Ev
  virtual void  v82(); // _ZN7S3245C23v82Ev
  virtual void  v83(); // _ZN7S3245C23v83Ev
  virtual void  v84(); // _ZN7S3245C23v84Ev
  virtual void  v85(); // _ZN7S3245C23v85Ev
  S3245C2(); // tgen
};
//SIG(-1 S3245C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3245C2 ::~S3245C2(){ note_dtor("S3245C2", this);}
void  S3245C2 ::v68(){vfunc_called(this, "_ZN7S3245C23v68Ev");}
void  S3245C2 ::v69(){vfunc_called(this, "_ZN7S3245C23v69Ev");}
void  S3245C2 ::v70(){vfunc_called(this, "_ZN7S3245C23v70Ev");}
void  S3245C2 ::v71(){vfunc_called(this, "_ZN7S3245C23v71Ev");}
void  S3245C2 ::v72(){vfunc_called(this, "_ZN7S3245C23v72Ev");}
void  S3245C2 ::v73(){vfunc_called(this, "_ZN7S3245C23v73Ev");}
void  S3245C2 ::v74(){vfunc_called(this, "_ZN7S3245C23v74Ev");}
void  S3245C2 ::v75(){vfunc_called(this, "_ZN7S3245C23v75Ev");}
void  S3245C2 ::v76(){vfunc_called(this, "_ZN7S3245C23v76Ev");}
void  S3245C2 ::v77(){vfunc_called(this, "_ZN7S3245C23v77Ev");}
void  S3245C2 ::v78(){vfunc_called(this, "_ZN7S3245C23v78Ev");}
void  S3245C2 ::v79(){vfunc_called(this, "_ZN7S3245C23v79Ev");}
void  S3245C2 ::v80(){vfunc_called(this, "_ZN7S3245C23v80Ev");}
void  S3245C2 ::v81(){vfunc_called(this, "_ZN7S3245C23v81Ev");}
void  S3245C2 ::v82(){vfunc_called(this, "_ZN7S3245C23v82Ev");}
void  S3245C2 ::v83(){vfunc_called(this, "_ZN7S3245C23v83Ev");}
void  S3245C2 ::v84(){vfunc_called(this, "_ZN7S3245C23v84Ev");}
void  S3245C2 ::v85(){vfunc_called(this, "_ZN7S3245C23v85Ev");}
S3245C2 ::S3245C2(){ note_ctor("S3245C2", this);} // tgen

static void Test_S3245C2()
{
  extern Class_Descriptor cd_S3245C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3245C2, buf);
    S3245C2 *dp, &lv = *(dp=new (buf) S3245C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3245C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3245C2)");
    check_base_class_offset(lv, (S3245C3*), 0, "S3245C2");
    check_field_offset(lv, s3245c2f0, ABISELECT(96,60), "S3245C2.s3245c2f0");
    check_field_offset(lv, s3245c2f1, ABISELECT(104,64), "S3245C2.s3245c2f1");
    test_class_info(&lv, &cd_S3245C2);
    dp->~S3245C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3245C2(Test_S3245C2, "S3245C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3245C2C1Ev();
extern void _ZN7S3245C2D1Ev();
Name_Map name_map_S3245C2[] = {
  NSPAIR(_ZN7S3245C2C1Ev),
  NSPAIR(_ZN7S3245C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3245C3;
extern VTBL_ENTRY _ZTI7S3245C3[];
extern  VTBL_ENTRY _ZTV7S3245C3[];
static Base_Class bases_S3245C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3245C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3245C2[];
extern void _ZN7S3245C2D1Ev();
extern void _ZN7S3245C2D0Ev();
extern void _ZN7S3245C32v4Ev();
extern void _ZN7S3245C32v5Ev();
extern void _ZN7S3245C32v6Ev();
extern void _ZN7S3245C32v7Ev();
extern void _ZN7S3245C32v8Ev();
extern void _ZN7S3245C32v9Ev();
extern void _ZN7S3245C33v10Ev();
extern void _ZN7S3245C33v11Ev();
extern void _ZN7S3245C33v12Ev();
extern void _ZN7S3245C33v13Ev();
extern void _ZN7S3245C33v14Ev();
extern void _ZN7S3245C33v15Ev();
extern void _ZN7S3245C33v16Ev();
extern void _ZN7S3245C33v17Ev();
extern void _ZN7S3245C33v18Ev();
extern void _ZN7S3245C33v19Ev();
extern void _ZN7S3245C33v20Ev();
extern void _ZN7S3245C33v21Ev();
extern void _ZN7S3245C33v22Ev();
extern void _ZN7S3245C33v23Ev();
extern void _ZN7S3245C33v24Ev();
extern void _ZN7S3245C33v25Ev();
extern void _ZN7S3245C33v26Ev();
extern void _ZN7S3245C33v27Ev();
extern void _ZN7S3245C33v28Ev();
extern void _ZN7S3245C33v29Ev();
extern void _ZN7S3245C33v30Ev();
extern void _ZN7S3245C33v31Ev();
extern void _ZN7S3245C33v32Ev();
extern void _ZN7S3245C33v33Ev();
extern void _ZN7S3245C33v34Ev();
extern void _ZN7S3245C33v35Ev();
extern void _ZN7S3245C33v36Ev();
extern void _ZN7S3245C33v37Ev();
extern void _ZN7S3245C33v38Ev();
extern void _ZN7S3245C33v39Ev();
extern void _ZN7S3245C33v40Ev();
extern void _ZN7S3245C33v41Ev();
extern void _ZN7S3245C33v42Ev();
extern void _ZN7S3245C33v43Ev();
extern void _ZN7S3245C33v44Ev();
extern void _ZN7S3245C33v45Ev();
extern void _ZN7S3245C33v46Ev();
extern void _ZN7S3245C33v47Ev();
extern void _ZN7S3245C33v48Ev();
extern void _ZN7S3245C33v49Ev();
extern void _ZN7S3245C33v50Ev();
extern void _ZN7S3245C33v51Ev();
extern void _ZN7S3245C33v52Ev();
extern void _ZN7S3245C33v53Ev();
extern void _ZN7S3245C33v54Ev();
extern void _ZN7S3245C33v55Ev();
extern void _ZN7S3245C33v56Ev();
extern void _ZN7S3245C33v57Ev();
extern void _ZN7S3245C33v58Ev();
extern void _ZN7S3245C33v59Ev();
extern void _ZN7S3245C33v60Ev();
extern void _ZN7S3245C33v61Ev();
extern void _ZN7S3245C33v62Ev();
extern void _ZN7S3245C33v63Ev();
extern void _ZN7S3245C33v64Ev();
extern void _ZN7S3245C33v65Ev();
extern void _ZN7S3245C33v66Ev();
extern void _ZN7S3245C33v67Ev();
extern void _ZN7S3245C23v68Ev();
extern void _ZN7S3245C23v69Ev();
extern void _ZN7S3245C23v70Ev();
extern void _ZN7S3245C23v71Ev();
extern void _ZN7S3245C23v72Ev();
extern void _ZN7S3245C23v73Ev();
extern void _ZN7S3245C23v74Ev();
extern void _ZN7S3245C23v75Ev();
extern void _ZN7S3245C23v76Ev();
extern void _ZN7S3245C23v77Ev();
extern void _ZN7S3245C23v78Ev();
extern void _ZN7S3245C23v79Ev();
extern void _ZN7S3245C23v80Ev();
extern void _ZN7S3245C23v81Ev();
extern void _ZN7S3245C23v82Ev();
extern void _ZN7S3245C23v83Ev();
extern void _ZN7S3245C23v84Ev();
extern void _ZN7S3245C23v85Ev();
static  VTBL_ENTRY vtc_S3245C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3245C2[0]),
  (VTBL_ENTRY)&_ZN7S3245C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3245C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v85Ev,
};
extern VTBL_ENTRY _ZTI7S3245C2[];
extern  VTBL_ENTRY _ZTV7S3245C2[];
Class_Descriptor cd_S3245C2 = {  "S3245C2", // class name
  bases_S3245C2, 1,
  &(vtc_S3245C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3245C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3245C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3245C1  : S3245C2 {
  ::S1573C9_nt s3245c1f0;
  ::S1573C9_nt s3245c1f1;
  virtual  ~S3245C1(); // _ZN7S3245C1D1Ev
  virtual void  v1(); // _ZN7S3245C12v1Ev
  virtual void  v2(); // _ZN7S3245C12v2Ev
  virtual void  v3(); // _ZN7S3245C12v3Ev
  S3245C1(); // tgen
};
//SIG(1 S3245C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 FC8{ BC9{ m Fc[4] FC10{ BC11{ BC7}} Fi[2]} Fp} FC8}


 S3245C1 ::~S3245C1(){ note_dtor("S3245C1", this);}
void  S3245C1 ::v1(){vfunc_called(this, "_ZN7S3245C12v1Ev");}
void  S3245C1 ::v2(){vfunc_called(this, "_ZN7S3245C12v2Ev");}
void  S3245C1 ::v3(){vfunc_called(this, "_ZN7S3245C12v3Ev");}
S3245C1 ::S3245C1(){ note_ctor("S3245C1", this);} // tgen

static void Test_S3245C1()
{
  extern Class_Descriptor cd_S3245C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,34)];
    init_test(&cd_S3245C1, buf);
    S3245C1 *dp, &lv = *(dp=new (buf) S3245C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,132), "sizeof(S3245C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3245C1)");
    check_base_class_offset(lv, (S3245C3*)(S3245C2*), 0, "S3245C1");
    check_base_class_offset(lv, (S3245C2*), 0, "S3245C1");
    check_field_offset(lv, s3245c1f0, ABISELECT(120,76), "S3245C1.s3245c1f0");
    check_field_offset(lv, s3245c1f1, ABISELECT(160,104), "S3245C1.s3245c1f1");
    test_class_info(&lv, &cd_S3245C1);
    dp->~S3245C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3245C1(Test_S3245C1, "S3245C1", ABISELECT(200,132));

#else // __cplusplus

extern void _ZN7S3245C1C1Ev();
extern void _ZN7S3245C1D1Ev();
Name_Map name_map_S3245C1[] = {
  NSPAIR(_ZN7S3245C1C1Ev),
  NSPAIR(_ZN7S3245C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3245C3;
extern VTBL_ENTRY _ZTI7S3245C3[];
extern  VTBL_ENTRY _ZTV7S3245C3[];
extern Class_Descriptor cd_S3245C2;
extern VTBL_ENTRY _ZTI7S3245C2[];
extern  VTBL_ENTRY _ZTV7S3245C2[];
static Base_Class bases_S3245C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3245C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3245C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3245C1[];
extern void _ZN7S3245C1D1Ev();
extern void _ZN7S3245C1D0Ev();
extern void _ZN7S3245C32v4Ev();
extern void _ZN7S3245C32v5Ev();
extern void _ZN7S3245C32v6Ev();
extern void _ZN7S3245C32v7Ev();
extern void _ZN7S3245C32v8Ev();
extern void _ZN7S3245C32v9Ev();
extern void _ZN7S3245C33v10Ev();
extern void _ZN7S3245C33v11Ev();
extern void _ZN7S3245C33v12Ev();
extern void _ZN7S3245C33v13Ev();
extern void _ZN7S3245C33v14Ev();
extern void _ZN7S3245C33v15Ev();
extern void _ZN7S3245C33v16Ev();
extern void _ZN7S3245C33v17Ev();
extern void _ZN7S3245C33v18Ev();
extern void _ZN7S3245C33v19Ev();
extern void _ZN7S3245C33v20Ev();
extern void _ZN7S3245C33v21Ev();
extern void _ZN7S3245C33v22Ev();
extern void _ZN7S3245C33v23Ev();
extern void _ZN7S3245C33v24Ev();
extern void _ZN7S3245C33v25Ev();
extern void _ZN7S3245C33v26Ev();
extern void _ZN7S3245C33v27Ev();
extern void _ZN7S3245C33v28Ev();
extern void _ZN7S3245C33v29Ev();
extern void _ZN7S3245C33v30Ev();
extern void _ZN7S3245C33v31Ev();
extern void _ZN7S3245C33v32Ev();
extern void _ZN7S3245C33v33Ev();
extern void _ZN7S3245C33v34Ev();
extern void _ZN7S3245C33v35Ev();
extern void _ZN7S3245C33v36Ev();
extern void _ZN7S3245C33v37Ev();
extern void _ZN7S3245C33v38Ev();
extern void _ZN7S3245C33v39Ev();
extern void _ZN7S3245C33v40Ev();
extern void _ZN7S3245C33v41Ev();
extern void _ZN7S3245C33v42Ev();
extern void _ZN7S3245C33v43Ev();
extern void _ZN7S3245C33v44Ev();
extern void _ZN7S3245C33v45Ev();
extern void _ZN7S3245C33v46Ev();
extern void _ZN7S3245C33v47Ev();
extern void _ZN7S3245C33v48Ev();
extern void _ZN7S3245C33v49Ev();
extern void _ZN7S3245C33v50Ev();
extern void _ZN7S3245C33v51Ev();
extern void _ZN7S3245C33v52Ev();
extern void _ZN7S3245C33v53Ev();
extern void _ZN7S3245C33v54Ev();
extern void _ZN7S3245C33v55Ev();
extern void _ZN7S3245C33v56Ev();
extern void _ZN7S3245C33v57Ev();
extern void _ZN7S3245C33v58Ev();
extern void _ZN7S3245C33v59Ev();
extern void _ZN7S3245C33v60Ev();
extern void _ZN7S3245C33v61Ev();
extern void _ZN7S3245C33v62Ev();
extern void _ZN7S3245C33v63Ev();
extern void _ZN7S3245C33v64Ev();
extern void _ZN7S3245C33v65Ev();
extern void _ZN7S3245C33v66Ev();
extern void _ZN7S3245C33v67Ev();
extern void _ZN7S3245C23v68Ev();
extern void _ZN7S3245C23v69Ev();
extern void _ZN7S3245C23v70Ev();
extern void _ZN7S3245C23v71Ev();
extern void _ZN7S3245C23v72Ev();
extern void _ZN7S3245C23v73Ev();
extern void _ZN7S3245C23v74Ev();
extern void _ZN7S3245C23v75Ev();
extern void _ZN7S3245C23v76Ev();
extern void _ZN7S3245C23v77Ev();
extern void _ZN7S3245C23v78Ev();
extern void _ZN7S3245C23v79Ev();
extern void _ZN7S3245C23v80Ev();
extern void _ZN7S3245C23v81Ev();
extern void _ZN7S3245C23v82Ev();
extern void _ZN7S3245C23v83Ev();
extern void _ZN7S3245C23v84Ev();
extern void _ZN7S3245C23v85Ev();
extern void _ZN7S3245C12v1Ev();
extern void _ZN7S3245C12v2Ev();
extern void _ZN7S3245C12v3Ev();
static  VTBL_ENTRY vtc_S3245C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3245C1[0]),
  (VTBL_ENTRY)&_ZN7S3245C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3245C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3245C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3245C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3245C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3245C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3245C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3245C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3245C1[];
extern  VTBL_ENTRY _ZTV7S3245C1[];
Class_Descriptor cd_S3245C1 = {  "S3245C1", // class name
  bases_S3245C1, 2,
  &(vtc_S3245C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,132), // object size
  NSPAIRA(_ZTI7S3245C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3245C1),89, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3427C3  {
  int s3427c3f0;
  __tsi64 s3427c3f1;
  void *s3427c3f2[4];
  int s3427c3f3[2];
  void *s3427c3f4;
  ::S1409C5_nt s3427c3f5;
  void *s3427c3f6[2];
  virtual  ~S3427C3(); // _ZN7S3427C3D1Ev
  virtual void  v8(); // _ZN7S3427C32v8Ev
  virtual void  v9(); // _ZN7S3427C32v9Ev
  virtual void  v10(); // _ZN7S3427C33v10Ev
  virtual void  v11(); // _ZN7S3427C33v11Ev
  virtual void  v12(); // _ZN7S3427C33v12Ev
  virtual void  v13(); // _ZN7S3427C33v13Ev
  virtual void  v14(); // _ZN7S3427C33v14Ev
  virtual void  v15(); // _ZN7S3427C33v15Ev
  virtual void  v16(); // _ZN7S3427C33v16Ev
  virtual void  v17(); // _ZN7S3427C33v17Ev
  virtual void  v18(); // _ZN7S3427C33v18Ev
  virtual void  v19(); // _ZN7S3427C33v19Ev
  virtual void  v20(); // _ZN7S3427C33v20Ev
  virtual void  v21(); // _ZN7S3427C33v21Ev
  virtual void  v22(); // _ZN7S3427C33v22Ev
  virtual void  v23(); // _ZN7S3427C33v23Ev
  virtual void  v24(); // _ZN7S3427C33v24Ev
  virtual void  v25(); // _ZN7S3427C33v25Ev
  virtual void  v26(); // _ZN7S3427C33v26Ev
  virtual void  v27(); // _ZN7S3427C33v27Ev
  virtual void  v28(); // _ZN7S3427C33v28Ev
  virtual void  v29(); // _ZN7S3427C33v29Ev
  virtual void  v30(); // _ZN7S3427C33v30Ev
  virtual void  v31(); // _ZN7S3427C33v31Ev
  virtual void  v32(); // _ZN7S3427C33v32Ev
  virtual void  v33(); // _ZN7S3427C33v33Ev
  virtual void  v34(); // _ZN7S3427C33v34Ev
  virtual void  v35(); // _ZN7S3427C33v35Ev
  virtual void  v36(); // _ZN7S3427C33v36Ev
  virtual void  v37(); // _ZN7S3427C33v37Ev
  virtual void  v38(); // _ZN7S3427C33v38Ev
  virtual void  v39(); // _ZN7S3427C33v39Ev
  virtual void  v40(); // _ZN7S3427C33v40Ev
  virtual void  v41(); // _ZN7S3427C33v41Ev
  virtual void  v42(); // _ZN7S3427C33v42Ev
  virtual void  v43(); // _ZN7S3427C33v43Ev
  virtual void  v44(); // _ZN7S3427C33v44Ev
  virtual void  v45(); // _ZN7S3427C33v45Ev
  virtual void  v46(); // _ZN7S3427C33v46Ev
  virtual void  v47(); // _ZN7S3427C33v47Ev
  virtual void  v48(); // _ZN7S3427C33v48Ev
  virtual void  v49(); // _ZN7S3427C33v49Ev
  virtual void  v50(); // _ZN7S3427C33v50Ev
  virtual void  v51(); // _ZN7S3427C33v51Ev
  virtual void  v52(); // _ZN7S3427C33v52Ev
  virtual void  v53(); // _ZN7S3427C33v53Ev
  virtual void  v54(); // _ZN7S3427C33v54Ev
  virtual void  v55(); // _ZN7S3427C33v55Ev
  virtual void  v56(); // _ZN7S3427C33v56Ev
  virtual void  v57(); // _ZN7S3427C33v57Ev
  virtual void  v58(); // _ZN7S3427C33v58Ev
  virtual void  v59(); // _ZN7S3427C33v59Ev
  virtual void  v60(); // _ZN7S3427C33v60Ev
  virtual void  v61(); // _ZN7S3427C33v61Ev
  virtual void  v62(); // _ZN7S3427C33v62Ev
  virtual void  v63(); // _ZN7S3427C33v63Ev
  virtual void  v64(); // _ZN7S3427C33v64Ev
  virtual void  v65(); // _ZN7S3427C33v65Ev
  virtual void  v66(); // _ZN7S3427C33v66Ev
  virtual void  v67(); // _ZN7S3427C33v67Ev
  virtual void  v68(); // _ZN7S3427C33v68Ev
  virtual void  v69(); // _ZN7S3427C33v69Ev
  virtual void  v70(); // _ZN7S3427C33v70Ev
  virtual void  v71(); // _ZN7S3427C33v71Ev
  S3427C3(); // tgen
};
//SIG(-1 S3427C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3427C3 ::~S3427C3(){ note_dtor("S3427C3", this);}
void  S3427C3 ::v8(){vfunc_called(this, "_ZN7S3427C32v8Ev");}
void  S3427C3 ::v9(){vfunc_called(this, "_ZN7S3427C32v9Ev");}
void  S3427C3 ::v10(){vfunc_called(this, "_ZN7S3427C33v10Ev");}
void  S3427C3 ::v11(){vfunc_called(this, "_ZN7S3427C33v11Ev");}
void  S3427C3 ::v12(){vfunc_called(this, "_ZN7S3427C33v12Ev");}
void  S3427C3 ::v13(){vfunc_called(this, "_ZN7S3427C33v13Ev");}
void  S3427C3 ::v14(){vfunc_called(this, "_ZN7S3427C33v14Ev");}
void  S3427C3 ::v15(){vfunc_called(this, "_ZN7S3427C33v15Ev");}
void  S3427C3 ::v16(){vfunc_called(this, "_ZN7S3427C33v16Ev");}
void  S3427C3 ::v17(){vfunc_called(this, "_ZN7S3427C33v17Ev");}
void  S3427C3 ::v18(){vfunc_called(this, "_ZN7S3427C33v18Ev");}
void  S3427C3 ::v19(){vfunc_called(this, "_ZN7S3427C33v19Ev");}
void  S3427C3 ::v20(){vfunc_called(this, "_ZN7S3427C33v20Ev");}
void  S3427C3 ::v21(){vfunc_called(this, "_ZN7S3427C33v21Ev");}
void  S3427C3 ::v22(){vfunc_called(this, "_ZN7S3427C33v22Ev");}
void  S3427C3 ::v23(){vfunc_called(this, "_ZN7S3427C33v23Ev");}
void  S3427C3 ::v24(){vfunc_called(this, "_ZN7S3427C33v24Ev");}
void  S3427C3 ::v25(){vfunc_called(this, "_ZN7S3427C33v25Ev");}
void  S3427C3 ::v26(){vfunc_called(this, "_ZN7S3427C33v26Ev");}
void  S3427C3 ::v27(){vfunc_called(this, "_ZN7S3427C33v27Ev");}
void  S3427C3 ::v28(){vfunc_called(this, "_ZN7S3427C33v28Ev");}
void  S3427C3 ::v29(){vfunc_called(this, "_ZN7S3427C33v29Ev");}
void  S3427C3 ::v30(){vfunc_called(this, "_ZN7S3427C33v30Ev");}
void  S3427C3 ::v31(){vfunc_called(this, "_ZN7S3427C33v31Ev");}
void  S3427C3 ::v32(){vfunc_called(this, "_ZN7S3427C33v32Ev");}
void  S3427C3 ::v33(){vfunc_called(this, "_ZN7S3427C33v33Ev");}
void  S3427C3 ::v34(){vfunc_called(this, "_ZN7S3427C33v34Ev");}
void  S3427C3 ::v35(){vfunc_called(this, "_ZN7S3427C33v35Ev");}
void  S3427C3 ::v36(){vfunc_called(this, "_ZN7S3427C33v36Ev");}
void  S3427C3 ::v37(){vfunc_called(this, "_ZN7S3427C33v37Ev");}
void  S3427C3 ::v38(){vfunc_called(this, "_ZN7S3427C33v38Ev");}
void  S3427C3 ::v39(){vfunc_called(this, "_ZN7S3427C33v39Ev");}
void  S3427C3 ::v40(){vfunc_called(this, "_ZN7S3427C33v40Ev");}
void  S3427C3 ::v41(){vfunc_called(this, "_ZN7S3427C33v41Ev");}
void  S3427C3 ::v42(){vfunc_called(this, "_ZN7S3427C33v42Ev");}
void  S3427C3 ::v43(){vfunc_called(this, "_ZN7S3427C33v43Ev");}
void  S3427C3 ::v44(){vfunc_called(this, "_ZN7S3427C33v44Ev");}
void  S3427C3 ::v45(){vfunc_called(this, "_ZN7S3427C33v45Ev");}
void  S3427C3 ::v46(){vfunc_called(this, "_ZN7S3427C33v46Ev");}
void  S3427C3 ::v47(){vfunc_called(this, "_ZN7S3427C33v47Ev");}
void  S3427C3 ::v48(){vfunc_called(this, "_ZN7S3427C33v48Ev");}
void  S3427C3 ::v49(){vfunc_called(this, "_ZN7S3427C33v49Ev");}
void  S3427C3 ::v50(){vfunc_called(this, "_ZN7S3427C33v50Ev");}
void  S3427C3 ::v51(){vfunc_called(this, "_ZN7S3427C33v51Ev");}
void  S3427C3 ::v52(){vfunc_called(this, "_ZN7S3427C33v52Ev");}
void  S3427C3 ::v53(){vfunc_called(this, "_ZN7S3427C33v53Ev");}
void  S3427C3 ::v54(){vfunc_called(this, "_ZN7S3427C33v54Ev");}
void  S3427C3 ::v55(){vfunc_called(this, "_ZN7S3427C33v55Ev");}
void  S3427C3 ::v56(){vfunc_called(this, "_ZN7S3427C33v56Ev");}
void  S3427C3 ::v57(){vfunc_called(this, "_ZN7S3427C33v57Ev");}
void  S3427C3 ::v58(){vfunc_called(this, "_ZN7S3427C33v58Ev");}
void  S3427C3 ::v59(){vfunc_called(this, "_ZN7S3427C33v59Ev");}
void  S3427C3 ::v60(){vfunc_called(this, "_ZN7S3427C33v60Ev");}
void  S3427C3 ::v61(){vfunc_called(this, "_ZN7S3427C33v61Ev");}
void  S3427C3 ::v62(){vfunc_called(this, "_ZN7S3427C33v62Ev");}
void  S3427C3 ::v63(){vfunc_called(this, "_ZN7S3427C33v63Ev");}
void  S3427C3 ::v64(){vfunc_called(this, "_ZN7S3427C33v64Ev");}
void  S3427C3 ::v65(){vfunc_called(this, "_ZN7S3427C33v65Ev");}
void  S3427C3 ::v66(){vfunc_called(this, "_ZN7S3427C33v66Ev");}
void  S3427C3 ::v67(){vfunc_called(this, "_ZN7S3427C33v67Ev");}
void  S3427C3 ::v68(){vfunc_called(this, "_ZN7S3427C33v68Ev");}
void  S3427C3 ::v69(){vfunc_called(this, "_ZN7S3427C33v69Ev");}
void  S3427C3 ::v70(){vfunc_called(this, "_ZN7S3427C33v70Ev");}
void  S3427C3 ::v71(){vfunc_called(this, "_ZN7S3427C33v71Ev");}
S3427C3 ::S3427C3(){ note_ctor("S3427C3", this);} // tgen

static void Test_S3427C3()
{
  extern Class_Descriptor cd_S3427C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3427C3, buf);
    S3427C3 *dp, &lv = *(dp=new (buf) S3427C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3427C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3427C3)");
    check_field_offset(lv, s3427c3f0, ABISELECT(8,4), "S3427C3.s3427c3f0");
    check_field_offset(lv, s3427c3f1, ABISELECT(16,8), "S3427C3.s3427c3f1");
    check_field_offset(lv, s3427c3f2, ABISELECT(24,16), "S3427C3.s3427c3f2");
    check_field_offset(lv, s3427c3f3, ABISELECT(56,32), "S3427C3.s3427c3f3");
    check_field_offset(lv, s3427c3f4, ABISELECT(64,40), "S3427C3.s3427c3f4");
    check_field_offset(lv, s3427c3f5, ABISELECT(72,44), "S3427C3.s3427c3f5");
    check_field_offset(lv, s3427c3f6, ABISELECT(80,52), "S3427C3.s3427c3f6");
    test_class_info(&lv, &cd_S3427C3);
    dp->~S3427C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3427C3(Test_S3427C3, "S3427C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3427C3C1Ev();
extern void _ZN7S3427C3D1Ev();
Name_Map name_map_S3427C3[] = {
  NSPAIR(_ZN7S3427C3C1Ev),
  NSPAIR(_ZN7S3427C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3427C3[];
extern void _ZN7S3427C3D1Ev();
extern void _ZN7S3427C3D0Ev();
extern void _ZN7S3427C32v8Ev();
extern void _ZN7S3427C32v9Ev();
extern void _ZN7S3427C33v10Ev();
extern void _ZN7S3427C33v11Ev();
extern void _ZN7S3427C33v12Ev();
extern void _ZN7S3427C33v13Ev();
extern void _ZN7S3427C33v14Ev();
extern void _ZN7S3427C33v15Ev();
extern void _ZN7S3427C33v16Ev();
extern void _ZN7S3427C33v17Ev();
extern void _ZN7S3427C33v18Ev();
extern void _ZN7S3427C33v19Ev();
extern void _ZN7S3427C33v20Ev();
extern void _ZN7S3427C33v21Ev();
extern void _ZN7S3427C33v22Ev();
extern void _ZN7S3427C33v23Ev();
extern void _ZN7S3427C33v24Ev();
extern void _ZN7S3427C33v25Ev();
extern void _ZN7S3427C33v26Ev();
extern void _ZN7S3427C33v27Ev();
extern void _ZN7S3427C33v28Ev();
extern void _ZN7S3427C33v29Ev();
extern void _ZN7S3427C33v30Ev();
extern void _ZN7S3427C33v31Ev();
extern void _ZN7S3427C33v32Ev();
extern void _ZN7S3427C33v33Ev();
extern void _ZN7S3427C33v34Ev();
extern void _ZN7S3427C33v35Ev();
extern void _ZN7S3427C33v36Ev();
extern void _ZN7S3427C33v37Ev();
extern void _ZN7S3427C33v38Ev();
extern void _ZN7S3427C33v39Ev();
extern void _ZN7S3427C33v40Ev();
extern void _ZN7S3427C33v41Ev();
extern void _ZN7S3427C33v42Ev();
extern void _ZN7S3427C33v43Ev();
extern void _ZN7S3427C33v44Ev();
extern void _ZN7S3427C33v45Ev();
extern void _ZN7S3427C33v46Ev();
extern void _ZN7S3427C33v47Ev();
extern void _ZN7S3427C33v48Ev();
extern void _ZN7S3427C33v49Ev();
extern void _ZN7S3427C33v50Ev();
extern void _ZN7S3427C33v51Ev();
extern void _ZN7S3427C33v52Ev();
extern void _ZN7S3427C33v53Ev();
extern void _ZN7S3427C33v54Ev();
extern void _ZN7S3427C33v55Ev();
extern void _ZN7S3427C33v56Ev();
extern void _ZN7S3427C33v57Ev();
extern void _ZN7S3427C33v58Ev();
extern void _ZN7S3427C33v59Ev();
extern void _ZN7S3427C33v60Ev();
extern void _ZN7S3427C33v61Ev();
extern void _ZN7S3427C33v62Ev();
extern void _ZN7S3427C33v63Ev();
extern void _ZN7S3427C33v64Ev();
extern void _ZN7S3427C33v65Ev();
extern void _ZN7S3427C33v66Ev();
extern void _ZN7S3427C33v67Ev();
extern void _ZN7S3427C33v68Ev();
extern void _ZN7S3427C33v69Ev();
extern void _ZN7S3427C33v70Ev();
extern void _ZN7S3427C33v71Ev();
static  VTBL_ENTRY vtc_S3427C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3427C3[0]),
  (VTBL_ENTRY)&_ZN7S3427C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3427C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3427C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3427C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v71Ev,
};
extern VTBL_ENTRY _ZTI7S3427C3[];
extern  VTBL_ENTRY _ZTV7S3427C3[];
Class_Descriptor cd_S3427C3 = {  "S3427C3", // class name
  0,0,//no base classes
  &(vtc_S3427C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3427C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3427C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3427C2  : S3427C3 {
  void *s3427c2f0;
  unsigned int s3427c2f1:1;
  unsigned int s3427c2f2:1;
  unsigned int s3427c2f3:1;
  unsigned int s3427c2f4:1;
  unsigned int s3427c2f5:1;
  int s3427c2f6[7];
  void *s3427c2f7[2];
  virtual  ~S3427C2(); // _ZN7S3427C2D1Ev
  virtual void  v72(); // _ZN7S3427C23v72Ev
  virtual void  v73(); // _ZN7S3427C23v73Ev
  virtual void  v74(); // _ZN7S3427C23v74Ev
  virtual void  v75(); // _ZN7S3427C23v75Ev
  virtual void  v76(); // _ZN7S3427C23v76Ev
  virtual void  v77(); // _ZN7S3427C23v77Ev
  virtual void  v78(); // _ZN7S3427C23v78Ev
  virtual void  v79(); // _ZN7S3427C23v79Ev
  virtual void  v80(); // _ZN7S3427C23v80Ev
  virtual void  v81(); // _ZN7S3427C23v81Ev
  virtual void  v82(); // _ZN7S3427C23v82Ev
  S3427C2(); // tgen
};
//SIG(-1 S3427C2) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]}


 S3427C2 ::~S3427C2(){ note_dtor("S3427C2", this);}
void  S3427C2 ::v72(){vfunc_called(this, "_ZN7S3427C23v72Ev");}
void  S3427C2 ::v73(){vfunc_called(this, "_ZN7S3427C23v73Ev");}
void  S3427C2 ::v74(){vfunc_called(this, "_ZN7S3427C23v74Ev");}
void  S3427C2 ::v75(){vfunc_called(this, "_ZN7S3427C23v75Ev");}
void  S3427C2 ::v76(){vfunc_called(this, "_ZN7S3427C23v76Ev");}
void  S3427C2 ::v77(){vfunc_called(this, "_ZN7S3427C23v77Ev");}
void  S3427C2 ::v78(){vfunc_called(this, "_ZN7S3427C23v78Ev");}
void  S3427C2 ::v79(){vfunc_called(this, "_ZN7S3427C23v79Ev");}
void  S3427C2 ::v80(){vfunc_called(this, "_ZN7S3427C23v80Ev");}
void  S3427C2 ::v81(){vfunc_called(this, "_ZN7S3427C23v81Ev");}
void  S3427C2 ::v82(){vfunc_called(this, "_ZN7S3427C23v82Ev");}
S3427C2 ::S3427C2(){ note_ctor("S3427C2", this);} // tgen

static void Test_S3427C2()
{
  extern Class_Descriptor cd_S3427C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S3427C2, buf);
    S3427C2 *dp, &lv = *(dp=new (buf) S3427C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S3427C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3427C2)");
    check_base_class_offset(lv, (S3427C3*), 0, "S3427C2");
    check_field_offset(lv, s3427c2f0, ABISELECT(96,60), "S3427C2.s3427c2f0");
    set_bf_and_test(lv, s3427c2f1, ABISELECT(104,64), 0, 1, 1, "S3427C2");
    set_bf_and_test(lv, s3427c2f2, ABISELECT(104,64), 1, 1, 1, "S3427C2");
    set_bf_and_test(lv, s3427c2f3, ABISELECT(104,64), 2, 1, 1, "S3427C2");
    set_bf_and_test(lv, s3427c2f4, ABISELECT(104,64), 3, 1, 1, "S3427C2");
    set_bf_and_test(lv, s3427c2f5, ABISELECT(104,64), 4, 1, 1, "S3427C2");
    check_field_offset(lv, s3427c2f6, ABISELECT(108,68), "S3427C2.s3427c2f6");
    check_field_offset(lv, s3427c2f7, ABISELECT(136,96), "S3427C2.s3427c2f7");
    test_class_info(&lv, &cd_S3427C2);
    dp->~S3427C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3427C2(Test_S3427C2, "S3427C2", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN7S3427C2C1Ev();
extern void _ZN7S3427C2D1Ev();
Name_Map name_map_S3427C2[] = {
  NSPAIR(_ZN7S3427C2C1Ev),
  NSPAIR(_ZN7S3427C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3427C3;
extern VTBL_ENTRY _ZTI7S3427C3[];
extern  VTBL_ENTRY _ZTV7S3427C3[];
static Base_Class bases_S3427C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3427C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3427C2[];
extern void _ZN7S3427C2D1Ev();
extern void _ZN7S3427C2D0Ev();
extern void _ZN7S3427C32v8Ev();
extern void _ZN7S3427C32v9Ev();
extern void _ZN7S3427C33v10Ev();
extern void _ZN7S3427C33v11Ev();
extern void _ZN7S3427C33v12Ev();
extern void _ZN7S3427C33v13Ev();
extern void _ZN7S3427C33v14Ev();
extern void _ZN7S3427C33v15Ev();
extern void _ZN7S3427C33v16Ev();
extern void _ZN7S3427C33v17Ev();
extern void _ZN7S3427C33v18Ev();
extern void _ZN7S3427C33v19Ev();
extern void _ZN7S3427C33v20Ev();
extern void _ZN7S3427C33v21Ev();
extern void _ZN7S3427C33v22Ev();
extern void _ZN7S3427C33v23Ev();
extern void _ZN7S3427C33v24Ev();
extern void _ZN7S3427C33v25Ev();
extern void _ZN7S3427C33v26Ev();
extern void _ZN7S3427C33v27Ev();
extern void _ZN7S3427C33v28Ev();
extern void _ZN7S3427C33v29Ev();
extern void _ZN7S3427C33v30Ev();
extern void _ZN7S3427C33v31Ev();
extern void _ZN7S3427C33v32Ev();
extern void _ZN7S3427C33v33Ev();
extern void _ZN7S3427C33v34Ev();
extern void _ZN7S3427C33v35Ev();
extern void _ZN7S3427C33v36Ev();
extern void _ZN7S3427C33v37Ev();
extern void _ZN7S3427C33v38Ev();
extern void _ZN7S3427C33v39Ev();
extern void _ZN7S3427C33v40Ev();
extern void _ZN7S3427C33v41Ev();
extern void _ZN7S3427C33v42Ev();
extern void _ZN7S3427C33v43Ev();
extern void _ZN7S3427C33v44Ev();
extern void _ZN7S3427C33v45Ev();
extern void _ZN7S3427C33v46Ev();
extern void _ZN7S3427C33v47Ev();
extern void _ZN7S3427C33v48Ev();
extern void _ZN7S3427C33v49Ev();
extern void _ZN7S3427C33v50Ev();
extern void _ZN7S3427C33v51Ev();
extern void _ZN7S3427C33v52Ev();
extern void _ZN7S3427C33v53Ev();
extern void _ZN7S3427C33v54Ev();
extern void _ZN7S3427C33v55Ev();
extern void _ZN7S3427C33v56Ev();
extern void _ZN7S3427C33v57Ev();
extern void _ZN7S3427C33v58Ev();
extern void _ZN7S3427C33v59Ev();
extern void _ZN7S3427C33v60Ev();
extern void _ZN7S3427C33v61Ev();
extern void _ZN7S3427C33v62Ev();
extern void _ZN7S3427C33v63Ev();
extern void _ZN7S3427C33v64Ev();
extern void _ZN7S3427C33v65Ev();
extern void _ZN7S3427C33v66Ev();
extern void _ZN7S3427C33v67Ev();
extern void _ZN7S3427C33v68Ev();
extern void _ZN7S3427C33v69Ev();
extern void _ZN7S3427C33v70Ev();
extern void _ZN7S3427C33v71Ev();
extern void _ZN7S3427C23v72Ev();
extern void _ZN7S3427C23v73Ev();
extern void _ZN7S3427C23v74Ev();
extern void _ZN7S3427C23v75Ev();
extern void _ZN7S3427C23v76Ev();
extern void _ZN7S3427C23v77Ev();
extern void _ZN7S3427C23v78Ev();
extern void _ZN7S3427C23v79Ev();
extern void _ZN7S3427C23v80Ev();
extern void _ZN7S3427C23v81Ev();
extern void _ZN7S3427C23v82Ev();
static  VTBL_ENTRY vtc_S3427C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3427C2[0]),
  (VTBL_ENTRY)&_ZN7S3427C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3427C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3427C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3427C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v82Ev,
};
extern VTBL_ENTRY _ZTI7S3427C2[];
extern  VTBL_ENTRY _ZTV7S3427C2[];
Class_Descriptor cd_S3427C2 = {  "S3427C2", // class name
  bases_S3427C2, 1,
  &(vtc_S3427C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI7S3427C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3427C2),79, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3427C5_nt  {
  virtual  ~S3427C5_nt(); // _ZN10S3427C5_ntD1Ev
  virtual void  v83(); // _ZN10S3427C5_nt3v83Ev
  virtual void  v84(); // _ZN10S3427C5_nt3v84Ev
  virtual void  v85(); // _ZN10S3427C5_nt3v85Ev
  S3427C5_nt(); // tgen
};
//SIG(-1 S3427C5_nt) C1{ vd v1 v2 v3}


 S3427C5_nt ::~S3427C5_nt(){ note_dtor("S3427C5_nt", this);}
void  S3427C5_nt ::v83(){vfunc_called(this, "_ZN10S3427C5_nt3v83Ev");}
void  S3427C5_nt ::v84(){vfunc_called(this, "_ZN10S3427C5_nt3v84Ev");}
void  S3427C5_nt ::v85(){vfunc_called(this, "_ZN10S3427C5_nt3v85Ev");}
S3427C5_nt ::S3427C5_nt(){ note_ctor("S3427C5_nt", this);} // tgen

//skip512 S3427C5_nt

#else // __cplusplus

extern void _ZN10S3427C5_ntC1Ev();
extern void _ZN10S3427C5_ntD1Ev();
Name_Map name_map_S3427C5_nt[] = {
  NSPAIR(_ZN10S3427C5_ntC1Ev),
  NSPAIR(_ZN10S3427C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3427C5_nt[];
extern void _ZN10S3427C5_ntD1Ev();
extern void _ZN10S3427C5_ntD0Ev();
extern void _ZN10S3427C5_nt3v83Ev();
extern void _ZN10S3427C5_nt3v84Ev();
extern void _ZN10S3427C5_nt3v85Ev();
static  VTBL_ENTRY vtc_S3427C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3427C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S3427C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3427C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3427C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3427C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3427C5_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI10S3427C5_nt[];
VTBL_ENTRY *P__ZTI10S3427C5_nt = _ZTI10S3427C5_nt; 
extern  VTBL_ENTRY _ZTV10S3427C5_nt[];
Class_Descriptor cd_S3427C5_nt = {  "S3427C5_nt", // class name
  0,0,//no base classes
  &(vtc_S3427C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3427C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3427C5_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3427C1  : S3427C2 , S3427C5_nt {
  int s3427c1f0;
  ::S7161C9 s3427c1f1;
  virtual  ~S3427C1(); // _ZN7S3427C1D1Ev
  virtual void  v1(); // _ZN7S3427C12v1Ev
  virtual void  v2(); // _ZN7S3427C12v2Ev
  virtual void  v3(); // _ZN7S3427C12v3Ev
  virtual void  v4(); // _ZN7S3427C12v4Ev
  virtual void  v5(); // _ZN7S3427C12v5Ev
  virtual void  v6(); // _ZN7S3427C12v6Ev
  virtual void  v7(); // _ZN7S3427C12v7Ev
  S3427C1(); // tgen
};
//SIG(1 S3427C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]} BC5{ vd v83 v84 v85} vd v1 v2 v3 v4 v5 v6 v7 Fi FC6{ BC7{ m Fp Fi[2]}}}


 S3427C1 ::~S3427C1(){ note_dtor("S3427C1", this);}
void  S3427C1 ::v1(){vfunc_called(this, "_ZN7S3427C12v1Ev");}
void  S3427C1 ::v2(){vfunc_called(this, "_ZN7S3427C12v2Ev");}
void  S3427C1 ::v3(){vfunc_called(this, "_ZN7S3427C12v3Ev");}
void  S3427C1 ::v4(){vfunc_called(this, "_ZN7S3427C12v4Ev");}
void  S3427C1 ::v5(){vfunc_called(this, "_ZN7S3427C12v5Ev");}
void  S3427C1 ::v6(){vfunc_called(this, "_ZN7S3427C12v6Ev");}
void  S3427C1 ::v7(){vfunc_called(this, "_ZN7S3427C12v7Ev");}
S3427C1 ::S3427C1(){ note_ctor("S3427C1", this);} // tgen

static void Test_S3427C1()
{
  extern Class_Descriptor cd_S3427C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S3427C1, buf);
    S3427C1 *dp, &lv = *(dp=new (buf) S3427C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S3427C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3427C1)");
    check_base_class_offset(lv, (S3427C3*)(S3427C2*), 0, "S3427C1");
    check_base_class_offset(lv, (S3427C2*), 0, "S3427C1");
    check_base_class_offset(lv, (S3427C5_nt*), ABISELECT(152,104), "S3427C1");
    check_field_offset(lv, s3427c1f0, ABISELECT(160,108), "S3427C1.s3427c1f0");
    check_field_offset(lv, s3427c1f1, ABISELECT(168,112), "S3427C1.s3427c1f1");
    test_class_info(&lv, &cd_S3427C1);
    dp->~S3427C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3427C1(Test_S3427C1, "S3427C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S3427C1C1Ev();
extern void _ZN7S3427C1D1Ev();
Name_Map name_map_S3427C1[] = {
  NSPAIR(_ZN7S3427C1C1Ev),
  NSPAIR(_ZN7S3427C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3427C3;
extern VTBL_ENTRY _ZTI7S3427C3[];
extern  VTBL_ENTRY _ZTV7S3427C3[];
extern Class_Descriptor cd_S3427C2;
extern VTBL_ENTRY _ZTI7S3427C2[];
extern  VTBL_ENTRY _ZTV7S3427C2[];
extern Class_Descriptor cd_S3427C5_nt;
extern VTBL_ENTRY _ZTI10S3427C5_nt[];
extern  VTBL_ENTRY _ZTV10S3427C5_nt[];
static Base_Class bases_S3427C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3427C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3427C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3427C5_nt,    ABISELECT(152,104), //bcp->offset
    86, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3427C1[];
extern void _ZN7S3427C1D1Ev();
extern void _ZN7S3427C1D0Ev();
extern void _ZN7S3427C32v8Ev();
extern void _ZN7S3427C32v9Ev();
extern void _ZN7S3427C33v10Ev();
extern void _ZN7S3427C33v11Ev();
extern void _ZN7S3427C33v12Ev();
extern void _ZN7S3427C33v13Ev();
extern void _ZN7S3427C33v14Ev();
extern void _ZN7S3427C33v15Ev();
extern void _ZN7S3427C33v16Ev();
extern void _ZN7S3427C33v17Ev();
extern void _ZN7S3427C33v18Ev();
extern void _ZN7S3427C33v19Ev();
extern void _ZN7S3427C33v20Ev();
extern void _ZN7S3427C33v21Ev();
extern void _ZN7S3427C33v22Ev();
extern void _ZN7S3427C33v23Ev();
extern void _ZN7S3427C33v24Ev();
extern void _ZN7S3427C33v25Ev();
extern void _ZN7S3427C33v26Ev();
extern void _ZN7S3427C33v27Ev();
extern void _ZN7S3427C33v28Ev();
extern void _ZN7S3427C33v29Ev();
extern void _ZN7S3427C33v30Ev();
extern void _ZN7S3427C33v31Ev();
extern void _ZN7S3427C33v32Ev();
extern void _ZN7S3427C33v33Ev();
extern void _ZN7S3427C33v34Ev();
extern void _ZN7S3427C33v35Ev();
extern void _ZN7S3427C33v36Ev();
extern void _ZN7S3427C33v37Ev();
extern void _ZN7S3427C33v38Ev();
extern void _ZN7S3427C33v39Ev();
extern void _ZN7S3427C33v40Ev();
extern void _ZN7S3427C33v41Ev();
extern void _ZN7S3427C33v42Ev();
extern void _ZN7S3427C33v43Ev();
extern void _ZN7S3427C33v44Ev();
extern void _ZN7S3427C33v45Ev();
extern void _ZN7S3427C33v46Ev();
extern void _ZN7S3427C33v47Ev();
extern void _ZN7S3427C33v48Ev();
extern void _ZN7S3427C33v49Ev();
extern void _ZN7S3427C33v50Ev();
extern void _ZN7S3427C33v51Ev();
extern void _ZN7S3427C33v52Ev();
extern void _ZN7S3427C33v53Ev();
extern void _ZN7S3427C33v54Ev();
extern void _ZN7S3427C33v55Ev();
extern void _ZN7S3427C33v56Ev();
extern void _ZN7S3427C33v57Ev();
extern void _ZN7S3427C33v58Ev();
extern void _ZN7S3427C33v59Ev();
extern void _ZN7S3427C33v60Ev();
extern void _ZN7S3427C33v61Ev();
extern void _ZN7S3427C33v62Ev();
extern void _ZN7S3427C33v63Ev();
extern void _ZN7S3427C33v64Ev();
extern void _ZN7S3427C33v65Ev();
extern void _ZN7S3427C33v66Ev();
extern void _ZN7S3427C33v67Ev();
extern void _ZN7S3427C33v68Ev();
extern void _ZN7S3427C33v69Ev();
extern void _ZN7S3427C33v70Ev();
extern void _ZN7S3427C33v71Ev();
extern void _ZN7S3427C23v72Ev();
extern void _ZN7S3427C23v73Ev();
extern void _ZN7S3427C23v74Ev();
extern void _ZN7S3427C23v75Ev();
extern void _ZN7S3427C23v76Ev();
extern void _ZN7S3427C23v77Ev();
extern void _ZN7S3427C23v78Ev();
extern void _ZN7S3427C23v79Ev();
extern void _ZN7S3427C23v80Ev();
extern void _ZN7S3427C23v81Ev();
extern void _ZN7S3427C23v82Ev();
extern void _ZN7S3427C12v1Ev();
extern void _ZN7S3427C12v2Ev();
extern void _ZN7S3427C12v3Ev();
extern void _ZN7S3427C12v4Ev();
extern void _ZN7S3427C12v5Ev();
extern void _ZN7S3427C12v6Ev();
extern void _ZN7S3427C12v7Ev();
extern void ABISELECT(_ZThn152_N7S3427C1D1Ev,_ZThn104_N7S3427C1D1Ev)();
extern void ABISELECT(_ZThn152_N7S3427C1D0Ev,_ZThn104_N7S3427C1D0Ev)();
extern void _ZN10S3427C5_nt3v83Ev();
extern void _ZN10S3427C5_nt3v84Ev();
extern void _ZN10S3427C5_nt3v85Ev();
static  VTBL_ENTRY vtc_S3427C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3427C1[0]),
  (VTBL_ENTRY)&_ZN7S3427C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3427C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3427C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3427C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3427C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3427C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3427C12v7Ev,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI7S3427C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N7S3427C1D1Ev,_ZThn104_N7S3427C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn152_N7S3427C1D0Ev,_ZThn104_N7S3427C1D0Ev),
  (VTBL_ENTRY)&_ZN10S3427C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3427C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3427C5_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI7S3427C1[];
extern  VTBL_ENTRY _ZTV7S3427C1[];
Class_Descriptor cd_S3427C1 = {  "S3427C1", // class name
  bases_S3427C1, 3,
  &(vtc_S3427C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S3427C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3427C1),93, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3449C3  {
  int s3449c3f0;
  __tsi64 s3449c3f1;
  void *s3449c3f2[4];
  int s3449c3f3[2];
  void *s3449c3f4;
  ::S1409C5_nt s3449c3f5;
  void *s3449c3f6[2];
  virtual  ~S3449C3(); // _ZN7S3449C3D1Ev
  virtual void  v9(); // _ZN7S3449C32v9Ev
  virtual void  v10(); // _ZN7S3449C33v10Ev
  virtual void  v11(); // _ZN7S3449C33v11Ev
  virtual void  v12(); // _ZN7S3449C33v12Ev
  virtual void  v13(); // _ZN7S3449C33v13Ev
  virtual void  v14(); // _ZN7S3449C33v14Ev
  virtual void  v15(); // _ZN7S3449C33v15Ev
  virtual void  v16(); // _ZN7S3449C33v16Ev
  virtual void  v17(); // _ZN7S3449C33v17Ev
  virtual void  v18(); // _ZN7S3449C33v18Ev
  virtual void  v19(); // _ZN7S3449C33v19Ev
  virtual void  v20(); // _ZN7S3449C33v20Ev
  virtual void  v21(); // _ZN7S3449C33v21Ev
  virtual void  v22(); // _ZN7S3449C33v22Ev
  virtual void  v23(); // _ZN7S3449C33v23Ev
  virtual void  v24(); // _ZN7S3449C33v24Ev
  virtual void  v25(); // _ZN7S3449C33v25Ev
  virtual void  v26(); // _ZN7S3449C33v26Ev
  virtual void  v27(); // _ZN7S3449C33v27Ev
  virtual void  v28(); // _ZN7S3449C33v28Ev
  virtual void  v29(); // _ZN7S3449C33v29Ev
  virtual void  v30(); // _ZN7S3449C33v30Ev
  virtual void  v31(); // _ZN7S3449C33v31Ev
  virtual void  v32(); // _ZN7S3449C33v32Ev
  virtual void  v33(); // _ZN7S3449C33v33Ev
  virtual void  v34(); // _ZN7S3449C33v34Ev
  virtual void  v35(); // _ZN7S3449C33v35Ev
  virtual void  v36(); // _ZN7S3449C33v36Ev
  virtual void  v37(); // _ZN7S3449C33v37Ev
  virtual void  v38(); // _ZN7S3449C33v38Ev
  virtual void  v39(); // _ZN7S3449C33v39Ev
  virtual void  v40(); // _ZN7S3449C33v40Ev
  virtual void  v41(); // _ZN7S3449C33v41Ev
  virtual void  v42(); // _ZN7S3449C33v42Ev
  virtual void  v43(); // _ZN7S3449C33v43Ev
  virtual void  v44(); // _ZN7S3449C33v44Ev
  virtual void  v45(); // _ZN7S3449C33v45Ev
  virtual void  v46(); // _ZN7S3449C33v46Ev
  virtual void  v47(); // _ZN7S3449C33v47Ev
  virtual void  v48(); // _ZN7S3449C33v48Ev
  virtual void  v49(); // _ZN7S3449C33v49Ev
  virtual void  v50(); // _ZN7S3449C33v50Ev
  virtual void  v51(); // _ZN7S3449C33v51Ev
  virtual void  v52(); // _ZN7S3449C33v52Ev
  virtual void  v53(); // _ZN7S3449C33v53Ev
  virtual void  v54(); // _ZN7S3449C33v54Ev
  virtual void  v55(); // _ZN7S3449C33v55Ev
  virtual void  v56(); // _ZN7S3449C33v56Ev
  virtual void  v57(); // _ZN7S3449C33v57Ev
  virtual void  v58(); // _ZN7S3449C33v58Ev
  virtual void  v59(); // _ZN7S3449C33v59Ev
  virtual void  v60(); // _ZN7S3449C33v60Ev
  virtual void  v61(); // _ZN7S3449C33v61Ev
  virtual void  v62(); // _ZN7S3449C33v62Ev
  virtual void  v63(); // _ZN7S3449C33v63Ev
  virtual void  v64(); // _ZN7S3449C33v64Ev
  virtual void  v65(); // _ZN7S3449C33v65Ev
  virtual void  v66(); // _ZN7S3449C33v66Ev
  virtual void  v67(); // _ZN7S3449C33v67Ev
  virtual void  v68(); // _ZN7S3449C33v68Ev
  virtual void  v69(); // _ZN7S3449C33v69Ev
  virtual void  v70(); // _ZN7S3449C33v70Ev
  virtual void  v71(); // _ZN7S3449C33v71Ev
  virtual void  v72(); // _ZN7S3449C33v72Ev
  S3449C3(); // tgen
};
//SIG(-1 S3449C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3449C3 ::~S3449C3(){ note_dtor("S3449C3", this);}
void  S3449C3 ::v9(){vfunc_called(this, "_ZN7S3449C32v9Ev");}
void  S3449C3 ::v10(){vfunc_called(this, "_ZN7S3449C33v10Ev");}
void  S3449C3 ::v11(){vfunc_called(this, "_ZN7S3449C33v11Ev");}
void  S3449C3 ::v12(){vfunc_called(this, "_ZN7S3449C33v12Ev");}
void  S3449C3 ::v13(){vfunc_called(this, "_ZN7S3449C33v13Ev");}
void  S3449C3 ::v14(){vfunc_called(this, "_ZN7S3449C33v14Ev");}
void  S3449C3 ::v15(){vfunc_called(this, "_ZN7S3449C33v15Ev");}
void  S3449C3 ::v16(){vfunc_called(this, "_ZN7S3449C33v16Ev");}
void  S3449C3 ::v17(){vfunc_called(this, "_ZN7S3449C33v17Ev");}
void  S3449C3 ::v18(){vfunc_called(this, "_ZN7S3449C33v18Ev");}
void  S3449C3 ::v19(){vfunc_called(this, "_ZN7S3449C33v19Ev");}
void  S3449C3 ::v20(){vfunc_called(this, "_ZN7S3449C33v20Ev");}
void  S3449C3 ::v21(){vfunc_called(this, "_ZN7S3449C33v21Ev");}
void  S3449C3 ::v22(){vfunc_called(this, "_ZN7S3449C33v22Ev");}
void  S3449C3 ::v23(){vfunc_called(this, "_ZN7S3449C33v23Ev");}
void  S3449C3 ::v24(){vfunc_called(this, "_ZN7S3449C33v24Ev");}
void  S3449C3 ::v25(){vfunc_called(this, "_ZN7S3449C33v25Ev");}
void  S3449C3 ::v26(){vfunc_called(this, "_ZN7S3449C33v26Ev");}
void  S3449C3 ::v27(){vfunc_called(this, "_ZN7S3449C33v27Ev");}
void  S3449C3 ::v28(){vfunc_called(this, "_ZN7S3449C33v28Ev");}
void  S3449C3 ::v29(){vfunc_called(this, "_ZN7S3449C33v29Ev");}
void  S3449C3 ::v30(){vfunc_called(this, "_ZN7S3449C33v30Ev");}
void  S3449C3 ::v31(){vfunc_called(this, "_ZN7S3449C33v31Ev");}
void  S3449C3 ::v32(){vfunc_called(this, "_ZN7S3449C33v32Ev");}
void  S3449C3 ::v33(){vfunc_called(this, "_ZN7S3449C33v33Ev");}
void  S3449C3 ::v34(){vfunc_called(this, "_ZN7S3449C33v34Ev");}
void  S3449C3 ::v35(){vfunc_called(this, "_ZN7S3449C33v35Ev");}
void  S3449C3 ::v36(){vfunc_called(this, "_ZN7S3449C33v36Ev");}
void  S3449C3 ::v37(){vfunc_called(this, "_ZN7S3449C33v37Ev");}
void  S3449C3 ::v38(){vfunc_called(this, "_ZN7S3449C33v38Ev");}
void  S3449C3 ::v39(){vfunc_called(this, "_ZN7S3449C33v39Ev");}
void  S3449C3 ::v40(){vfunc_called(this, "_ZN7S3449C33v40Ev");}
void  S3449C3 ::v41(){vfunc_called(this, "_ZN7S3449C33v41Ev");}
void  S3449C3 ::v42(){vfunc_called(this, "_ZN7S3449C33v42Ev");}
void  S3449C3 ::v43(){vfunc_called(this, "_ZN7S3449C33v43Ev");}
void  S3449C3 ::v44(){vfunc_called(this, "_ZN7S3449C33v44Ev");}
void  S3449C3 ::v45(){vfunc_called(this, "_ZN7S3449C33v45Ev");}
void  S3449C3 ::v46(){vfunc_called(this, "_ZN7S3449C33v46Ev");}
void  S3449C3 ::v47(){vfunc_called(this, "_ZN7S3449C33v47Ev");}
void  S3449C3 ::v48(){vfunc_called(this, "_ZN7S3449C33v48Ev");}
void  S3449C3 ::v49(){vfunc_called(this, "_ZN7S3449C33v49Ev");}
void  S3449C3 ::v50(){vfunc_called(this, "_ZN7S3449C33v50Ev");}
void  S3449C3 ::v51(){vfunc_called(this, "_ZN7S3449C33v51Ev");}
void  S3449C3 ::v52(){vfunc_called(this, "_ZN7S3449C33v52Ev");}
void  S3449C3 ::v53(){vfunc_called(this, "_ZN7S3449C33v53Ev");}
void  S3449C3 ::v54(){vfunc_called(this, "_ZN7S3449C33v54Ev");}
void  S3449C3 ::v55(){vfunc_called(this, "_ZN7S3449C33v55Ev");}
void  S3449C3 ::v56(){vfunc_called(this, "_ZN7S3449C33v56Ev");}
void  S3449C3 ::v57(){vfunc_called(this, "_ZN7S3449C33v57Ev");}
void  S3449C3 ::v58(){vfunc_called(this, "_ZN7S3449C33v58Ev");}
void  S3449C3 ::v59(){vfunc_called(this, "_ZN7S3449C33v59Ev");}
void  S3449C3 ::v60(){vfunc_called(this, "_ZN7S3449C33v60Ev");}
void  S3449C3 ::v61(){vfunc_called(this, "_ZN7S3449C33v61Ev");}
void  S3449C3 ::v62(){vfunc_called(this, "_ZN7S3449C33v62Ev");}
void  S3449C3 ::v63(){vfunc_called(this, "_ZN7S3449C33v63Ev");}
void  S3449C3 ::v64(){vfunc_called(this, "_ZN7S3449C33v64Ev");}
void  S3449C3 ::v65(){vfunc_called(this, "_ZN7S3449C33v65Ev");}
void  S3449C3 ::v66(){vfunc_called(this, "_ZN7S3449C33v66Ev");}
void  S3449C3 ::v67(){vfunc_called(this, "_ZN7S3449C33v67Ev");}
void  S3449C3 ::v68(){vfunc_called(this, "_ZN7S3449C33v68Ev");}
void  S3449C3 ::v69(){vfunc_called(this, "_ZN7S3449C33v69Ev");}
void  S3449C3 ::v70(){vfunc_called(this, "_ZN7S3449C33v70Ev");}
void  S3449C3 ::v71(){vfunc_called(this, "_ZN7S3449C33v71Ev");}
void  S3449C3 ::v72(){vfunc_called(this, "_ZN7S3449C33v72Ev");}
S3449C3 ::S3449C3(){ note_ctor("S3449C3", this);} // tgen

static void Test_S3449C3()
{
  extern Class_Descriptor cd_S3449C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3449C3, buf);
    S3449C3 *dp, &lv = *(dp=new (buf) S3449C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3449C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3449C3)");
    check_field_offset(lv, s3449c3f0, ABISELECT(8,4), "S3449C3.s3449c3f0");
    check_field_offset(lv, s3449c3f1, ABISELECT(16,8), "S3449C3.s3449c3f1");
    check_field_offset(lv, s3449c3f2, ABISELECT(24,16), "S3449C3.s3449c3f2");
    check_field_offset(lv, s3449c3f3, ABISELECT(56,32), "S3449C3.s3449c3f3");
    check_field_offset(lv, s3449c3f4, ABISELECT(64,40), "S3449C3.s3449c3f4");
    check_field_offset(lv, s3449c3f5, ABISELECT(72,44), "S3449C3.s3449c3f5");
    check_field_offset(lv, s3449c3f6, ABISELECT(80,52), "S3449C3.s3449c3f6");
    test_class_info(&lv, &cd_S3449C3);
    dp->~S3449C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3449C3(Test_S3449C3, "S3449C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3449C3C1Ev();
extern void _ZN7S3449C3D1Ev();
Name_Map name_map_S3449C3[] = {
  NSPAIR(_ZN7S3449C3C1Ev),
  NSPAIR(_ZN7S3449C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3449C3[];
extern void _ZN7S3449C3D1Ev();
extern void _ZN7S3449C3D0Ev();
extern void _ZN7S3449C32v9Ev();
extern void _ZN7S3449C33v10Ev();
extern void _ZN7S3449C33v11Ev();
extern void _ZN7S3449C33v12Ev();
extern void _ZN7S3449C33v13Ev();
extern void _ZN7S3449C33v14Ev();
extern void _ZN7S3449C33v15Ev();
extern void _ZN7S3449C33v16Ev();
extern void _ZN7S3449C33v17Ev();
extern void _ZN7S3449C33v18Ev();
extern void _ZN7S3449C33v19Ev();
extern void _ZN7S3449C33v20Ev();
extern void _ZN7S3449C33v21Ev();
extern void _ZN7S3449C33v22Ev();
extern void _ZN7S3449C33v23Ev();
extern void _ZN7S3449C33v24Ev();
extern void _ZN7S3449C33v25Ev();
extern void _ZN7S3449C33v26Ev();
extern void _ZN7S3449C33v27Ev();
extern void _ZN7S3449C33v28Ev();
extern void _ZN7S3449C33v29Ev();
extern void _ZN7S3449C33v30Ev();
extern void _ZN7S3449C33v31Ev();
extern void _ZN7S3449C33v32Ev();
extern void _ZN7S3449C33v33Ev();
extern void _ZN7S3449C33v34Ev();
extern void _ZN7S3449C33v35Ev();
extern void _ZN7S3449C33v36Ev();
extern void _ZN7S3449C33v37Ev();
extern void _ZN7S3449C33v38Ev();
extern void _ZN7S3449C33v39Ev();
extern void _ZN7S3449C33v40Ev();
extern void _ZN7S3449C33v41Ev();
extern void _ZN7S3449C33v42Ev();
extern void _ZN7S3449C33v43Ev();
extern void _ZN7S3449C33v44Ev();
extern void _ZN7S3449C33v45Ev();
extern void _ZN7S3449C33v46Ev();
extern void _ZN7S3449C33v47Ev();
extern void _ZN7S3449C33v48Ev();
extern void _ZN7S3449C33v49Ev();
extern void _ZN7S3449C33v50Ev();
extern void _ZN7S3449C33v51Ev();
extern void _ZN7S3449C33v52Ev();
extern void _ZN7S3449C33v53Ev();
extern void _ZN7S3449C33v54Ev();
extern void _ZN7S3449C33v55Ev();
extern void _ZN7S3449C33v56Ev();
extern void _ZN7S3449C33v57Ev();
extern void _ZN7S3449C33v58Ev();
extern void _ZN7S3449C33v59Ev();
extern void _ZN7S3449C33v60Ev();
extern void _ZN7S3449C33v61Ev();
extern void _ZN7S3449C33v62Ev();
extern void _ZN7S3449C33v63Ev();
extern void _ZN7S3449C33v64Ev();
extern void _ZN7S3449C33v65Ev();
extern void _ZN7S3449C33v66Ev();
extern void _ZN7S3449C33v67Ev();
extern void _ZN7S3449C33v68Ev();
extern void _ZN7S3449C33v69Ev();
extern void _ZN7S3449C33v70Ev();
extern void _ZN7S3449C33v71Ev();
extern void _ZN7S3449C33v72Ev();
static  VTBL_ENTRY vtc_S3449C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3449C3[0]),
  (VTBL_ENTRY)&_ZN7S3449C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3449C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3449C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v72Ev,
};
extern VTBL_ENTRY _ZTI7S3449C3[];
extern  VTBL_ENTRY _ZTV7S3449C3[];
Class_Descriptor cd_S3449C3 = {  "S3449C3", // class name
  0,0,//no base classes
  &(vtc_S3449C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3449C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3449C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3449C2  : S3449C3 {
  int s3449c2f0;
  ::S1409C30 s3449c2f1;
  virtual  ~S3449C2(); // _ZN7S3449C2D1Ev
  virtual void  v73(); // _ZN7S3449C23v73Ev
  virtual void  v74(); // _ZN7S3449C23v74Ev
  virtual void  v75(); // _ZN7S3449C23v75Ev
  virtual void  v76(); // _ZN7S3449C23v76Ev
  virtual void  v77(); // _ZN7S3449C23v77Ev
  virtual void  v78(); // _ZN7S3449C23v78Ev
  virtual void  v79(); // _ZN7S3449C23v79Ev
  virtual void  v80(); // _ZN7S3449C23v80Ev
  virtual void  v81(); // _ZN7S3449C23v81Ev
  virtual void  v82(); // _ZN7S3449C23v82Ev
  virtual void  v83(); // _ZN7S3449C23v83Ev
  virtual void  v84(); // _ZN7S3449C23v84Ev
  virtual void  v85(); // _ZN7S3449C23v85Ev
  virtual void  v86(); // _ZN7S3449C23v86Ev
  virtual void  v87(); // _ZN7S3449C23v87Ev
  virtual void  v88(); // _ZN7S3449C23v88Ev
  virtual void  v89(); // _ZN7S3449C23v89Ev
  virtual void  v90(); // _ZN7S3449C23v90Ev
  S3449C2(); // tgen
};
//SIG(-1 S3449C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3449C2 ::~S3449C2(){ note_dtor("S3449C2", this);}
void  S3449C2 ::v73(){vfunc_called(this, "_ZN7S3449C23v73Ev");}
void  S3449C2 ::v74(){vfunc_called(this, "_ZN7S3449C23v74Ev");}
void  S3449C2 ::v75(){vfunc_called(this, "_ZN7S3449C23v75Ev");}
void  S3449C2 ::v76(){vfunc_called(this, "_ZN7S3449C23v76Ev");}
void  S3449C2 ::v77(){vfunc_called(this, "_ZN7S3449C23v77Ev");}
void  S3449C2 ::v78(){vfunc_called(this, "_ZN7S3449C23v78Ev");}
void  S3449C2 ::v79(){vfunc_called(this, "_ZN7S3449C23v79Ev");}
void  S3449C2 ::v80(){vfunc_called(this, "_ZN7S3449C23v80Ev");}
void  S3449C2 ::v81(){vfunc_called(this, "_ZN7S3449C23v81Ev");}
void  S3449C2 ::v82(){vfunc_called(this, "_ZN7S3449C23v82Ev");}
void  S3449C2 ::v83(){vfunc_called(this, "_ZN7S3449C23v83Ev");}
void  S3449C2 ::v84(){vfunc_called(this, "_ZN7S3449C23v84Ev");}
void  S3449C2 ::v85(){vfunc_called(this, "_ZN7S3449C23v85Ev");}
void  S3449C2 ::v86(){vfunc_called(this, "_ZN7S3449C23v86Ev");}
void  S3449C2 ::v87(){vfunc_called(this, "_ZN7S3449C23v87Ev");}
void  S3449C2 ::v88(){vfunc_called(this, "_ZN7S3449C23v88Ev");}
void  S3449C2 ::v89(){vfunc_called(this, "_ZN7S3449C23v89Ev");}
void  S3449C2 ::v90(){vfunc_called(this, "_ZN7S3449C23v90Ev");}
S3449C2 ::S3449C2(){ note_ctor("S3449C2", this);} // tgen

static void Test_S3449C2()
{
  extern Class_Descriptor cd_S3449C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3449C2, buf);
    S3449C2 *dp, &lv = *(dp=new (buf) S3449C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3449C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3449C2)");
    check_base_class_offset(lv, (S3449C3*), 0, "S3449C2");
    check_field_offset(lv, s3449c2f0, ABISELECT(96,60), "S3449C2.s3449c2f0");
    check_field_offset(lv, s3449c2f1, ABISELECT(104,64), "S3449C2.s3449c2f1");
    test_class_info(&lv, &cd_S3449C2);
    dp->~S3449C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3449C2(Test_S3449C2, "S3449C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3449C2C1Ev();
extern void _ZN7S3449C2D1Ev();
Name_Map name_map_S3449C2[] = {
  NSPAIR(_ZN7S3449C2C1Ev),
  NSPAIR(_ZN7S3449C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3449C3;
extern VTBL_ENTRY _ZTI7S3449C3[];
extern  VTBL_ENTRY _ZTV7S3449C3[];
static Base_Class bases_S3449C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3449C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3449C2[];
extern void _ZN7S3449C2D1Ev();
extern void _ZN7S3449C2D0Ev();
extern void _ZN7S3449C32v9Ev();
extern void _ZN7S3449C33v10Ev();
extern void _ZN7S3449C33v11Ev();
extern void _ZN7S3449C33v12Ev();
extern void _ZN7S3449C33v13Ev();
extern void _ZN7S3449C33v14Ev();
extern void _ZN7S3449C33v15Ev();
extern void _ZN7S3449C33v16Ev();
extern void _ZN7S3449C33v17Ev();
extern void _ZN7S3449C33v18Ev();
extern void _ZN7S3449C33v19Ev();
extern void _ZN7S3449C33v20Ev();
extern void _ZN7S3449C33v21Ev();
extern void _ZN7S3449C33v22Ev();
extern void _ZN7S3449C33v23Ev();
extern void _ZN7S3449C33v24Ev();
extern void _ZN7S3449C33v25Ev();
extern void _ZN7S3449C33v26Ev();
extern void _ZN7S3449C33v27Ev();
extern void _ZN7S3449C33v28Ev();
extern void _ZN7S3449C33v29Ev();
extern void _ZN7S3449C33v30Ev();
extern void _ZN7S3449C33v31Ev();
extern void _ZN7S3449C33v32Ev();
extern void _ZN7S3449C33v33Ev();
extern void _ZN7S3449C33v34Ev();
extern void _ZN7S3449C33v35Ev();
extern void _ZN7S3449C33v36Ev();
extern void _ZN7S3449C33v37Ev();
extern void _ZN7S3449C33v38Ev();
extern void _ZN7S3449C33v39Ev();
extern void _ZN7S3449C33v40Ev();
extern void _ZN7S3449C33v41Ev();
extern void _ZN7S3449C33v42Ev();
extern void _ZN7S3449C33v43Ev();
extern void _ZN7S3449C33v44Ev();
extern void _ZN7S3449C33v45Ev();
extern void _ZN7S3449C33v46Ev();
extern void _ZN7S3449C33v47Ev();
extern void _ZN7S3449C33v48Ev();
extern void _ZN7S3449C33v49Ev();
extern void _ZN7S3449C33v50Ev();
extern void _ZN7S3449C33v51Ev();
extern void _ZN7S3449C33v52Ev();
extern void _ZN7S3449C33v53Ev();
extern void _ZN7S3449C33v54Ev();
extern void _ZN7S3449C33v55Ev();
extern void _ZN7S3449C33v56Ev();
extern void _ZN7S3449C33v57Ev();
extern void _ZN7S3449C33v58Ev();
extern void _ZN7S3449C33v59Ev();
extern void _ZN7S3449C33v60Ev();
extern void _ZN7S3449C33v61Ev();
extern void _ZN7S3449C33v62Ev();
extern void _ZN7S3449C33v63Ev();
extern void _ZN7S3449C33v64Ev();
extern void _ZN7S3449C33v65Ev();
extern void _ZN7S3449C33v66Ev();
extern void _ZN7S3449C33v67Ev();
extern void _ZN7S3449C33v68Ev();
extern void _ZN7S3449C33v69Ev();
extern void _ZN7S3449C33v70Ev();
extern void _ZN7S3449C33v71Ev();
extern void _ZN7S3449C33v72Ev();
extern void _ZN7S3449C23v73Ev();
extern void _ZN7S3449C23v74Ev();
extern void _ZN7S3449C23v75Ev();
extern void _ZN7S3449C23v76Ev();
extern void _ZN7S3449C23v77Ev();
extern void _ZN7S3449C23v78Ev();
extern void _ZN7S3449C23v79Ev();
extern void _ZN7S3449C23v80Ev();
extern void _ZN7S3449C23v81Ev();
extern void _ZN7S3449C23v82Ev();
extern void _ZN7S3449C23v83Ev();
extern void _ZN7S3449C23v84Ev();
extern void _ZN7S3449C23v85Ev();
extern void _ZN7S3449C23v86Ev();
extern void _ZN7S3449C23v87Ev();
extern void _ZN7S3449C23v88Ev();
extern void _ZN7S3449C23v89Ev();
extern void _ZN7S3449C23v90Ev();
static  VTBL_ENTRY vtc_S3449C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3449C2[0]),
  (VTBL_ENTRY)&_ZN7S3449C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3449C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3449C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v90Ev,
};
extern VTBL_ENTRY _ZTI7S3449C2[];
extern  VTBL_ENTRY _ZTV7S3449C2[];
Class_Descriptor cd_S3449C2 = {  "S3449C2", // class name
  bases_S3449C2, 1,
  &(vtc_S3449C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3449C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3449C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3449C1  : S3449C2 {
  ::S1409C26 s3449c1f0;
  virtual  ~S3449C1(); // _ZN7S3449C1D1Ev
  virtual void  v1(); // _ZN7S3449C12v1Ev
  virtual void  v2(); // _ZN7S3449C12v2Ev
  virtual void  v3(); // _ZN7S3449C12v3Ev
  virtual void  v4(); // _ZN7S3449C12v4Ev
  virtual void  v5(); // _ZN7S3449C12v5Ev
  virtual void  v6(); // _ZN7S3449C12v6Ev
  virtual void  v7(); // _ZN7S3449C12v7Ev
  virtual void  v8(); // _ZN7S3449C12v8Ev
  S3449C1(); // tgen
};
//SIG(1 S3449C1) C1{ BC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 v8 FC8{ BC9{ BC7}}}


 S3449C1 ::~S3449C1(){ note_dtor("S3449C1", this);}
void  S3449C1 ::v1(){vfunc_called(this, "_ZN7S3449C12v1Ev");}
void  S3449C1 ::v2(){vfunc_called(this, "_ZN7S3449C12v2Ev");}
void  S3449C1 ::v3(){vfunc_called(this, "_ZN7S3449C12v3Ev");}
void  S3449C1 ::v4(){vfunc_called(this, "_ZN7S3449C12v4Ev");}
void  S3449C1 ::v5(){vfunc_called(this, "_ZN7S3449C12v5Ev");}
void  S3449C1 ::v6(){vfunc_called(this, "_ZN7S3449C12v6Ev");}
void  S3449C1 ::v7(){vfunc_called(this, "_ZN7S3449C12v7Ev");}
void  S3449C1 ::v8(){vfunc_called(this, "_ZN7S3449C12v8Ev");}
S3449C1 ::S3449C1(){ note_ctor("S3449C1", this);} // tgen

static void Test_S3449C1()
{
  extern Class_Descriptor cd_S3449C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S3449C1, buf);
    S3449C1 *dp, &lv = *(dp=new (buf) S3449C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S3449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3449C1)");
    check_base_class_offset(lv, (S3449C3*)(S3449C2*), 0, "S3449C1");
    check_base_class_offset(lv, (S3449C2*), 0, "S3449C1");
    check_field_offset(lv, s3449c1f0, ABISELECT(120,76), "S3449C1.s3449c1f0");
    test_class_info(&lv, &cd_S3449C1);
    dp->~S3449C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3449C1(Test_S3449C1, "S3449C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S3449C1C1Ev();
extern void _ZN7S3449C1D1Ev();
Name_Map name_map_S3449C1[] = {
  NSPAIR(_ZN7S3449C1C1Ev),
  NSPAIR(_ZN7S3449C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3449C3;
extern VTBL_ENTRY _ZTI7S3449C3[];
extern  VTBL_ENTRY _ZTV7S3449C3[];
extern Class_Descriptor cd_S3449C2;
extern VTBL_ENTRY _ZTI7S3449C2[];
extern  VTBL_ENTRY _ZTV7S3449C2[];
static Base_Class bases_S3449C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3449C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3449C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3449C1[];
extern void _ZN7S3449C1D1Ev();
extern void _ZN7S3449C1D0Ev();
extern void _ZN7S3449C32v9Ev();
extern void _ZN7S3449C33v10Ev();
extern void _ZN7S3449C33v11Ev();
extern void _ZN7S3449C33v12Ev();
extern void _ZN7S3449C33v13Ev();
extern void _ZN7S3449C33v14Ev();
extern void _ZN7S3449C33v15Ev();
extern void _ZN7S3449C33v16Ev();
extern void _ZN7S3449C33v17Ev();
extern void _ZN7S3449C33v18Ev();
extern void _ZN7S3449C33v19Ev();
extern void _ZN7S3449C33v20Ev();
extern void _ZN7S3449C33v21Ev();
extern void _ZN7S3449C33v22Ev();
extern void _ZN7S3449C33v23Ev();
extern void _ZN7S3449C33v24Ev();
extern void _ZN7S3449C33v25Ev();
extern void _ZN7S3449C33v26Ev();
extern void _ZN7S3449C33v27Ev();
extern void _ZN7S3449C33v28Ev();
extern void _ZN7S3449C33v29Ev();
extern void _ZN7S3449C33v30Ev();
extern void _ZN7S3449C33v31Ev();
extern void _ZN7S3449C33v32Ev();
extern void _ZN7S3449C33v33Ev();
extern void _ZN7S3449C33v34Ev();
extern void _ZN7S3449C33v35Ev();
extern void _ZN7S3449C33v36Ev();
extern void _ZN7S3449C33v37Ev();
extern void _ZN7S3449C33v38Ev();
extern void _ZN7S3449C33v39Ev();
extern void _ZN7S3449C33v40Ev();
extern void _ZN7S3449C33v41Ev();
extern void _ZN7S3449C33v42Ev();
extern void _ZN7S3449C33v43Ev();
extern void _ZN7S3449C33v44Ev();
extern void _ZN7S3449C33v45Ev();
extern void _ZN7S3449C33v46Ev();
extern void _ZN7S3449C33v47Ev();
extern void _ZN7S3449C33v48Ev();
extern void _ZN7S3449C33v49Ev();
extern void _ZN7S3449C33v50Ev();
extern void _ZN7S3449C33v51Ev();
extern void _ZN7S3449C33v52Ev();
extern void _ZN7S3449C33v53Ev();
extern void _ZN7S3449C33v54Ev();
extern void _ZN7S3449C33v55Ev();
extern void _ZN7S3449C33v56Ev();
extern void _ZN7S3449C33v57Ev();
extern void _ZN7S3449C33v58Ev();
extern void _ZN7S3449C33v59Ev();
extern void _ZN7S3449C33v60Ev();
extern void _ZN7S3449C33v61Ev();
extern void _ZN7S3449C33v62Ev();
extern void _ZN7S3449C33v63Ev();
extern void _ZN7S3449C33v64Ev();
extern void _ZN7S3449C33v65Ev();
extern void _ZN7S3449C33v66Ev();
extern void _ZN7S3449C33v67Ev();
extern void _ZN7S3449C33v68Ev();
extern void _ZN7S3449C33v69Ev();
extern void _ZN7S3449C33v70Ev();
extern void _ZN7S3449C33v71Ev();
extern void _ZN7S3449C33v72Ev();
extern void _ZN7S3449C23v73Ev();
extern void _ZN7S3449C23v74Ev();
extern void _ZN7S3449C23v75Ev();
extern void _ZN7S3449C23v76Ev();
extern void _ZN7S3449C23v77Ev();
extern void _ZN7S3449C23v78Ev();
extern void _ZN7S3449C23v79Ev();
extern void _ZN7S3449C23v80Ev();
extern void _ZN7S3449C23v81Ev();
extern void _ZN7S3449C23v82Ev();
extern void _ZN7S3449C23v83Ev();
extern void _ZN7S3449C23v84Ev();
extern void _ZN7S3449C23v85Ev();
extern void _ZN7S3449C23v86Ev();
extern void _ZN7S3449C23v87Ev();
extern void _ZN7S3449C23v88Ev();
extern void _ZN7S3449C23v89Ev();
extern void _ZN7S3449C23v90Ev();
extern void _ZN7S3449C12v1Ev();
extern void _ZN7S3449C12v2Ev();
extern void _ZN7S3449C12v3Ev();
extern void _ZN7S3449C12v4Ev();
extern void _ZN7S3449C12v5Ev();
extern void _ZN7S3449C12v6Ev();
extern void _ZN7S3449C12v7Ev();
extern void _ZN7S3449C12v8Ev();
static  VTBL_ENTRY vtc_S3449C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3449C1[0]),
  (VTBL_ENTRY)&_ZN7S3449C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3449C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3449C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3449C33v72Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3449C23v90Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3449C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3449C1[];
extern  VTBL_ENTRY _ZTV7S3449C1[];
Class_Descriptor cd_S3449C1 = {  "S3449C1", // class name
  bases_S3449C1, 2,
  &(vtc_S3449C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S3449C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3449C1),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3433C3  {
  int s3433c3f0;
  __tsi64 s3433c3f1;
  void *s3433c3f2[4];
  int s3433c3f3[2];
  void *s3433c3f4;
  ::S1409C5_nt s3433c3f5;
  void *s3433c3f6[2];
  virtual  ~S3433C3(); // _ZN7S3433C3D1Ev
  virtual void  v8(); // _ZN7S3433C32v8Ev
  virtual void  v9(); // _ZN7S3433C32v9Ev
  virtual void  v10(); // _ZN7S3433C33v10Ev
  virtual void  v11(); // _ZN7S3433C33v11Ev
  virtual void  v12(); // _ZN7S3433C33v12Ev
  virtual void  v13(); // _ZN7S3433C33v13Ev
  virtual void  v14(); // _ZN7S3433C33v14Ev
  virtual void  v15(); // _ZN7S3433C33v15Ev
  virtual void  v16(); // _ZN7S3433C33v16Ev
  virtual void  v17(); // _ZN7S3433C33v17Ev
  virtual void  v18(); // _ZN7S3433C33v18Ev
  virtual void  v19(); // _ZN7S3433C33v19Ev
  virtual void  v20(); // _ZN7S3433C33v20Ev
  virtual void  v21(); // _ZN7S3433C33v21Ev
  virtual void  v22(); // _ZN7S3433C33v22Ev
  virtual void  v23(); // _ZN7S3433C33v23Ev
  virtual void  v24(); // _ZN7S3433C33v24Ev
  virtual void  v25(); // _ZN7S3433C33v25Ev
  virtual void  v26(); // _ZN7S3433C33v26Ev
  virtual void  v27(); // _ZN7S3433C33v27Ev
  virtual void  v28(); // _ZN7S3433C33v28Ev
  virtual void  v29(); // _ZN7S3433C33v29Ev
  virtual void  v30(); // _ZN7S3433C33v30Ev
  virtual void  v31(); // _ZN7S3433C33v31Ev
  virtual void  v32(); // _ZN7S3433C33v32Ev
  virtual void  v33(); // _ZN7S3433C33v33Ev
  virtual void  v34(); // _ZN7S3433C33v34Ev
  virtual void  v35(); // _ZN7S3433C33v35Ev
  virtual void  v36(); // _ZN7S3433C33v36Ev
  virtual void  v37(); // _ZN7S3433C33v37Ev
  virtual void  v38(); // _ZN7S3433C33v38Ev
  virtual void  v39(); // _ZN7S3433C33v39Ev
  virtual void  v40(); // _ZN7S3433C33v40Ev
  virtual void  v41(); // _ZN7S3433C33v41Ev
  virtual void  v42(); // _ZN7S3433C33v42Ev
  virtual void  v43(); // _ZN7S3433C33v43Ev
  virtual void  v44(); // _ZN7S3433C33v44Ev
  virtual void  v45(); // _ZN7S3433C33v45Ev
  virtual void  v46(); // _ZN7S3433C33v46Ev
  virtual void  v47(); // _ZN7S3433C33v47Ev
  virtual void  v48(); // _ZN7S3433C33v48Ev
  virtual void  v49(); // _ZN7S3433C33v49Ev
  virtual void  v50(); // _ZN7S3433C33v50Ev
  virtual void  v51(); // _ZN7S3433C33v51Ev
  virtual void  v52(); // _ZN7S3433C33v52Ev
  virtual void  v53(); // _ZN7S3433C33v53Ev
  virtual void  v54(); // _ZN7S3433C33v54Ev
  virtual void  v55(); // _ZN7S3433C33v55Ev
  virtual void  v56(); // _ZN7S3433C33v56Ev
  virtual void  v57(); // _ZN7S3433C33v57Ev
  virtual void  v58(); // _ZN7S3433C33v58Ev
  virtual void  v59(); // _ZN7S3433C33v59Ev
  virtual void  v60(); // _ZN7S3433C33v60Ev
  virtual void  v61(); // _ZN7S3433C33v61Ev
  virtual void  v62(); // _ZN7S3433C33v62Ev
  virtual void  v63(); // _ZN7S3433C33v63Ev
  virtual void  v64(); // _ZN7S3433C33v64Ev
  virtual void  v65(); // _ZN7S3433C33v65Ev
  virtual void  v66(); // _ZN7S3433C33v66Ev
  virtual void  v67(); // _ZN7S3433C33v67Ev
  virtual void  v68(); // _ZN7S3433C33v68Ev
  virtual void  v69(); // _ZN7S3433C33v69Ev
  virtual void  v70(); // _ZN7S3433C33v70Ev
  virtual void  v71(); // _ZN7S3433C33v71Ev
  S3433C3(); // tgen
};
//SIG(-1 S3433C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3433C3 ::~S3433C3(){ note_dtor("S3433C3", this);}
void  S3433C3 ::v8(){vfunc_called(this, "_ZN7S3433C32v8Ev");}
void  S3433C3 ::v9(){vfunc_called(this, "_ZN7S3433C32v9Ev");}
void  S3433C3 ::v10(){vfunc_called(this, "_ZN7S3433C33v10Ev");}
void  S3433C3 ::v11(){vfunc_called(this, "_ZN7S3433C33v11Ev");}
void  S3433C3 ::v12(){vfunc_called(this, "_ZN7S3433C33v12Ev");}
void  S3433C3 ::v13(){vfunc_called(this, "_ZN7S3433C33v13Ev");}
void  S3433C3 ::v14(){vfunc_called(this, "_ZN7S3433C33v14Ev");}
void  S3433C3 ::v15(){vfunc_called(this, "_ZN7S3433C33v15Ev");}
void  S3433C3 ::v16(){vfunc_called(this, "_ZN7S3433C33v16Ev");}
void  S3433C3 ::v17(){vfunc_called(this, "_ZN7S3433C33v17Ev");}
void  S3433C3 ::v18(){vfunc_called(this, "_ZN7S3433C33v18Ev");}
void  S3433C3 ::v19(){vfunc_called(this, "_ZN7S3433C33v19Ev");}
void  S3433C3 ::v20(){vfunc_called(this, "_ZN7S3433C33v20Ev");}
void  S3433C3 ::v21(){vfunc_called(this, "_ZN7S3433C33v21Ev");}
void  S3433C3 ::v22(){vfunc_called(this, "_ZN7S3433C33v22Ev");}
void  S3433C3 ::v23(){vfunc_called(this, "_ZN7S3433C33v23Ev");}
void  S3433C3 ::v24(){vfunc_called(this, "_ZN7S3433C33v24Ev");}
void  S3433C3 ::v25(){vfunc_called(this, "_ZN7S3433C33v25Ev");}
void  S3433C3 ::v26(){vfunc_called(this, "_ZN7S3433C33v26Ev");}
void  S3433C3 ::v27(){vfunc_called(this, "_ZN7S3433C33v27Ev");}
void  S3433C3 ::v28(){vfunc_called(this, "_ZN7S3433C33v28Ev");}
void  S3433C3 ::v29(){vfunc_called(this, "_ZN7S3433C33v29Ev");}
void  S3433C3 ::v30(){vfunc_called(this, "_ZN7S3433C33v30Ev");}
void  S3433C3 ::v31(){vfunc_called(this, "_ZN7S3433C33v31Ev");}
void  S3433C3 ::v32(){vfunc_called(this, "_ZN7S3433C33v32Ev");}
void  S3433C3 ::v33(){vfunc_called(this, "_ZN7S3433C33v33Ev");}
void  S3433C3 ::v34(){vfunc_called(this, "_ZN7S3433C33v34Ev");}
void  S3433C3 ::v35(){vfunc_called(this, "_ZN7S3433C33v35Ev");}
void  S3433C3 ::v36(){vfunc_called(this, "_ZN7S3433C33v36Ev");}
void  S3433C3 ::v37(){vfunc_called(this, "_ZN7S3433C33v37Ev");}
void  S3433C3 ::v38(){vfunc_called(this, "_ZN7S3433C33v38Ev");}
void  S3433C3 ::v39(){vfunc_called(this, "_ZN7S3433C33v39Ev");}
void  S3433C3 ::v40(){vfunc_called(this, "_ZN7S3433C33v40Ev");}
void  S3433C3 ::v41(){vfunc_called(this, "_ZN7S3433C33v41Ev");}
void  S3433C3 ::v42(){vfunc_called(this, "_ZN7S3433C33v42Ev");}
void  S3433C3 ::v43(){vfunc_called(this, "_ZN7S3433C33v43Ev");}
void  S3433C3 ::v44(){vfunc_called(this, "_ZN7S3433C33v44Ev");}
void  S3433C3 ::v45(){vfunc_called(this, "_ZN7S3433C33v45Ev");}
void  S3433C3 ::v46(){vfunc_called(this, "_ZN7S3433C33v46Ev");}
void  S3433C3 ::v47(){vfunc_called(this, "_ZN7S3433C33v47Ev");}
void  S3433C3 ::v48(){vfunc_called(this, "_ZN7S3433C33v48Ev");}
void  S3433C3 ::v49(){vfunc_called(this, "_ZN7S3433C33v49Ev");}
void  S3433C3 ::v50(){vfunc_called(this, "_ZN7S3433C33v50Ev");}
void  S3433C3 ::v51(){vfunc_called(this, "_ZN7S3433C33v51Ev");}
void  S3433C3 ::v52(){vfunc_called(this, "_ZN7S3433C33v52Ev");}
void  S3433C3 ::v53(){vfunc_called(this, "_ZN7S3433C33v53Ev");}
void  S3433C3 ::v54(){vfunc_called(this, "_ZN7S3433C33v54Ev");}
void  S3433C3 ::v55(){vfunc_called(this, "_ZN7S3433C33v55Ev");}
void  S3433C3 ::v56(){vfunc_called(this, "_ZN7S3433C33v56Ev");}
void  S3433C3 ::v57(){vfunc_called(this, "_ZN7S3433C33v57Ev");}
void  S3433C3 ::v58(){vfunc_called(this, "_ZN7S3433C33v58Ev");}
void  S3433C3 ::v59(){vfunc_called(this, "_ZN7S3433C33v59Ev");}
void  S3433C3 ::v60(){vfunc_called(this, "_ZN7S3433C33v60Ev");}
void  S3433C3 ::v61(){vfunc_called(this, "_ZN7S3433C33v61Ev");}
void  S3433C3 ::v62(){vfunc_called(this, "_ZN7S3433C33v62Ev");}
void  S3433C3 ::v63(){vfunc_called(this, "_ZN7S3433C33v63Ev");}
void  S3433C3 ::v64(){vfunc_called(this, "_ZN7S3433C33v64Ev");}
void  S3433C3 ::v65(){vfunc_called(this, "_ZN7S3433C33v65Ev");}
void  S3433C3 ::v66(){vfunc_called(this, "_ZN7S3433C33v66Ev");}
void  S3433C3 ::v67(){vfunc_called(this, "_ZN7S3433C33v67Ev");}
void  S3433C3 ::v68(){vfunc_called(this, "_ZN7S3433C33v68Ev");}
void  S3433C3 ::v69(){vfunc_called(this, "_ZN7S3433C33v69Ev");}
void  S3433C3 ::v70(){vfunc_called(this, "_ZN7S3433C33v70Ev");}
void  S3433C3 ::v71(){vfunc_called(this, "_ZN7S3433C33v71Ev");}
S3433C3 ::S3433C3(){ note_ctor("S3433C3", this);} // tgen

static void Test_S3433C3()
{
  extern Class_Descriptor cd_S3433C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3433C3, buf);
    S3433C3 *dp, &lv = *(dp=new (buf) S3433C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3433C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3433C3)");
    check_field_offset(lv, s3433c3f0, ABISELECT(8,4), "S3433C3.s3433c3f0");
    check_field_offset(lv, s3433c3f1, ABISELECT(16,8), "S3433C3.s3433c3f1");
    check_field_offset(lv, s3433c3f2, ABISELECT(24,16), "S3433C3.s3433c3f2");
    check_field_offset(lv, s3433c3f3, ABISELECT(56,32), "S3433C3.s3433c3f3");
    check_field_offset(lv, s3433c3f4, ABISELECT(64,40), "S3433C3.s3433c3f4");
    check_field_offset(lv, s3433c3f5, ABISELECT(72,44), "S3433C3.s3433c3f5");
    check_field_offset(lv, s3433c3f6, ABISELECT(80,52), "S3433C3.s3433c3f6");
    test_class_info(&lv, &cd_S3433C3);
    dp->~S3433C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3433C3(Test_S3433C3, "S3433C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3433C3C1Ev();
extern void _ZN7S3433C3D1Ev();
Name_Map name_map_S3433C3[] = {
  NSPAIR(_ZN7S3433C3C1Ev),
  NSPAIR(_ZN7S3433C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3433C3[];
extern void _ZN7S3433C3D1Ev();
extern void _ZN7S3433C3D0Ev();
extern void _ZN7S3433C32v8Ev();
extern void _ZN7S3433C32v9Ev();
extern void _ZN7S3433C33v10Ev();
extern void _ZN7S3433C33v11Ev();
extern void _ZN7S3433C33v12Ev();
extern void _ZN7S3433C33v13Ev();
extern void _ZN7S3433C33v14Ev();
extern void _ZN7S3433C33v15Ev();
extern void _ZN7S3433C33v16Ev();
extern void _ZN7S3433C33v17Ev();
extern void _ZN7S3433C33v18Ev();
extern void _ZN7S3433C33v19Ev();
extern void _ZN7S3433C33v20Ev();
extern void _ZN7S3433C33v21Ev();
extern void _ZN7S3433C33v22Ev();
extern void _ZN7S3433C33v23Ev();
extern void _ZN7S3433C33v24Ev();
extern void _ZN7S3433C33v25Ev();
extern void _ZN7S3433C33v26Ev();
extern void _ZN7S3433C33v27Ev();
extern void _ZN7S3433C33v28Ev();
extern void _ZN7S3433C33v29Ev();
extern void _ZN7S3433C33v30Ev();
extern void _ZN7S3433C33v31Ev();
extern void _ZN7S3433C33v32Ev();
extern void _ZN7S3433C33v33Ev();
extern void _ZN7S3433C33v34Ev();
extern void _ZN7S3433C33v35Ev();
extern void _ZN7S3433C33v36Ev();
extern void _ZN7S3433C33v37Ev();
extern void _ZN7S3433C33v38Ev();
extern void _ZN7S3433C33v39Ev();
extern void _ZN7S3433C33v40Ev();
extern void _ZN7S3433C33v41Ev();
extern void _ZN7S3433C33v42Ev();
extern void _ZN7S3433C33v43Ev();
extern void _ZN7S3433C33v44Ev();
extern void _ZN7S3433C33v45Ev();
extern void _ZN7S3433C33v46Ev();
extern void _ZN7S3433C33v47Ev();
extern void _ZN7S3433C33v48Ev();
extern void _ZN7S3433C33v49Ev();
extern void _ZN7S3433C33v50Ev();
extern void _ZN7S3433C33v51Ev();
extern void _ZN7S3433C33v52Ev();
extern void _ZN7S3433C33v53Ev();
extern void _ZN7S3433C33v54Ev();
extern void _ZN7S3433C33v55Ev();
extern void _ZN7S3433C33v56Ev();
extern void _ZN7S3433C33v57Ev();
extern void _ZN7S3433C33v58Ev();
extern void _ZN7S3433C33v59Ev();
extern void _ZN7S3433C33v60Ev();
extern void _ZN7S3433C33v61Ev();
extern void _ZN7S3433C33v62Ev();
extern void _ZN7S3433C33v63Ev();
extern void _ZN7S3433C33v64Ev();
extern void _ZN7S3433C33v65Ev();
extern void _ZN7S3433C33v66Ev();
extern void _ZN7S3433C33v67Ev();
extern void _ZN7S3433C33v68Ev();
extern void _ZN7S3433C33v69Ev();
extern void _ZN7S3433C33v70Ev();
extern void _ZN7S3433C33v71Ev();
static  VTBL_ENTRY vtc_S3433C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3433C3[0]),
  (VTBL_ENTRY)&_ZN7S3433C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3433C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3433C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3433C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v71Ev,
};
extern VTBL_ENTRY _ZTI7S3433C3[];
extern  VTBL_ENTRY _ZTV7S3433C3[];
Class_Descriptor cd_S3433C3 = {  "S3433C3", // class name
  0,0,//no base classes
  &(vtc_S3433C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3433C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3433C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3433C2  : S3433C3 {
  int s3433c2f0;
  ::S1409C30 s3433c2f1;
  virtual  ~S3433C2(); // _ZN7S3433C2D1Ev
  virtual void  v72(); // _ZN7S3433C23v72Ev
  virtual void  v73(); // _ZN7S3433C23v73Ev
  virtual void  v74(); // _ZN7S3433C23v74Ev
  virtual void  v75(); // _ZN7S3433C23v75Ev
  virtual void  v76(); // _ZN7S3433C23v76Ev
  virtual void  v77(); // _ZN7S3433C23v77Ev
  virtual void  v78(); // _ZN7S3433C23v78Ev
  virtual void  v79(); // _ZN7S3433C23v79Ev
  virtual void  v80(); // _ZN7S3433C23v80Ev
  virtual void  v81(); // _ZN7S3433C23v81Ev
  virtual void  v82(); // _ZN7S3433C23v82Ev
  virtual void  v83(); // _ZN7S3433C23v83Ev
  virtual void  v84(); // _ZN7S3433C23v84Ev
  virtual void  v85(); // _ZN7S3433C23v85Ev
  virtual void  v86(); // _ZN7S3433C23v86Ev
  virtual void  v87(); // _ZN7S3433C23v87Ev
  virtual void  v88(); // _ZN7S3433C23v88Ev
  virtual void  v89(); // _ZN7S3433C23v89Ev
  S3433C2(); // tgen
};
//SIG(-1 S3433C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3433C2 ::~S3433C2(){ note_dtor("S3433C2", this);}
void  S3433C2 ::v72(){vfunc_called(this, "_ZN7S3433C23v72Ev");}
void  S3433C2 ::v73(){vfunc_called(this, "_ZN7S3433C23v73Ev");}
void  S3433C2 ::v74(){vfunc_called(this, "_ZN7S3433C23v74Ev");}
void  S3433C2 ::v75(){vfunc_called(this, "_ZN7S3433C23v75Ev");}
void  S3433C2 ::v76(){vfunc_called(this, "_ZN7S3433C23v76Ev");}
void  S3433C2 ::v77(){vfunc_called(this, "_ZN7S3433C23v77Ev");}
void  S3433C2 ::v78(){vfunc_called(this, "_ZN7S3433C23v78Ev");}
void  S3433C2 ::v79(){vfunc_called(this, "_ZN7S3433C23v79Ev");}
void  S3433C2 ::v80(){vfunc_called(this, "_ZN7S3433C23v80Ev");}
void  S3433C2 ::v81(){vfunc_called(this, "_ZN7S3433C23v81Ev");}
void  S3433C2 ::v82(){vfunc_called(this, "_ZN7S3433C23v82Ev");}
void  S3433C2 ::v83(){vfunc_called(this, "_ZN7S3433C23v83Ev");}
void  S3433C2 ::v84(){vfunc_called(this, "_ZN7S3433C23v84Ev");}
void  S3433C2 ::v85(){vfunc_called(this, "_ZN7S3433C23v85Ev");}
void  S3433C2 ::v86(){vfunc_called(this, "_ZN7S3433C23v86Ev");}
void  S3433C2 ::v87(){vfunc_called(this, "_ZN7S3433C23v87Ev");}
void  S3433C2 ::v88(){vfunc_called(this, "_ZN7S3433C23v88Ev");}
void  S3433C2 ::v89(){vfunc_called(this, "_ZN7S3433C23v89Ev");}
S3433C2 ::S3433C2(){ note_ctor("S3433C2", this);} // tgen

static void Test_S3433C2()
{
  extern Class_Descriptor cd_S3433C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3433C2, buf);
    S3433C2 *dp, &lv = *(dp=new (buf) S3433C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3433C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3433C2)");
    check_base_class_offset(lv, (S3433C3*), 0, "S3433C2");
    check_field_offset(lv, s3433c2f0, ABISELECT(96,60), "S3433C2.s3433c2f0");
    check_field_offset(lv, s3433c2f1, ABISELECT(104,64), "S3433C2.s3433c2f1");
    test_class_info(&lv, &cd_S3433C2);
    dp->~S3433C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3433C2(Test_S3433C2, "S3433C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3433C2C1Ev();
extern void _ZN7S3433C2D1Ev();
Name_Map name_map_S3433C2[] = {
  NSPAIR(_ZN7S3433C2C1Ev),
  NSPAIR(_ZN7S3433C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3433C3;
extern VTBL_ENTRY _ZTI7S3433C3[];
extern  VTBL_ENTRY _ZTV7S3433C3[];
static Base_Class bases_S3433C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3433C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3433C2[];
extern void _ZN7S3433C2D1Ev();
extern void _ZN7S3433C2D0Ev();
extern void _ZN7S3433C32v8Ev();
extern void _ZN7S3433C32v9Ev();
extern void _ZN7S3433C33v10Ev();
extern void _ZN7S3433C33v11Ev();
extern void _ZN7S3433C33v12Ev();
extern void _ZN7S3433C33v13Ev();
extern void _ZN7S3433C33v14Ev();
extern void _ZN7S3433C33v15Ev();
extern void _ZN7S3433C33v16Ev();
extern void _ZN7S3433C33v17Ev();
extern void _ZN7S3433C33v18Ev();
extern void _ZN7S3433C33v19Ev();
extern void _ZN7S3433C33v20Ev();
extern void _ZN7S3433C33v21Ev();
extern void _ZN7S3433C33v22Ev();
extern void _ZN7S3433C33v23Ev();
extern void _ZN7S3433C33v24Ev();
extern void _ZN7S3433C33v25Ev();
extern void _ZN7S3433C33v26Ev();
extern void _ZN7S3433C33v27Ev();
extern void _ZN7S3433C33v28Ev();
extern void _ZN7S3433C33v29Ev();
extern void _ZN7S3433C33v30Ev();
extern void _ZN7S3433C33v31Ev();
extern void _ZN7S3433C33v32Ev();
extern void _ZN7S3433C33v33Ev();
extern void _ZN7S3433C33v34Ev();
extern void _ZN7S3433C33v35Ev();
extern void _ZN7S3433C33v36Ev();
extern void _ZN7S3433C33v37Ev();
extern void _ZN7S3433C33v38Ev();
extern void _ZN7S3433C33v39Ev();
extern void _ZN7S3433C33v40Ev();
extern void _ZN7S3433C33v41Ev();
extern void _ZN7S3433C33v42Ev();
extern void _ZN7S3433C33v43Ev();
extern void _ZN7S3433C33v44Ev();
extern void _ZN7S3433C33v45Ev();
extern void _ZN7S3433C33v46Ev();
extern void _ZN7S3433C33v47Ev();
extern void _ZN7S3433C33v48Ev();
extern void _ZN7S3433C33v49Ev();
extern void _ZN7S3433C33v50Ev();
extern void _ZN7S3433C33v51Ev();
extern void _ZN7S3433C33v52Ev();
extern void _ZN7S3433C33v53Ev();
extern void _ZN7S3433C33v54Ev();
extern void _ZN7S3433C33v55Ev();
extern void _ZN7S3433C33v56Ev();
extern void _ZN7S3433C33v57Ev();
extern void _ZN7S3433C33v58Ev();
extern void _ZN7S3433C33v59Ev();
extern void _ZN7S3433C33v60Ev();
extern void _ZN7S3433C33v61Ev();
extern void _ZN7S3433C33v62Ev();
extern void _ZN7S3433C33v63Ev();
extern void _ZN7S3433C33v64Ev();
extern void _ZN7S3433C33v65Ev();
extern void _ZN7S3433C33v66Ev();
extern void _ZN7S3433C33v67Ev();
extern void _ZN7S3433C33v68Ev();
extern void _ZN7S3433C33v69Ev();
extern void _ZN7S3433C33v70Ev();
extern void _ZN7S3433C33v71Ev();
extern void _ZN7S3433C23v72Ev();
extern void _ZN7S3433C23v73Ev();
extern void _ZN7S3433C23v74Ev();
extern void _ZN7S3433C23v75Ev();
extern void _ZN7S3433C23v76Ev();
extern void _ZN7S3433C23v77Ev();
extern void _ZN7S3433C23v78Ev();
extern void _ZN7S3433C23v79Ev();
extern void _ZN7S3433C23v80Ev();
extern void _ZN7S3433C23v81Ev();
extern void _ZN7S3433C23v82Ev();
extern void _ZN7S3433C23v83Ev();
extern void _ZN7S3433C23v84Ev();
extern void _ZN7S3433C23v85Ev();
extern void _ZN7S3433C23v86Ev();
extern void _ZN7S3433C23v87Ev();
extern void _ZN7S3433C23v88Ev();
extern void _ZN7S3433C23v89Ev();
static  VTBL_ENTRY vtc_S3433C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3433C2[0]),
  (VTBL_ENTRY)&_ZN7S3433C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3433C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3433C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3433C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v89Ev,
};
extern VTBL_ENTRY _ZTI7S3433C2[];
extern  VTBL_ENTRY _ZTV7S3433C2[];
Class_Descriptor cd_S3433C2 = {  "S3433C2", // class name
  bases_S3433C2, 1,
  &(vtc_S3433C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3433C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3433C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3433C1  : S3433C2 {
  ::S1409C26 s3433c1f0;
  virtual  ~S3433C1(); // _ZN7S3433C1D1Ev
  virtual void  v1(); // _ZN7S3433C12v1Ev
  virtual void  v2(); // _ZN7S3433C12v2Ev
  virtual void  v3(); // _ZN7S3433C12v3Ev
  virtual void  v4(); // _ZN7S3433C12v4Ev
  virtual void  v5(); // _ZN7S3433C12v5Ev
  virtual void  v6(); // _ZN7S3433C12v6Ev
  virtual void  v7(); // _ZN7S3433C12v7Ev
  S3433C1(); // tgen
};
//SIG(1 S3433C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 v7 FC8{ BC9{ BC7}}}


 S3433C1 ::~S3433C1(){ note_dtor("S3433C1", this);}
void  S3433C1 ::v1(){vfunc_called(this, "_ZN7S3433C12v1Ev");}
void  S3433C1 ::v2(){vfunc_called(this, "_ZN7S3433C12v2Ev");}
void  S3433C1 ::v3(){vfunc_called(this, "_ZN7S3433C12v3Ev");}
void  S3433C1 ::v4(){vfunc_called(this, "_ZN7S3433C12v4Ev");}
void  S3433C1 ::v5(){vfunc_called(this, "_ZN7S3433C12v5Ev");}
void  S3433C1 ::v6(){vfunc_called(this, "_ZN7S3433C12v6Ev");}
void  S3433C1 ::v7(){vfunc_called(this, "_ZN7S3433C12v7Ev");}
S3433C1 ::S3433C1(){ note_ctor("S3433C1", this);} // tgen

static void Test_S3433C1()
{
  extern Class_Descriptor cd_S3433C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S3433C1, buf);
    S3433C1 *dp, &lv = *(dp=new (buf) S3433C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S3433C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3433C1)");
    check_base_class_offset(lv, (S3433C3*)(S3433C2*), 0, "S3433C1");
    check_base_class_offset(lv, (S3433C2*), 0, "S3433C1");
    check_field_offset(lv, s3433c1f0, ABISELECT(120,76), "S3433C1.s3433c1f0");
    test_class_info(&lv, &cd_S3433C1);
    dp->~S3433C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3433C1(Test_S3433C1, "S3433C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S3433C1C1Ev();
extern void _ZN7S3433C1D1Ev();
Name_Map name_map_S3433C1[] = {
  NSPAIR(_ZN7S3433C1C1Ev),
  NSPAIR(_ZN7S3433C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3433C3;
extern VTBL_ENTRY _ZTI7S3433C3[];
extern  VTBL_ENTRY _ZTV7S3433C3[];
extern Class_Descriptor cd_S3433C2;
extern VTBL_ENTRY _ZTI7S3433C2[];
extern  VTBL_ENTRY _ZTV7S3433C2[];
static Base_Class bases_S3433C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3433C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3433C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3433C1[];
extern void _ZN7S3433C1D1Ev();
extern void _ZN7S3433C1D0Ev();
extern void _ZN7S3433C32v8Ev();
extern void _ZN7S3433C32v9Ev();
extern void _ZN7S3433C33v10Ev();
extern void _ZN7S3433C33v11Ev();
extern void _ZN7S3433C33v12Ev();
extern void _ZN7S3433C33v13Ev();
extern void _ZN7S3433C33v14Ev();
extern void _ZN7S3433C33v15Ev();
extern void _ZN7S3433C33v16Ev();
extern void _ZN7S3433C33v17Ev();
extern void _ZN7S3433C33v18Ev();
extern void _ZN7S3433C33v19Ev();
extern void _ZN7S3433C33v20Ev();
extern void _ZN7S3433C33v21Ev();
extern void _ZN7S3433C33v22Ev();
extern void _ZN7S3433C33v23Ev();
extern void _ZN7S3433C33v24Ev();
extern void _ZN7S3433C33v25Ev();
extern void _ZN7S3433C33v26Ev();
extern void _ZN7S3433C33v27Ev();
extern void _ZN7S3433C33v28Ev();
extern void _ZN7S3433C33v29Ev();
extern void _ZN7S3433C33v30Ev();
extern void _ZN7S3433C33v31Ev();
extern void _ZN7S3433C33v32Ev();
extern void _ZN7S3433C33v33Ev();
extern void _ZN7S3433C33v34Ev();
extern void _ZN7S3433C33v35Ev();
extern void _ZN7S3433C33v36Ev();
extern void _ZN7S3433C33v37Ev();
extern void _ZN7S3433C33v38Ev();
extern void _ZN7S3433C33v39Ev();
extern void _ZN7S3433C33v40Ev();
extern void _ZN7S3433C33v41Ev();
extern void _ZN7S3433C33v42Ev();
extern void _ZN7S3433C33v43Ev();
extern void _ZN7S3433C33v44Ev();
extern void _ZN7S3433C33v45Ev();
extern void _ZN7S3433C33v46Ev();
extern void _ZN7S3433C33v47Ev();
extern void _ZN7S3433C33v48Ev();
extern void _ZN7S3433C33v49Ev();
extern void _ZN7S3433C33v50Ev();
extern void _ZN7S3433C33v51Ev();
extern void _ZN7S3433C33v52Ev();
extern void _ZN7S3433C33v53Ev();
extern void _ZN7S3433C33v54Ev();
extern void _ZN7S3433C33v55Ev();
extern void _ZN7S3433C33v56Ev();
extern void _ZN7S3433C33v57Ev();
extern void _ZN7S3433C33v58Ev();
extern void _ZN7S3433C33v59Ev();
extern void _ZN7S3433C33v60Ev();
extern void _ZN7S3433C33v61Ev();
extern void _ZN7S3433C33v62Ev();
extern void _ZN7S3433C33v63Ev();
extern void _ZN7S3433C33v64Ev();
extern void _ZN7S3433C33v65Ev();
extern void _ZN7S3433C33v66Ev();
extern void _ZN7S3433C33v67Ev();
extern void _ZN7S3433C33v68Ev();
extern void _ZN7S3433C33v69Ev();
extern void _ZN7S3433C33v70Ev();
extern void _ZN7S3433C33v71Ev();
extern void _ZN7S3433C23v72Ev();
extern void _ZN7S3433C23v73Ev();
extern void _ZN7S3433C23v74Ev();
extern void _ZN7S3433C23v75Ev();
extern void _ZN7S3433C23v76Ev();
extern void _ZN7S3433C23v77Ev();
extern void _ZN7S3433C23v78Ev();
extern void _ZN7S3433C23v79Ev();
extern void _ZN7S3433C23v80Ev();
extern void _ZN7S3433C23v81Ev();
extern void _ZN7S3433C23v82Ev();
extern void _ZN7S3433C23v83Ev();
extern void _ZN7S3433C23v84Ev();
extern void _ZN7S3433C23v85Ev();
extern void _ZN7S3433C23v86Ev();
extern void _ZN7S3433C23v87Ev();
extern void _ZN7S3433C23v88Ev();
extern void _ZN7S3433C23v89Ev();
extern void _ZN7S3433C12v1Ev();
extern void _ZN7S3433C12v2Ev();
extern void _ZN7S3433C12v3Ev();
extern void _ZN7S3433C12v4Ev();
extern void _ZN7S3433C12v5Ev();
extern void _ZN7S3433C12v6Ev();
extern void _ZN7S3433C12v7Ev();
static  VTBL_ENTRY vtc_S3433C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3433C1[0]),
  (VTBL_ENTRY)&_ZN7S3433C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3433C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3433C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3433C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3433C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3433C23v89Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3433C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3433C1[];
extern  VTBL_ENTRY _ZTV7S3433C1[];
Class_Descriptor cd_S3433C1 = {  "S3433C1", // class name
  bases_S3433C1, 2,
  &(vtc_S3433C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S3433C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3433C1),93, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3428C3  {
  int s3428c3f0;
  __tsi64 s3428c3f1;
  void *s3428c3f2[4];
  int s3428c3f3[2];
  void *s3428c3f4;
  ::S1409C5_nt s3428c3f5;
  void *s3428c3f6[2];
  virtual  ~S3428C3(); // _ZN7S3428C3D1Ev
  virtual void  v8(); // _ZN7S3428C32v8Ev
  virtual void  v9(); // _ZN7S3428C32v9Ev
  virtual void  v10(); // _ZN7S3428C33v10Ev
  virtual void  v11(); // _ZN7S3428C33v11Ev
  virtual void  v12(); // _ZN7S3428C33v12Ev
  virtual void  v13(); // _ZN7S3428C33v13Ev
  virtual void  v14(); // _ZN7S3428C33v14Ev
  virtual void  v15(); // _ZN7S3428C33v15Ev
  virtual void  v16(); // _ZN7S3428C33v16Ev
  virtual void  v17(); // _ZN7S3428C33v17Ev
  virtual void  v18(); // _ZN7S3428C33v18Ev
  virtual void  v19(); // _ZN7S3428C33v19Ev
  virtual void  v20(); // _ZN7S3428C33v20Ev
  virtual void  v21(); // _ZN7S3428C33v21Ev
  virtual void  v22(); // _ZN7S3428C33v22Ev
  virtual void  v23(); // _ZN7S3428C33v23Ev
  virtual void  v24(); // _ZN7S3428C33v24Ev
  virtual void  v25(); // _ZN7S3428C33v25Ev
  virtual void  v26(); // _ZN7S3428C33v26Ev
  virtual void  v27(); // _ZN7S3428C33v27Ev
  virtual void  v28(); // _ZN7S3428C33v28Ev
  virtual void  v29(); // _ZN7S3428C33v29Ev
  virtual void  v30(); // _ZN7S3428C33v30Ev
  virtual void  v31(); // _ZN7S3428C33v31Ev
  virtual void  v32(); // _ZN7S3428C33v32Ev
  virtual void  v33(); // _ZN7S3428C33v33Ev
  virtual void  v34(); // _ZN7S3428C33v34Ev
  virtual void  v35(); // _ZN7S3428C33v35Ev
  virtual void  v36(); // _ZN7S3428C33v36Ev
  virtual void  v37(); // _ZN7S3428C33v37Ev
  virtual void  v38(); // _ZN7S3428C33v38Ev
  virtual void  v39(); // _ZN7S3428C33v39Ev
  virtual void  v40(); // _ZN7S3428C33v40Ev
  virtual void  v41(); // _ZN7S3428C33v41Ev
  virtual void  v42(); // _ZN7S3428C33v42Ev
  virtual void  v43(); // _ZN7S3428C33v43Ev
  virtual void  v44(); // _ZN7S3428C33v44Ev
  virtual void  v45(); // _ZN7S3428C33v45Ev
  virtual void  v46(); // _ZN7S3428C33v46Ev
  virtual void  v47(); // _ZN7S3428C33v47Ev
  virtual void  v48(); // _ZN7S3428C33v48Ev
  virtual void  v49(); // _ZN7S3428C33v49Ev
  virtual void  v50(); // _ZN7S3428C33v50Ev
  virtual void  v51(); // _ZN7S3428C33v51Ev
  virtual void  v52(); // _ZN7S3428C33v52Ev
  virtual void  v53(); // _ZN7S3428C33v53Ev
  virtual void  v54(); // _ZN7S3428C33v54Ev
  virtual void  v55(); // _ZN7S3428C33v55Ev
  virtual void  v56(); // _ZN7S3428C33v56Ev
  virtual void  v57(); // _ZN7S3428C33v57Ev
  virtual void  v58(); // _ZN7S3428C33v58Ev
  virtual void  v59(); // _ZN7S3428C33v59Ev
  virtual void  v60(); // _ZN7S3428C33v60Ev
  virtual void  v61(); // _ZN7S3428C33v61Ev
  virtual void  v62(); // _ZN7S3428C33v62Ev
  virtual void  v63(); // _ZN7S3428C33v63Ev
  virtual void  v64(); // _ZN7S3428C33v64Ev
  virtual void  v65(); // _ZN7S3428C33v65Ev
  virtual void  v66(); // _ZN7S3428C33v66Ev
  virtual void  v67(); // _ZN7S3428C33v67Ev
  virtual void  v68(); // _ZN7S3428C33v68Ev
  virtual void  v69(); // _ZN7S3428C33v69Ev
  virtual void  v70(); // _ZN7S3428C33v70Ev
  virtual void  v71(); // _ZN7S3428C33v71Ev
  S3428C3(); // tgen
};
//SIG(-1 S3428C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3428C3 ::~S3428C3(){ note_dtor("S3428C3", this);}
void  S3428C3 ::v8(){vfunc_called(this, "_ZN7S3428C32v8Ev");}
void  S3428C3 ::v9(){vfunc_called(this, "_ZN7S3428C32v9Ev");}
void  S3428C3 ::v10(){vfunc_called(this, "_ZN7S3428C33v10Ev");}
void  S3428C3 ::v11(){vfunc_called(this, "_ZN7S3428C33v11Ev");}
void  S3428C3 ::v12(){vfunc_called(this, "_ZN7S3428C33v12Ev");}
void  S3428C3 ::v13(){vfunc_called(this, "_ZN7S3428C33v13Ev");}
void  S3428C3 ::v14(){vfunc_called(this, "_ZN7S3428C33v14Ev");}
void  S3428C3 ::v15(){vfunc_called(this, "_ZN7S3428C33v15Ev");}
void  S3428C3 ::v16(){vfunc_called(this, "_ZN7S3428C33v16Ev");}
void  S3428C3 ::v17(){vfunc_called(this, "_ZN7S3428C33v17Ev");}
void  S3428C3 ::v18(){vfunc_called(this, "_ZN7S3428C33v18Ev");}
void  S3428C3 ::v19(){vfunc_called(this, "_ZN7S3428C33v19Ev");}
void  S3428C3 ::v20(){vfunc_called(this, "_ZN7S3428C33v20Ev");}
void  S3428C3 ::v21(){vfunc_called(this, "_ZN7S3428C33v21Ev");}
void  S3428C3 ::v22(){vfunc_called(this, "_ZN7S3428C33v22Ev");}
void  S3428C3 ::v23(){vfunc_called(this, "_ZN7S3428C33v23Ev");}
void  S3428C3 ::v24(){vfunc_called(this, "_ZN7S3428C33v24Ev");}
void  S3428C3 ::v25(){vfunc_called(this, "_ZN7S3428C33v25Ev");}
void  S3428C3 ::v26(){vfunc_called(this, "_ZN7S3428C33v26Ev");}
void  S3428C3 ::v27(){vfunc_called(this, "_ZN7S3428C33v27Ev");}
void  S3428C3 ::v28(){vfunc_called(this, "_ZN7S3428C33v28Ev");}
void  S3428C3 ::v29(){vfunc_called(this, "_ZN7S3428C33v29Ev");}
void  S3428C3 ::v30(){vfunc_called(this, "_ZN7S3428C33v30Ev");}
void  S3428C3 ::v31(){vfunc_called(this, "_ZN7S3428C33v31Ev");}
void  S3428C3 ::v32(){vfunc_called(this, "_ZN7S3428C33v32Ev");}
void  S3428C3 ::v33(){vfunc_called(this, "_ZN7S3428C33v33Ev");}
void  S3428C3 ::v34(){vfunc_called(this, "_ZN7S3428C33v34Ev");}
void  S3428C3 ::v35(){vfunc_called(this, "_ZN7S3428C33v35Ev");}
void  S3428C3 ::v36(){vfunc_called(this, "_ZN7S3428C33v36Ev");}
void  S3428C3 ::v37(){vfunc_called(this, "_ZN7S3428C33v37Ev");}
void  S3428C3 ::v38(){vfunc_called(this, "_ZN7S3428C33v38Ev");}
void  S3428C3 ::v39(){vfunc_called(this, "_ZN7S3428C33v39Ev");}
void  S3428C3 ::v40(){vfunc_called(this, "_ZN7S3428C33v40Ev");}
void  S3428C3 ::v41(){vfunc_called(this, "_ZN7S3428C33v41Ev");}
void  S3428C3 ::v42(){vfunc_called(this, "_ZN7S3428C33v42Ev");}
void  S3428C3 ::v43(){vfunc_called(this, "_ZN7S3428C33v43Ev");}
void  S3428C3 ::v44(){vfunc_called(this, "_ZN7S3428C33v44Ev");}
void  S3428C3 ::v45(){vfunc_called(this, "_ZN7S3428C33v45Ev");}
void  S3428C3 ::v46(){vfunc_called(this, "_ZN7S3428C33v46Ev");}
void  S3428C3 ::v47(){vfunc_called(this, "_ZN7S3428C33v47Ev");}
void  S3428C3 ::v48(){vfunc_called(this, "_ZN7S3428C33v48Ev");}
void  S3428C3 ::v49(){vfunc_called(this, "_ZN7S3428C33v49Ev");}
void  S3428C3 ::v50(){vfunc_called(this, "_ZN7S3428C33v50Ev");}
void  S3428C3 ::v51(){vfunc_called(this, "_ZN7S3428C33v51Ev");}
void  S3428C3 ::v52(){vfunc_called(this, "_ZN7S3428C33v52Ev");}
void  S3428C3 ::v53(){vfunc_called(this, "_ZN7S3428C33v53Ev");}
void  S3428C3 ::v54(){vfunc_called(this, "_ZN7S3428C33v54Ev");}
void  S3428C3 ::v55(){vfunc_called(this, "_ZN7S3428C33v55Ev");}
void  S3428C3 ::v56(){vfunc_called(this, "_ZN7S3428C33v56Ev");}
void  S3428C3 ::v57(){vfunc_called(this, "_ZN7S3428C33v57Ev");}
void  S3428C3 ::v58(){vfunc_called(this, "_ZN7S3428C33v58Ev");}
void  S3428C3 ::v59(){vfunc_called(this, "_ZN7S3428C33v59Ev");}
void  S3428C3 ::v60(){vfunc_called(this, "_ZN7S3428C33v60Ev");}
void  S3428C3 ::v61(){vfunc_called(this, "_ZN7S3428C33v61Ev");}
void  S3428C3 ::v62(){vfunc_called(this, "_ZN7S3428C33v62Ev");}
void  S3428C3 ::v63(){vfunc_called(this, "_ZN7S3428C33v63Ev");}
void  S3428C3 ::v64(){vfunc_called(this, "_ZN7S3428C33v64Ev");}
void  S3428C3 ::v65(){vfunc_called(this, "_ZN7S3428C33v65Ev");}
void  S3428C3 ::v66(){vfunc_called(this, "_ZN7S3428C33v66Ev");}
void  S3428C3 ::v67(){vfunc_called(this, "_ZN7S3428C33v67Ev");}
void  S3428C3 ::v68(){vfunc_called(this, "_ZN7S3428C33v68Ev");}
void  S3428C3 ::v69(){vfunc_called(this, "_ZN7S3428C33v69Ev");}
void  S3428C3 ::v70(){vfunc_called(this, "_ZN7S3428C33v70Ev");}
void  S3428C3 ::v71(){vfunc_called(this, "_ZN7S3428C33v71Ev");}
S3428C3 ::S3428C3(){ note_ctor("S3428C3", this);} // tgen

static void Test_S3428C3()
{
  extern Class_Descriptor cd_S3428C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3428C3, buf);
    S3428C3 *dp, &lv = *(dp=new (buf) S3428C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3428C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3428C3)");
    check_field_offset(lv, s3428c3f0, ABISELECT(8,4), "S3428C3.s3428c3f0");
    check_field_offset(lv, s3428c3f1, ABISELECT(16,8), "S3428C3.s3428c3f1");
    check_field_offset(lv, s3428c3f2, ABISELECT(24,16), "S3428C3.s3428c3f2");
    check_field_offset(lv, s3428c3f3, ABISELECT(56,32), "S3428C3.s3428c3f3");
    check_field_offset(lv, s3428c3f4, ABISELECT(64,40), "S3428C3.s3428c3f4");
    check_field_offset(lv, s3428c3f5, ABISELECT(72,44), "S3428C3.s3428c3f5");
    check_field_offset(lv, s3428c3f6, ABISELECT(80,52), "S3428C3.s3428c3f6");
    test_class_info(&lv, &cd_S3428C3);
    dp->~S3428C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3428C3(Test_S3428C3, "S3428C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3428C3C1Ev();
extern void _ZN7S3428C3D1Ev();
Name_Map name_map_S3428C3[] = {
  NSPAIR(_ZN7S3428C3C1Ev),
  NSPAIR(_ZN7S3428C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3428C3[];
extern void _ZN7S3428C3D1Ev();
extern void _ZN7S3428C3D0Ev();
extern void _ZN7S3428C32v8Ev();
extern void _ZN7S3428C32v9Ev();
extern void _ZN7S3428C33v10Ev();
extern void _ZN7S3428C33v11Ev();
extern void _ZN7S3428C33v12Ev();
extern void _ZN7S3428C33v13Ev();
extern void _ZN7S3428C33v14Ev();
extern void _ZN7S3428C33v15Ev();
extern void _ZN7S3428C33v16Ev();
extern void _ZN7S3428C33v17Ev();
extern void _ZN7S3428C33v18Ev();
extern void _ZN7S3428C33v19Ev();
extern void _ZN7S3428C33v20Ev();
extern void _ZN7S3428C33v21Ev();
extern void _ZN7S3428C33v22Ev();
extern void _ZN7S3428C33v23Ev();
extern void _ZN7S3428C33v24Ev();
extern void _ZN7S3428C33v25Ev();
extern void _ZN7S3428C33v26Ev();
extern void _ZN7S3428C33v27Ev();
extern void _ZN7S3428C33v28Ev();
extern void _ZN7S3428C33v29Ev();
extern void _ZN7S3428C33v30Ev();
extern void _ZN7S3428C33v31Ev();
extern void _ZN7S3428C33v32Ev();
extern void _ZN7S3428C33v33Ev();
extern void _ZN7S3428C33v34Ev();
extern void _ZN7S3428C33v35Ev();
extern void _ZN7S3428C33v36Ev();
extern void _ZN7S3428C33v37Ev();
extern void _ZN7S3428C33v38Ev();
extern void _ZN7S3428C33v39Ev();
extern void _ZN7S3428C33v40Ev();
extern void _ZN7S3428C33v41Ev();
extern void _ZN7S3428C33v42Ev();
extern void _ZN7S3428C33v43Ev();
extern void _ZN7S3428C33v44Ev();
extern void _ZN7S3428C33v45Ev();
extern void _ZN7S3428C33v46Ev();
extern void _ZN7S3428C33v47Ev();
extern void _ZN7S3428C33v48Ev();
extern void _ZN7S3428C33v49Ev();
extern void _ZN7S3428C33v50Ev();
extern void _ZN7S3428C33v51Ev();
extern void _ZN7S3428C33v52Ev();
extern void _ZN7S3428C33v53Ev();
extern void _ZN7S3428C33v54Ev();
extern void _ZN7S3428C33v55Ev();
extern void _ZN7S3428C33v56Ev();
extern void _ZN7S3428C33v57Ev();
extern void _ZN7S3428C33v58Ev();
extern void _ZN7S3428C33v59Ev();
extern void _ZN7S3428C33v60Ev();
extern void _ZN7S3428C33v61Ev();
extern void _ZN7S3428C33v62Ev();
extern void _ZN7S3428C33v63Ev();
extern void _ZN7S3428C33v64Ev();
extern void _ZN7S3428C33v65Ev();
extern void _ZN7S3428C33v66Ev();
extern void _ZN7S3428C33v67Ev();
extern void _ZN7S3428C33v68Ev();
extern void _ZN7S3428C33v69Ev();
extern void _ZN7S3428C33v70Ev();
extern void _ZN7S3428C33v71Ev();
static  VTBL_ENTRY vtc_S3428C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3428C3[0]),
  (VTBL_ENTRY)&_ZN7S3428C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3428C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3428C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3428C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v71Ev,
};
extern VTBL_ENTRY _ZTI7S3428C3[];
extern  VTBL_ENTRY _ZTV7S3428C3[];
Class_Descriptor cd_S3428C3 = {  "S3428C3", // class name
  0,0,//no base classes
  &(vtc_S3428C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3428C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3428C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3428C2  : S3428C3 {
  void *s3428c2f0;
  unsigned int s3428c2f1:1;
  unsigned int s3428c2f2:1;
  unsigned int s3428c2f3:1;
  unsigned int s3428c2f4:1;
  unsigned int s3428c2f5:1;
  int s3428c2f6[7];
  void *s3428c2f7[2];
  virtual  ~S3428C2(); // _ZN7S3428C2D1Ev
  virtual void  v72(); // _ZN7S3428C23v72Ev
  virtual void  v73(); // _ZN7S3428C23v73Ev
  virtual void  v74(); // _ZN7S3428C23v74Ev
  virtual void  v75(); // _ZN7S3428C23v75Ev
  virtual void  v76(); // _ZN7S3428C23v76Ev
  virtual void  v77(); // _ZN7S3428C23v77Ev
  virtual void  v78(); // _ZN7S3428C23v78Ev
  virtual void  v79(); // _ZN7S3428C23v79Ev
  virtual void  v80(); // _ZN7S3428C23v80Ev
  virtual void  v81(); // _ZN7S3428C23v81Ev
  virtual void  v82(); // _ZN7S3428C23v82Ev
  S3428C2(); // tgen
};
//SIG(-1 S3428C2) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]}


 S3428C2 ::~S3428C2(){ note_dtor("S3428C2", this);}
void  S3428C2 ::v72(){vfunc_called(this, "_ZN7S3428C23v72Ev");}
void  S3428C2 ::v73(){vfunc_called(this, "_ZN7S3428C23v73Ev");}
void  S3428C2 ::v74(){vfunc_called(this, "_ZN7S3428C23v74Ev");}
void  S3428C2 ::v75(){vfunc_called(this, "_ZN7S3428C23v75Ev");}
void  S3428C2 ::v76(){vfunc_called(this, "_ZN7S3428C23v76Ev");}
void  S3428C2 ::v77(){vfunc_called(this, "_ZN7S3428C23v77Ev");}
void  S3428C2 ::v78(){vfunc_called(this, "_ZN7S3428C23v78Ev");}
void  S3428C2 ::v79(){vfunc_called(this, "_ZN7S3428C23v79Ev");}
void  S3428C2 ::v80(){vfunc_called(this, "_ZN7S3428C23v80Ev");}
void  S3428C2 ::v81(){vfunc_called(this, "_ZN7S3428C23v81Ev");}
void  S3428C2 ::v82(){vfunc_called(this, "_ZN7S3428C23v82Ev");}
S3428C2 ::S3428C2(){ note_ctor("S3428C2", this);} // tgen

static void Test_S3428C2()
{
  extern Class_Descriptor cd_S3428C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S3428C2, buf);
    S3428C2 *dp, &lv = *(dp=new (buf) S3428C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S3428C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3428C2)");
    check_base_class_offset(lv, (S3428C3*), 0, "S3428C2");
    check_field_offset(lv, s3428c2f0, ABISELECT(96,60), "S3428C2.s3428c2f0");
    set_bf_and_test(lv, s3428c2f1, ABISELECT(104,64), 0, 1, 1, "S3428C2");
    set_bf_and_test(lv, s3428c2f2, ABISELECT(104,64), 1, 1, 1, "S3428C2");
    set_bf_and_test(lv, s3428c2f3, ABISELECT(104,64), 2, 1, 1, "S3428C2");
    set_bf_and_test(lv, s3428c2f4, ABISELECT(104,64), 3, 1, 1, "S3428C2");
    set_bf_and_test(lv, s3428c2f5, ABISELECT(104,64), 4, 1, 1, "S3428C2");
    check_field_offset(lv, s3428c2f6, ABISELECT(108,68), "S3428C2.s3428c2f6");
    check_field_offset(lv, s3428c2f7, ABISELECT(136,96), "S3428C2.s3428c2f7");
    test_class_info(&lv, &cd_S3428C2);
    dp->~S3428C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3428C2(Test_S3428C2, "S3428C2", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN7S3428C2C1Ev();
extern void _ZN7S3428C2D1Ev();
Name_Map name_map_S3428C2[] = {
  NSPAIR(_ZN7S3428C2C1Ev),
  NSPAIR(_ZN7S3428C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3428C3;
extern VTBL_ENTRY _ZTI7S3428C3[];
extern  VTBL_ENTRY _ZTV7S3428C3[];
static Base_Class bases_S3428C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3428C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3428C2[];
extern void _ZN7S3428C2D1Ev();
extern void _ZN7S3428C2D0Ev();
extern void _ZN7S3428C32v8Ev();
extern void _ZN7S3428C32v9Ev();
extern void _ZN7S3428C33v10Ev();
extern void _ZN7S3428C33v11Ev();
extern void _ZN7S3428C33v12Ev();
extern void _ZN7S3428C33v13Ev();
extern void _ZN7S3428C33v14Ev();
extern void _ZN7S3428C33v15Ev();
extern void _ZN7S3428C33v16Ev();
extern void _ZN7S3428C33v17Ev();
extern void _ZN7S3428C33v18Ev();
extern void _ZN7S3428C33v19Ev();
extern void _ZN7S3428C33v20Ev();
extern void _ZN7S3428C33v21Ev();
extern void _ZN7S3428C33v22Ev();
extern void _ZN7S3428C33v23Ev();
extern void _ZN7S3428C33v24Ev();
extern void _ZN7S3428C33v25Ev();
extern void _ZN7S3428C33v26Ev();
extern void _ZN7S3428C33v27Ev();
extern void _ZN7S3428C33v28Ev();
extern void _ZN7S3428C33v29Ev();
extern void _ZN7S3428C33v30Ev();
extern void _ZN7S3428C33v31Ev();
extern void _ZN7S3428C33v32Ev();
extern void _ZN7S3428C33v33Ev();
extern void _ZN7S3428C33v34Ev();
extern void _ZN7S3428C33v35Ev();
extern void _ZN7S3428C33v36Ev();
extern void _ZN7S3428C33v37Ev();
extern void _ZN7S3428C33v38Ev();
extern void _ZN7S3428C33v39Ev();
extern void _ZN7S3428C33v40Ev();
extern void _ZN7S3428C33v41Ev();
extern void _ZN7S3428C33v42Ev();
extern void _ZN7S3428C33v43Ev();
extern void _ZN7S3428C33v44Ev();
extern void _ZN7S3428C33v45Ev();
extern void _ZN7S3428C33v46Ev();
extern void _ZN7S3428C33v47Ev();
extern void _ZN7S3428C33v48Ev();
extern void _ZN7S3428C33v49Ev();
extern void _ZN7S3428C33v50Ev();
extern void _ZN7S3428C33v51Ev();
extern void _ZN7S3428C33v52Ev();
extern void _ZN7S3428C33v53Ev();
extern void _ZN7S3428C33v54Ev();
extern void _ZN7S3428C33v55Ev();
extern void _ZN7S3428C33v56Ev();
extern void _ZN7S3428C33v57Ev();
extern void _ZN7S3428C33v58Ev();
extern void _ZN7S3428C33v59Ev();
extern void _ZN7S3428C33v60Ev();
extern void _ZN7S3428C33v61Ev();
extern void _ZN7S3428C33v62Ev();
extern void _ZN7S3428C33v63Ev();
extern void _ZN7S3428C33v64Ev();
extern void _ZN7S3428C33v65Ev();
extern void _ZN7S3428C33v66Ev();
extern void _ZN7S3428C33v67Ev();
extern void _ZN7S3428C33v68Ev();
extern void _ZN7S3428C33v69Ev();
extern void _ZN7S3428C33v70Ev();
extern void _ZN7S3428C33v71Ev();
extern void _ZN7S3428C23v72Ev();
extern void _ZN7S3428C23v73Ev();
extern void _ZN7S3428C23v74Ev();
extern void _ZN7S3428C23v75Ev();
extern void _ZN7S3428C23v76Ev();
extern void _ZN7S3428C23v77Ev();
extern void _ZN7S3428C23v78Ev();
extern void _ZN7S3428C23v79Ev();
extern void _ZN7S3428C23v80Ev();
extern void _ZN7S3428C23v81Ev();
extern void _ZN7S3428C23v82Ev();
static  VTBL_ENTRY vtc_S3428C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3428C2[0]),
  (VTBL_ENTRY)&_ZN7S3428C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3428C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3428C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3428C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v82Ev,
};
extern VTBL_ENTRY _ZTI7S3428C2[];
extern  VTBL_ENTRY _ZTV7S3428C2[];
Class_Descriptor cd_S3428C2 = {  "S3428C2", // class name
  bases_S3428C2, 1,
  &(vtc_S3428C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI7S3428C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3428C2),79, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3428C1  : S3428C2 {
  ::S7161C9 s3428c1f0;
  virtual  ~S3428C1(); // _ZN7S3428C1D1Ev
  virtual void  v1(); // _ZN7S3428C12v1Ev
  virtual void  v2(); // _ZN7S3428C12v2Ev
  virtual void  v3(); // _ZN7S3428C12v3Ev
  virtual void  v4(); // _ZN7S3428C12v4Ev
  virtual void  v5(); // _ZN7S3428C12v5Ev
  virtual void  v6(); // _ZN7S3428C12v6Ev
  virtual void  v7(); // _ZN7S3428C12v7Ev
  S3428C1(); // tgen
};
//SIG(1 S3428C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 FC5{ BC6{ m Fp Fi[2]}}}


 S3428C1 ::~S3428C1(){ note_dtor("S3428C1", this);}
void  S3428C1 ::v1(){vfunc_called(this, "_ZN7S3428C12v1Ev");}
void  S3428C1 ::v2(){vfunc_called(this, "_ZN7S3428C12v2Ev");}
void  S3428C1 ::v3(){vfunc_called(this, "_ZN7S3428C12v3Ev");}
void  S3428C1 ::v4(){vfunc_called(this, "_ZN7S3428C12v4Ev");}
void  S3428C1 ::v5(){vfunc_called(this, "_ZN7S3428C12v5Ev");}
void  S3428C1 ::v6(){vfunc_called(this, "_ZN7S3428C12v6Ev");}
void  S3428C1 ::v7(){vfunc_called(this, "_ZN7S3428C12v7Ev");}
S3428C1 ::S3428C1(){ note_ctor("S3428C1", this);} // tgen

static void Test_S3428C1()
{
  extern Class_Descriptor cd_S3428C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,30)];
    init_test(&cd_S3428C1, buf);
    S3428C1 *dp, &lv = *(dp=new (buf) S3428C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S3428C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3428C1)");
    check_base_class_offset(lv, (S3428C3*)(S3428C2*), 0, "S3428C1");
    check_base_class_offset(lv, (S3428C2*), 0, "S3428C1");
    check_field_offset(lv, s3428c1f0, ABISELECT(152,104), "S3428C1.s3428c1f0");
    test_class_info(&lv, &cd_S3428C1);
    dp->~S3428C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3428C1(Test_S3428C1, "S3428C1", ABISELECT(168,116));

#else // __cplusplus

extern void _ZN7S3428C1C1Ev();
extern void _ZN7S3428C1D1Ev();
Name_Map name_map_S3428C1[] = {
  NSPAIR(_ZN7S3428C1C1Ev),
  NSPAIR(_ZN7S3428C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3428C3;
extern VTBL_ENTRY _ZTI7S3428C3[];
extern  VTBL_ENTRY _ZTV7S3428C3[];
extern Class_Descriptor cd_S3428C2;
extern VTBL_ENTRY _ZTI7S3428C2[];
extern  VTBL_ENTRY _ZTV7S3428C2[];
static Base_Class bases_S3428C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3428C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3428C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3428C1[];
extern void _ZN7S3428C1D1Ev();
extern void _ZN7S3428C1D0Ev();
extern void _ZN7S3428C32v8Ev();
extern void _ZN7S3428C32v9Ev();
extern void _ZN7S3428C33v10Ev();
extern void _ZN7S3428C33v11Ev();
extern void _ZN7S3428C33v12Ev();
extern void _ZN7S3428C33v13Ev();
extern void _ZN7S3428C33v14Ev();
extern void _ZN7S3428C33v15Ev();
extern void _ZN7S3428C33v16Ev();
extern void _ZN7S3428C33v17Ev();
extern void _ZN7S3428C33v18Ev();
extern void _ZN7S3428C33v19Ev();
extern void _ZN7S3428C33v20Ev();
extern void _ZN7S3428C33v21Ev();
extern void _ZN7S3428C33v22Ev();
extern void _ZN7S3428C33v23Ev();
extern void _ZN7S3428C33v24Ev();
extern void _ZN7S3428C33v25Ev();
extern void _ZN7S3428C33v26Ev();
extern void _ZN7S3428C33v27Ev();
extern void _ZN7S3428C33v28Ev();
extern void _ZN7S3428C33v29Ev();
extern void _ZN7S3428C33v30Ev();
extern void _ZN7S3428C33v31Ev();
extern void _ZN7S3428C33v32Ev();
extern void _ZN7S3428C33v33Ev();
extern void _ZN7S3428C33v34Ev();
extern void _ZN7S3428C33v35Ev();
extern void _ZN7S3428C33v36Ev();
extern void _ZN7S3428C33v37Ev();
extern void _ZN7S3428C33v38Ev();
extern void _ZN7S3428C33v39Ev();
extern void _ZN7S3428C33v40Ev();
extern void _ZN7S3428C33v41Ev();
extern void _ZN7S3428C33v42Ev();
extern void _ZN7S3428C33v43Ev();
extern void _ZN7S3428C33v44Ev();
extern void _ZN7S3428C33v45Ev();
extern void _ZN7S3428C33v46Ev();
extern void _ZN7S3428C33v47Ev();
extern void _ZN7S3428C33v48Ev();
extern void _ZN7S3428C33v49Ev();
extern void _ZN7S3428C33v50Ev();
extern void _ZN7S3428C33v51Ev();
extern void _ZN7S3428C33v52Ev();
extern void _ZN7S3428C33v53Ev();
extern void _ZN7S3428C33v54Ev();
extern void _ZN7S3428C33v55Ev();
extern void _ZN7S3428C33v56Ev();
extern void _ZN7S3428C33v57Ev();
extern void _ZN7S3428C33v58Ev();
extern void _ZN7S3428C33v59Ev();
extern void _ZN7S3428C33v60Ev();
extern void _ZN7S3428C33v61Ev();
extern void _ZN7S3428C33v62Ev();
extern void _ZN7S3428C33v63Ev();
extern void _ZN7S3428C33v64Ev();
extern void _ZN7S3428C33v65Ev();
extern void _ZN7S3428C33v66Ev();
extern void _ZN7S3428C33v67Ev();
extern void _ZN7S3428C33v68Ev();
extern void _ZN7S3428C33v69Ev();
extern void _ZN7S3428C33v70Ev();
extern void _ZN7S3428C33v71Ev();
extern void _ZN7S3428C23v72Ev();
extern void _ZN7S3428C23v73Ev();
extern void _ZN7S3428C23v74Ev();
extern void _ZN7S3428C23v75Ev();
extern void _ZN7S3428C23v76Ev();
extern void _ZN7S3428C23v77Ev();
extern void _ZN7S3428C23v78Ev();
extern void _ZN7S3428C23v79Ev();
extern void _ZN7S3428C23v80Ev();
extern void _ZN7S3428C23v81Ev();
extern void _ZN7S3428C23v82Ev();
extern void _ZN7S3428C12v1Ev();
extern void _ZN7S3428C12v2Ev();
extern void _ZN7S3428C12v3Ev();
extern void _ZN7S3428C12v4Ev();
extern void _ZN7S3428C12v5Ev();
extern void _ZN7S3428C12v6Ev();
extern void _ZN7S3428C12v7Ev();
static  VTBL_ENTRY vtc_S3428C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3428C1[0]),
  (VTBL_ENTRY)&_ZN7S3428C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3428C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3428C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3428C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3428C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3428C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3428C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3428C1[];
extern  VTBL_ENTRY _ZTV7S3428C1[];
Class_Descriptor cd_S3428C1 = {  "S3428C1", // class name
  bases_S3428C1, 2,
  &(vtc_S3428C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,116), // object size
  NSPAIRA(_ZTI7S3428C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3428C1),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3429C3  {
  int s3429c3f0;
  __tsi64 s3429c3f1;
  void *s3429c3f2[4];
  int s3429c3f3[2];
  void *s3429c3f4;
  ::S1409C5_nt s3429c3f5;
  void *s3429c3f6[2];
  virtual  ~S3429C3(); // _ZN7S3429C3D1Ev
  virtual void  v8(); // _ZN7S3429C32v8Ev
  virtual void  v9(); // _ZN7S3429C32v9Ev
  virtual void  v10(); // _ZN7S3429C33v10Ev
  virtual void  v11(); // _ZN7S3429C33v11Ev
  virtual void  v12(); // _ZN7S3429C33v12Ev
  virtual void  v13(); // _ZN7S3429C33v13Ev
  virtual void  v14(); // _ZN7S3429C33v14Ev
  virtual void  v15(); // _ZN7S3429C33v15Ev
  virtual void  v16(); // _ZN7S3429C33v16Ev
  virtual void  v17(); // _ZN7S3429C33v17Ev
  virtual void  v18(); // _ZN7S3429C33v18Ev
  virtual void  v19(); // _ZN7S3429C33v19Ev
  virtual void  v20(); // _ZN7S3429C33v20Ev
  virtual void  v21(); // _ZN7S3429C33v21Ev
  virtual void  v22(); // _ZN7S3429C33v22Ev
  virtual void  v23(); // _ZN7S3429C33v23Ev
  virtual void  v24(); // _ZN7S3429C33v24Ev
  virtual void  v25(); // _ZN7S3429C33v25Ev
  virtual void  v26(); // _ZN7S3429C33v26Ev
  virtual void  v27(); // _ZN7S3429C33v27Ev
  virtual void  v28(); // _ZN7S3429C33v28Ev
  virtual void  v29(); // _ZN7S3429C33v29Ev
  virtual void  v30(); // _ZN7S3429C33v30Ev
  virtual void  v31(); // _ZN7S3429C33v31Ev
  virtual void  v32(); // _ZN7S3429C33v32Ev
  virtual void  v33(); // _ZN7S3429C33v33Ev
  virtual void  v34(); // _ZN7S3429C33v34Ev
  virtual void  v35(); // _ZN7S3429C33v35Ev
  virtual void  v36(); // _ZN7S3429C33v36Ev
  virtual void  v37(); // _ZN7S3429C33v37Ev
  virtual void  v38(); // _ZN7S3429C33v38Ev
  virtual void  v39(); // _ZN7S3429C33v39Ev
  virtual void  v40(); // _ZN7S3429C33v40Ev
  virtual void  v41(); // _ZN7S3429C33v41Ev
  virtual void  v42(); // _ZN7S3429C33v42Ev
  virtual void  v43(); // _ZN7S3429C33v43Ev
  virtual void  v44(); // _ZN7S3429C33v44Ev
  virtual void  v45(); // _ZN7S3429C33v45Ev
  virtual void  v46(); // _ZN7S3429C33v46Ev
  virtual void  v47(); // _ZN7S3429C33v47Ev
  virtual void  v48(); // _ZN7S3429C33v48Ev
  virtual void  v49(); // _ZN7S3429C33v49Ev
  virtual void  v50(); // _ZN7S3429C33v50Ev
  virtual void  v51(); // _ZN7S3429C33v51Ev
  virtual void  v52(); // _ZN7S3429C33v52Ev
  virtual void  v53(); // _ZN7S3429C33v53Ev
  virtual void  v54(); // _ZN7S3429C33v54Ev
  virtual void  v55(); // _ZN7S3429C33v55Ev
  virtual void  v56(); // _ZN7S3429C33v56Ev
  virtual void  v57(); // _ZN7S3429C33v57Ev
  virtual void  v58(); // _ZN7S3429C33v58Ev
  virtual void  v59(); // _ZN7S3429C33v59Ev
  virtual void  v60(); // _ZN7S3429C33v60Ev
  virtual void  v61(); // _ZN7S3429C33v61Ev
  virtual void  v62(); // _ZN7S3429C33v62Ev
  virtual void  v63(); // _ZN7S3429C33v63Ev
  virtual void  v64(); // _ZN7S3429C33v64Ev
  virtual void  v65(); // _ZN7S3429C33v65Ev
  virtual void  v66(); // _ZN7S3429C33v66Ev
  virtual void  v67(); // _ZN7S3429C33v67Ev
  virtual void  v68(); // _ZN7S3429C33v68Ev
  virtual void  v69(); // _ZN7S3429C33v69Ev
  virtual void  v70(); // _ZN7S3429C33v70Ev
  virtual void  v71(); // _ZN7S3429C33v71Ev
  S3429C3(); // tgen
};
//SIG(-1 S3429C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3429C3 ::~S3429C3(){ note_dtor("S3429C3", this);}
void  S3429C3 ::v8(){vfunc_called(this, "_ZN7S3429C32v8Ev");}
void  S3429C3 ::v9(){vfunc_called(this, "_ZN7S3429C32v9Ev");}
void  S3429C3 ::v10(){vfunc_called(this, "_ZN7S3429C33v10Ev");}
void  S3429C3 ::v11(){vfunc_called(this, "_ZN7S3429C33v11Ev");}
void  S3429C3 ::v12(){vfunc_called(this, "_ZN7S3429C33v12Ev");}
void  S3429C3 ::v13(){vfunc_called(this, "_ZN7S3429C33v13Ev");}
void  S3429C3 ::v14(){vfunc_called(this, "_ZN7S3429C33v14Ev");}
void  S3429C3 ::v15(){vfunc_called(this, "_ZN7S3429C33v15Ev");}
void  S3429C3 ::v16(){vfunc_called(this, "_ZN7S3429C33v16Ev");}
void  S3429C3 ::v17(){vfunc_called(this, "_ZN7S3429C33v17Ev");}
void  S3429C3 ::v18(){vfunc_called(this, "_ZN7S3429C33v18Ev");}
void  S3429C3 ::v19(){vfunc_called(this, "_ZN7S3429C33v19Ev");}
void  S3429C3 ::v20(){vfunc_called(this, "_ZN7S3429C33v20Ev");}
void  S3429C3 ::v21(){vfunc_called(this, "_ZN7S3429C33v21Ev");}
void  S3429C3 ::v22(){vfunc_called(this, "_ZN7S3429C33v22Ev");}
void  S3429C3 ::v23(){vfunc_called(this, "_ZN7S3429C33v23Ev");}
void  S3429C3 ::v24(){vfunc_called(this, "_ZN7S3429C33v24Ev");}
void  S3429C3 ::v25(){vfunc_called(this, "_ZN7S3429C33v25Ev");}
void  S3429C3 ::v26(){vfunc_called(this, "_ZN7S3429C33v26Ev");}
void  S3429C3 ::v27(){vfunc_called(this, "_ZN7S3429C33v27Ev");}
void  S3429C3 ::v28(){vfunc_called(this, "_ZN7S3429C33v28Ev");}
void  S3429C3 ::v29(){vfunc_called(this, "_ZN7S3429C33v29Ev");}
void  S3429C3 ::v30(){vfunc_called(this, "_ZN7S3429C33v30Ev");}
void  S3429C3 ::v31(){vfunc_called(this, "_ZN7S3429C33v31Ev");}
void  S3429C3 ::v32(){vfunc_called(this, "_ZN7S3429C33v32Ev");}
void  S3429C3 ::v33(){vfunc_called(this, "_ZN7S3429C33v33Ev");}
void  S3429C3 ::v34(){vfunc_called(this, "_ZN7S3429C33v34Ev");}
void  S3429C3 ::v35(){vfunc_called(this, "_ZN7S3429C33v35Ev");}
void  S3429C3 ::v36(){vfunc_called(this, "_ZN7S3429C33v36Ev");}
void  S3429C3 ::v37(){vfunc_called(this, "_ZN7S3429C33v37Ev");}
void  S3429C3 ::v38(){vfunc_called(this, "_ZN7S3429C33v38Ev");}
void  S3429C3 ::v39(){vfunc_called(this, "_ZN7S3429C33v39Ev");}
void  S3429C3 ::v40(){vfunc_called(this, "_ZN7S3429C33v40Ev");}
void  S3429C3 ::v41(){vfunc_called(this, "_ZN7S3429C33v41Ev");}
void  S3429C3 ::v42(){vfunc_called(this, "_ZN7S3429C33v42Ev");}
void  S3429C3 ::v43(){vfunc_called(this, "_ZN7S3429C33v43Ev");}
void  S3429C3 ::v44(){vfunc_called(this, "_ZN7S3429C33v44Ev");}
void  S3429C3 ::v45(){vfunc_called(this, "_ZN7S3429C33v45Ev");}
void  S3429C3 ::v46(){vfunc_called(this, "_ZN7S3429C33v46Ev");}
void  S3429C3 ::v47(){vfunc_called(this, "_ZN7S3429C33v47Ev");}
void  S3429C3 ::v48(){vfunc_called(this, "_ZN7S3429C33v48Ev");}
void  S3429C3 ::v49(){vfunc_called(this, "_ZN7S3429C33v49Ev");}
void  S3429C3 ::v50(){vfunc_called(this, "_ZN7S3429C33v50Ev");}
void  S3429C3 ::v51(){vfunc_called(this, "_ZN7S3429C33v51Ev");}
void  S3429C3 ::v52(){vfunc_called(this, "_ZN7S3429C33v52Ev");}
void  S3429C3 ::v53(){vfunc_called(this, "_ZN7S3429C33v53Ev");}
void  S3429C3 ::v54(){vfunc_called(this, "_ZN7S3429C33v54Ev");}
void  S3429C3 ::v55(){vfunc_called(this, "_ZN7S3429C33v55Ev");}
void  S3429C3 ::v56(){vfunc_called(this, "_ZN7S3429C33v56Ev");}
void  S3429C3 ::v57(){vfunc_called(this, "_ZN7S3429C33v57Ev");}
void  S3429C3 ::v58(){vfunc_called(this, "_ZN7S3429C33v58Ev");}
void  S3429C3 ::v59(){vfunc_called(this, "_ZN7S3429C33v59Ev");}
void  S3429C3 ::v60(){vfunc_called(this, "_ZN7S3429C33v60Ev");}
void  S3429C3 ::v61(){vfunc_called(this, "_ZN7S3429C33v61Ev");}
void  S3429C3 ::v62(){vfunc_called(this, "_ZN7S3429C33v62Ev");}
void  S3429C3 ::v63(){vfunc_called(this, "_ZN7S3429C33v63Ev");}
void  S3429C3 ::v64(){vfunc_called(this, "_ZN7S3429C33v64Ev");}
void  S3429C3 ::v65(){vfunc_called(this, "_ZN7S3429C33v65Ev");}
void  S3429C3 ::v66(){vfunc_called(this, "_ZN7S3429C33v66Ev");}
void  S3429C3 ::v67(){vfunc_called(this, "_ZN7S3429C33v67Ev");}
void  S3429C3 ::v68(){vfunc_called(this, "_ZN7S3429C33v68Ev");}
void  S3429C3 ::v69(){vfunc_called(this, "_ZN7S3429C33v69Ev");}
void  S3429C3 ::v70(){vfunc_called(this, "_ZN7S3429C33v70Ev");}
void  S3429C3 ::v71(){vfunc_called(this, "_ZN7S3429C33v71Ev");}
S3429C3 ::S3429C3(){ note_ctor("S3429C3", this);} // tgen

static void Test_S3429C3()
{
  extern Class_Descriptor cd_S3429C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3429C3, buf);
    S3429C3 *dp, &lv = *(dp=new (buf) S3429C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3429C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3429C3)");
    check_field_offset(lv, s3429c3f0, ABISELECT(8,4), "S3429C3.s3429c3f0");
    check_field_offset(lv, s3429c3f1, ABISELECT(16,8), "S3429C3.s3429c3f1");
    check_field_offset(lv, s3429c3f2, ABISELECT(24,16), "S3429C3.s3429c3f2");
    check_field_offset(lv, s3429c3f3, ABISELECT(56,32), "S3429C3.s3429c3f3");
    check_field_offset(lv, s3429c3f4, ABISELECT(64,40), "S3429C3.s3429c3f4");
    check_field_offset(lv, s3429c3f5, ABISELECT(72,44), "S3429C3.s3429c3f5");
    check_field_offset(lv, s3429c3f6, ABISELECT(80,52), "S3429C3.s3429c3f6");
    test_class_info(&lv, &cd_S3429C3);
    dp->~S3429C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3429C3(Test_S3429C3, "S3429C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3429C3C1Ev();
extern void _ZN7S3429C3D1Ev();
Name_Map name_map_S3429C3[] = {
  NSPAIR(_ZN7S3429C3C1Ev),
  NSPAIR(_ZN7S3429C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3429C3[];
extern void _ZN7S3429C3D1Ev();
extern void _ZN7S3429C3D0Ev();
extern void _ZN7S3429C32v8Ev();
extern void _ZN7S3429C32v9Ev();
extern void _ZN7S3429C33v10Ev();
extern void _ZN7S3429C33v11Ev();
extern void _ZN7S3429C33v12Ev();
extern void _ZN7S3429C33v13Ev();
extern void _ZN7S3429C33v14Ev();
extern void _ZN7S3429C33v15Ev();
extern void _ZN7S3429C33v16Ev();
extern void _ZN7S3429C33v17Ev();
extern void _ZN7S3429C33v18Ev();
extern void _ZN7S3429C33v19Ev();
extern void _ZN7S3429C33v20Ev();
extern void _ZN7S3429C33v21Ev();
extern void _ZN7S3429C33v22Ev();
extern void _ZN7S3429C33v23Ev();
extern void _ZN7S3429C33v24Ev();
extern void _ZN7S3429C33v25Ev();
extern void _ZN7S3429C33v26Ev();
extern void _ZN7S3429C33v27Ev();
extern void _ZN7S3429C33v28Ev();
extern void _ZN7S3429C33v29Ev();
extern void _ZN7S3429C33v30Ev();
extern void _ZN7S3429C33v31Ev();
extern void _ZN7S3429C33v32Ev();
extern void _ZN7S3429C33v33Ev();
extern void _ZN7S3429C33v34Ev();
extern void _ZN7S3429C33v35Ev();
extern void _ZN7S3429C33v36Ev();
extern void _ZN7S3429C33v37Ev();
extern void _ZN7S3429C33v38Ev();
extern void _ZN7S3429C33v39Ev();
extern void _ZN7S3429C33v40Ev();
extern void _ZN7S3429C33v41Ev();
extern void _ZN7S3429C33v42Ev();
extern void _ZN7S3429C33v43Ev();
extern void _ZN7S3429C33v44Ev();
extern void _ZN7S3429C33v45Ev();
extern void _ZN7S3429C33v46Ev();
extern void _ZN7S3429C33v47Ev();
extern void _ZN7S3429C33v48Ev();
extern void _ZN7S3429C33v49Ev();
extern void _ZN7S3429C33v50Ev();
extern void _ZN7S3429C33v51Ev();
extern void _ZN7S3429C33v52Ev();
extern void _ZN7S3429C33v53Ev();
extern void _ZN7S3429C33v54Ev();
extern void _ZN7S3429C33v55Ev();
extern void _ZN7S3429C33v56Ev();
extern void _ZN7S3429C33v57Ev();
extern void _ZN7S3429C33v58Ev();
extern void _ZN7S3429C33v59Ev();
extern void _ZN7S3429C33v60Ev();
extern void _ZN7S3429C33v61Ev();
extern void _ZN7S3429C33v62Ev();
extern void _ZN7S3429C33v63Ev();
extern void _ZN7S3429C33v64Ev();
extern void _ZN7S3429C33v65Ev();
extern void _ZN7S3429C33v66Ev();
extern void _ZN7S3429C33v67Ev();
extern void _ZN7S3429C33v68Ev();
extern void _ZN7S3429C33v69Ev();
extern void _ZN7S3429C33v70Ev();
extern void _ZN7S3429C33v71Ev();
static  VTBL_ENTRY vtc_S3429C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3429C3[0]),
  (VTBL_ENTRY)&_ZN7S3429C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3429C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3429C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3429C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v71Ev,
};
extern VTBL_ENTRY _ZTI7S3429C3[];
extern  VTBL_ENTRY _ZTV7S3429C3[];
Class_Descriptor cd_S3429C3 = {  "S3429C3", // class name
  0,0,//no base classes
  &(vtc_S3429C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3429C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3429C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3429C2  : S3429C3 {
  void *s3429c2f0;
  unsigned int s3429c2f1:1;
  unsigned int s3429c2f2:1;
  unsigned int s3429c2f3:1;
  unsigned int s3429c2f4:1;
  unsigned int s3429c2f5:1;
  int s3429c2f6[7];
  void *s3429c2f7[2];
  virtual  ~S3429C2(); // _ZN7S3429C2D1Ev
  virtual void  v72(); // _ZN7S3429C23v72Ev
  virtual void  v73(); // _ZN7S3429C23v73Ev
  virtual void  v74(); // _ZN7S3429C23v74Ev
  virtual void  v75(); // _ZN7S3429C23v75Ev
  virtual void  v76(); // _ZN7S3429C23v76Ev
  virtual void  v77(); // _ZN7S3429C23v77Ev
  virtual void  v78(); // _ZN7S3429C23v78Ev
  virtual void  v79(); // _ZN7S3429C23v79Ev
  virtual void  v80(); // _ZN7S3429C23v80Ev
  virtual void  v81(); // _ZN7S3429C23v81Ev
  virtual void  v82(); // _ZN7S3429C23v82Ev
  S3429C2(); // tgen
};
//SIG(-1 S3429C2) C1{ BC2{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]}


 S3429C2 ::~S3429C2(){ note_dtor("S3429C2", this);}
void  S3429C2 ::v72(){vfunc_called(this, "_ZN7S3429C23v72Ev");}
void  S3429C2 ::v73(){vfunc_called(this, "_ZN7S3429C23v73Ev");}
void  S3429C2 ::v74(){vfunc_called(this, "_ZN7S3429C23v74Ev");}
void  S3429C2 ::v75(){vfunc_called(this, "_ZN7S3429C23v75Ev");}
void  S3429C2 ::v76(){vfunc_called(this, "_ZN7S3429C23v76Ev");}
void  S3429C2 ::v77(){vfunc_called(this, "_ZN7S3429C23v77Ev");}
void  S3429C2 ::v78(){vfunc_called(this, "_ZN7S3429C23v78Ev");}
void  S3429C2 ::v79(){vfunc_called(this, "_ZN7S3429C23v79Ev");}
void  S3429C2 ::v80(){vfunc_called(this, "_ZN7S3429C23v80Ev");}
void  S3429C2 ::v81(){vfunc_called(this, "_ZN7S3429C23v81Ev");}
void  S3429C2 ::v82(){vfunc_called(this, "_ZN7S3429C23v82Ev");}
S3429C2 ::S3429C2(){ note_ctor("S3429C2", this);} // tgen

static void Test_S3429C2()
{
  extern Class_Descriptor cd_S3429C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S3429C2, buf);
    S3429C2 *dp, &lv = *(dp=new (buf) S3429C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S3429C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3429C2)");
    check_base_class_offset(lv, (S3429C3*), 0, "S3429C2");
    check_field_offset(lv, s3429c2f0, ABISELECT(96,60), "S3429C2.s3429c2f0");
    set_bf_and_test(lv, s3429c2f1, ABISELECT(104,64), 0, 1, 1, "S3429C2");
    set_bf_and_test(lv, s3429c2f2, ABISELECT(104,64), 1, 1, 1, "S3429C2");
    set_bf_and_test(lv, s3429c2f3, ABISELECT(104,64), 2, 1, 1, "S3429C2");
    set_bf_and_test(lv, s3429c2f4, ABISELECT(104,64), 3, 1, 1, "S3429C2");
    set_bf_and_test(lv, s3429c2f5, ABISELECT(104,64), 4, 1, 1, "S3429C2");
    check_field_offset(lv, s3429c2f6, ABISELECT(108,68), "S3429C2.s3429c2f6");
    check_field_offset(lv, s3429c2f7, ABISELECT(136,96), "S3429C2.s3429c2f7");
    test_class_info(&lv, &cd_S3429C2);
    dp->~S3429C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3429C2(Test_S3429C2, "S3429C2", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN7S3429C2C1Ev();
extern void _ZN7S3429C2D1Ev();
Name_Map name_map_S3429C2[] = {
  NSPAIR(_ZN7S3429C2C1Ev),
  NSPAIR(_ZN7S3429C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3429C3;
extern VTBL_ENTRY _ZTI7S3429C3[];
extern  VTBL_ENTRY _ZTV7S3429C3[];
static Base_Class bases_S3429C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3429C2[];
extern void _ZN7S3429C2D1Ev();
extern void _ZN7S3429C2D0Ev();
extern void _ZN7S3429C32v8Ev();
extern void _ZN7S3429C32v9Ev();
extern void _ZN7S3429C33v10Ev();
extern void _ZN7S3429C33v11Ev();
extern void _ZN7S3429C33v12Ev();
extern void _ZN7S3429C33v13Ev();
extern void _ZN7S3429C33v14Ev();
extern void _ZN7S3429C33v15Ev();
extern void _ZN7S3429C33v16Ev();
extern void _ZN7S3429C33v17Ev();
extern void _ZN7S3429C33v18Ev();
extern void _ZN7S3429C33v19Ev();
extern void _ZN7S3429C33v20Ev();
extern void _ZN7S3429C33v21Ev();
extern void _ZN7S3429C33v22Ev();
extern void _ZN7S3429C33v23Ev();
extern void _ZN7S3429C33v24Ev();
extern void _ZN7S3429C33v25Ev();
extern void _ZN7S3429C33v26Ev();
extern void _ZN7S3429C33v27Ev();
extern void _ZN7S3429C33v28Ev();
extern void _ZN7S3429C33v29Ev();
extern void _ZN7S3429C33v30Ev();
extern void _ZN7S3429C33v31Ev();
extern void _ZN7S3429C33v32Ev();
extern void _ZN7S3429C33v33Ev();
extern void _ZN7S3429C33v34Ev();
extern void _ZN7S3429C33v35Ev();
extern void _ZN7S3429C33v36Ev();
extern void _ZN7S3429C33v37Ev();
extern void _ZN7S3429C33v38Ev();
extern void _ZN7S3429C33v39Ev();
extern void _ZN7S3429C33v40Ev();
extern void _ZN7S3429C33v41Ev();
extern void _ZN7S3429C33v42Ev();
extern void _ZN7S3429C33v43Ev();
extern void _ZN7S3429C33v44Ev();
extern void _ZN7S3429C33v45Ev();
extern void _ZN7S3429C33v46Ev();
extern void _ZN7S3429C33v47Ev();
extern void _ZN7S3429C33v48Ev();
extern void _ZN7S3429C33v49Ev();
extern void _ZN7S3429C33v50Ev();
extern void _ZN7S3429C33v51Ev();
extern void _ZN7S3429C33v52Ev();
extern void _ZN7S3429C33v53Ev();
extern void _ZN7S3429C33v54Ev();
extern void _ZN7S3429C33v55Ev();
extern void _ZN7S3429C33v56Ev();
extern void _ZN7S3429C33v57Ev();
extern void _ZN7S3429C33v58Ev();
extern void _ZN7S3429C33v59Ev();
extern void _ZN7S3429C33v60Ev();
extern void _ZN7S3429C33v61Ev();
extern void _ZN7S3429C33v62Ev();
extern void _ZN7S3429C33v63Ev();
extern void _ZN7S3429C33v64Ev();
extern void _ZN7S3429C33v65Ev();
extern void _ZN7S3429C33v66Ev();
extern void _ZN7S3429C33v67Ev();
extern void _ZN7S3429C33v68Ev();
extern void _ZN7S3429C33v69Ev();
extern void _ZN7S3429C33v70Ev();
extern void _ZN7S3429C33v71Ev();
extern void _ZN7S3429C23v72Ev();
extern void _ZN7S3429C23v73Ev();
extern void _ZN7S3429C23v74Ev();
extern void _ZN7S3429C23v75Ev();
extern void _ZN7S3429C23v76Ev();
extern void _ZN7S3429C23v77Ev();
extern void _ZN7S3429C23v78Ev();
extern void _ZN7S3429C23v79Ev();
extern void _ZN7S3429C23v80Ev();
extern void _ZN7S3429C23v81Ev();
extern void _ZN7S3429C23v82Ev();
static  VTBL_ENTRY vtc_S3429C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3429C2[0]),
  (VTBL_ENTRY)&_ZN7S3429C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3429C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3429C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3429C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v82Ev,
};
extern VTBL_ENTRY _ZTI7S3429C2[];
extern  VTBL_ENTRY _ZTV7S3429C2[];
Class_Descriptor cd_S3429C2 = {  "S3429C2", // class name
  bases_S3429C2, 1,
  &(vtc_S3429C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI7S3429C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3429C2),79, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3429C1  : S3429C2 {
  void *s3429c1f0[2];
  short s3429c1f1[256];
  int s3429c1f2[2];
  virtual  ~S3429C1(); // _ZN7S3429C1D1Ev
  virtual void  v1(); // _ZN7S3429C12v1Ev
  virtual void  v2(); // _ZN7S3429C12v2Ev
  virtual void  v3(); // _ZN7S3429C12v3Ev
  virtual void  v4(); // _ZN7S3429C12v4Ev
  virtual void  v5(); // _ZN7S3429C12v5Ev
  virtual void  v6(); // _ZN7S3429C12v6Ev
  virtual void  v7(); // _ZN7S3429C12v7Ev
  S3429C1(); // tgen
};
//SIG(1 S3429C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[7] Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fs[256] Fi[2]}


 S3429C1 ::~S3429C1(){ note_dtor("S3429C1", this);}
void  S3429C1 ::v1(){vfunc_called(this, "_ZN7S3429C12v1Ev");}
void  S3429C1 ::v2(){vfunc_called(this, "_ZN7S3429C12v2Ev");}
void  S3429C1 ::v3(){vfunc_called(this, "_ZN7S3429C12v3Ev");}
void  S3429C1 ::v4(){vfunc_called(this, "_ZN7S3429C12v4Ev");}
void  S3429C1 ::v5(){vfunc_called(this, "_ZN7S3429C12v5Ev");}
void  S3429C1 ::v6(){vfunc_called(this, "_ZN7S3429C12v6Ev");}
void  S3429C1 ::v7(){vfunc_called(this, "_ZN7S3429C12v7Ev");}
S3429C1 ::S3429C1(){ note_ctor("S3429C1", this);} // tgen

static void Test_S3429C1()
{
  extern Class_Descriptor cd_S3429C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(87,159)];
    init_test(&cd_S3429C1, buf);
    S3429C1 *dp, &lv = *(dp=new (buf) S3429C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,632), "sizeof(S3429C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3429C1)");
    check_base_class_offset(lv, (S3429C3*)(S3429C2*), 0, "S3429C1");
    check_base_class_offset(lv, (S3429C2*), 0, "S3429C1");
    check_field_offset(lv, s3429c1f0, ABISELECT(152,104), "S3429C1.s3429c1f0");
    check_field_offset(lv, s3429c1f1, ABISELECT(168,112), "S3429C1.s3429c1f1");
    check_field_offset(lv, s3429c1f2, ABISELECT(680,624), "S3429C1.s3429c1f2");
    test_class_info(&lv, &cd_S3429C1);
    dp->~S3429C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3429C1(Test_S3429C1, "S3429C1", ABISELECT(688,632));

#else // __cplusplus

extern void _ZN7S3429C1C1Ev();
extern void _ZN7S3429C1D1Ev();
Name_Map name_map_S3429C1[] = {
  NSPAIR(_ZN7S3429C1C1Ev),
  NSPAIR(_ZN7S3429C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3429C3;
extern VTBL_ENTRY _ZTI7S3429C3[];
extern  VTBL_ENTRY _ZTV7S3429C3[];
extern Class_Descriptor cd_S3429C2;
extern VTBL_ENTRY _ZTI7S3429C2[];
extern  VTBL_ENTRY _ZTV7S3429C2[];
static Base_Class bases_S3429C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3429C1[];
extern void _ZN7S3429C1D1Ev();
extern void _ZN7S3429C1D0Ev();
extern void _ZN7S3429C32v8Ev();
extern void _ZN7S3429C32v9Ev();
extern void _ZN7S3429C33v10Ev();
extern void _ZN7S3429C33v11Ev();
extern void _ZN7S3429C33v12Ev();
extern void _ZN7S3429C33v13Ev();
extern void _ZN7S3429C33v14Ev();
extern void _ZN7S3429C33v15Ev();
extern void _ZN7S3429C33v16Ev();
extern void _ZN7S3429C33v17Ev();
extern void _ZN7S3429C33v18Ev();
extern void _ZN7S3429C33v19Ev();
extern void _ZN7S3429C33v20Ev();
extern void _ZN7S3429C33v21Ev();
extern void _ZN7S3429C33v22Ev();
extern void _ZN7S3429C33v23Ev();
extern void _ZN7S3429C33v24Ev();
extern void _ZN7S3429C33v25Ev();
extern void _ZN7S3429C33v26Ev();
extern void _ZN7S3429C33v27Ev();
extern void _ZN7S3429C33v28Ev();
extern void _ZN7S3429C33v29Ev();
extern void _ZN7S3429C33v30Ev();
extern void _ZN7S3429C33v31Ev();
extern void _ZN7S3429C33v32Ev();
extern void _ZN7S3429C33v33Ev();
extern void _ZN7S3429C33v34Ev();
extern void _ZN7S3429C33v35Ev();
extern void _ZN7S3429C33v36Ev();
extern void _ZN7S3429C33v37Ev();
extern void _ZN7S3429C33v38Ev();
extern void _ZN7S3429C33v39Ev();
extern void _ZN7S3429C33v40Ev();
extern void _ZN7S3429C33v41Ev();
extern void _ZN7S3429C33v42Ev();
extern void _ZN7S3429C33v43Ev();
extern void _ZN7S3429C33v44Ev();
extern void _ZN7S3429C33v45Ev();
extern void _ZN7S3429C33v46Ev();
extern void _ZN7S3429C33v47Ev();
extern void _ZN7S3429C33v48Ev();
extern void _ZN7S3429C33v49Ev();
extern void _ZN7S3429C33v50Ev();
extern void _ZN7S3429C33v51Ev();
extern void _ZN7S3429C33v52Ev();
extern void _ZN7S3429C33v53Ev();
extern void _ZN7S3429C33v54Ev();
extern void _ZN7S3429C33v55Ev();
extern void _ZN7S3429C33v56Ev();
extern void _ZN7S3429C33v57Ev();
extern void _ZN7S3429C33v58Ev();
extern void _ZN7S3429C33v59Ev();
extern void _ZN7S3429C33v60Ev();
extern void _ZN7S3429C33v61Ev();
extern void _ZN7S3429C33v62Ev();
extern void _ZN7S3429C33v63Ev();
extern void _ZN7S3429C33v64Ev();
extern void _ZN7S3429C33v65Ev();
extern void _ZN7S3429C33v66Ev();
extern void _ZN7S3429C33v67Ev();
extern void _ZN7S3429C33v68Ev();
extern void _ZN7S3429C33v69Ev();
extern void _ZN7S3429C33v70Ev();
extern void _ZN7S3429C33v71Ev();
extern void _ZN7S3429C23v72Ev();
extern void _ZN7S3429C23v73Ev();
extern void _ZN7S3429C23v74Ev();
extern void _ZN7S3429C23v75Ev();
extern void _ZN7S3429C23v76Ev();
extern void _ZN7S3429C23v77Ev();
extern void _ZN7S3429C23v78Ev();
extern void _ZN7S3429C23v79Ev();
extern void _ZN7S3429C23v80Ev();
extern void _ZN7S3429C23v81Ev();
extern void _ZN7S3429C23v82Ev();
extern void _ZN7S3429C12v1Ev();
extern void _ZN7S3429C12v2Ev();
extern void _ZN7S3429C12v3Ev();
extern void _ZN7S3429C12v4Ev();
extern void _ZN7S3429C12v5Ev();
extern void _ZN7S3429C12v6Ev();
extern void _ZN7S3429C12v7Ev();
static  VTBL_ENTRY vtc_S3429C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3429C1[0]),
  (VTBL_ENTRY)&_ZN7S3429C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3429C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3429C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3429C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3429C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3429C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3429C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3429C1[];
extern  VTBL_ENTRY _ZTV7S3429C1[];
Class_Descriptor cd_S3429C1 = {  "S3429C1", // class name
  bases_S3429C1, 2,
  &(vtc_S3429C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(688,632), // object size
  NSPAIRA(_ZTI7S3429C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3429C1),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3404C3  {
  int s3404c3f0;
  __tsi64 s3404c3f1;
  void *s3404c3f2[4];
  int s3404c3f3[2];
  void *s3404c3f4;
  ::S1409C5_nt s3404c3f5;
  void *s3404c3f6[2];
  virtual  ~S3404C3(); // _ZN7S3404C3D1Ev
  virtual void  v7(); // _ZN7S3404C32v7Ev
  virtual void  v8(); // _ZN7S3404C32v8Ev
  virtual void  v9(); // _ZN7S3404C32v9Ev
  virtual void  v10(); // _ZN7S3404C33v10Ev
  virtual void  v11(); // _ZN7S3404C33v11Ev
  virtual void  v12(); // _ZN7S3404C33v12Ev
  virtual void  v13(); // _ZN7S3404C33v13Ev
  virtual void  v14(); // _ZN7S3404C33v14Ev
  virtual void  v15(); // _ZN7S3404C33v15Ev
  virtual void  v16(); // _ZN7S3404C33v16Ev
  virtual void  v17(); // _ZN7S3404C33v17Ev
  virtual void  v18(); // _ZN7S3404C33v18Ev
  virtual void  v19(); // _ZN7S3404C33v19Ev
  virtual void  v20(); // _ZN7S3404C33v20Ev
  virtual void  v21(); // _ZN7S3404C33v21Ev
  virtual void  v22(); // _ZN7S3404C33v22Ev
  virtual void  v23(); // _ZN7S3404C33v23Ev
  virtual void  v24(); // _ZN7S3404C33v24Ev
  virtual void  v25(); // _ZN7S3404C33v25Ev
  virtual void  v26(); // _ZN7S3404C33v26Ev
  virtual void  v27(); // _ZN7S3404C33v27Ev
  virtual void  v28(); // _ZN7S3404C33v28Ev
  virtual void  v29(); // _ZN7S3404C33v29Ev
  virtual void  v30(); // _ZN7S3404C33v30Ev
  virtual void  v31(); // _ZN7S3404C33v31Ev
  virtual void  v32(); // _ZN7S3404C33v32Ev
  virtual void  v33(); // _ZN7S3404C33v33Ev
  virtual void  v34(); // _ZN7S3404C33v34Ev
  virtual void  v35(); // _ZN7S3404C33v35Ev
  virtual void  v36(); // _ZN7S3404C33v36Ev
  virtual void  v37(); // _ZN7S3404C33v37Ev
  virtual void  v38(); // _ZN7S3404C33v38Ev
  virtual void  v39(); // _ZN7S3404C33v39Ev
  virtual void  v40(); // _ZN7S3404C33v40Ev
  virtual void  v41(); // _ZN7S3404C33v41Ev
  virtual void  v42(); // _ZN7S3404C33v42Ev
  virtual void  v43(); // _ZN7S3404C33v43Ev
  virtual void  v44(); // _ZN7S3404C33v44Ev
  virtual void  v45(); // _ZN7S3404C33v45Ev
  virtual void  v46(); // _ZN7S3404C33v46Ev
  virtual void  v47(); // _ZN7S3404C33v47Ev
  virtual void  v48(); // _ZN7S3404C33v48Ev
  virtual void  v49(); // _ZN7S3404C33v49Ev
  virtual void  v50(); // _ZN7S3404C33v50Ev
  virtual void  v51(); // _ZN7S3404C33v51Ev
  virtual void  v52(); // _ZN7S3404C33v52Ev
  virtual void  v53(); // _ZN7S3404C33v53Ev
  virtual void  v54(); // _ZN7S3404C33v54Ev
  virtual void  v55(); // _ZN7S3404C33v55Ev
  virtual void  v56(); // _ZN7S3404C33v56Ev
  virtual void  v57(); // _ZN7S3404C33v57Ev
  virtual void  v58(); // _ZN7S3404C33v58Ev
  virtual void  v59(); // _ZN7S3404C33v59Ev
  virtual void  v60(); // _ZN7S3404C33v60Ev
  virtual void  v61(); // _ZN7S3404C33v61Ev
  virtual void  v62(); // _ZN7S3404C33v62Ev
  virtual void  v63(); // _ZN7S3404C33v63Ev
  virtual void  v64(); // _ZN7S3404C33v64Ev
  virtual void  v65(); // _ZN7S3404C33v65Ev
  virtual void  v66(); // _ZN7S3404C33v66Ev
  virtual void  v67(); // _ZN7S3404C33v67Ev
  virtual void  v68(); // _ZN7S3404C33v68Ev
  virtual void  v69(); // _ZN7S3404C33v69Ev
  virtual void  v70(); // _ZN7S3404C33v70Ev
  S3404C3(); // tgen
};
//SIG(-1 S3404C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3404C3 ::~S3404C3(){ note_dtor("S3404C3", this);}
void  S3404C3 ::v7(){vfunc_called(this, "_ZN7S3404C32v7Ev");}
void  S3404C3 ::v8(){vfunc_called(this, "_ZN7S3404C32v8Ev");}
void  S3404C3 ::v9(){vfunc_called(this, "_ZN7S3404C32v9Ev");}
void  S3404C3 ::v10(){vfunc_called(this, "_ZN7S3404C33v10Ev");}
void  S3404C3 ::v11(){vfunc_called(this, "_ZN7S3404C33v11Ev");}
void  S3404C3 ::v12(){vfunc_called(this, "_ZN7S3404C33v12Ev");}
void  S3404C3 ::v13(){vfunc_called(this, "_ZN7S3404C33v13Ev");}
void  S3404C3 ::v14(){vfunc_called(this, "_ZN7S3404C33v14Ev");}
void  S3404C3 ::v15(){vfunc_called(this, "_ZN7S3404C33v15Ev");}
void  S3404C3 ::v16(){vfunc_called(this, "_ZN7S3404C33v16Ev");}
void  S3404C3 ::v17(){vfunc_called(this, "_ZN7S3404C33v17Ev");}
void  S3404C3 ::v18(){vfunc_called(this, "_ZN7S3404C33v18Ev");}
void  S3404C3 ::v19(){vfunc_called(this, "_ZN7S3404C33v19Ev");}
void  S3404C3 ::v20(){vfunc_called(this, "_ZN7S3404C33v20Ev");}
void  S3404C3 ::v21(){vfunc_called(this, "_ZN7S3404C33v21Ev");}
void  S3404C3 ::v22(){vfunc_called(this, "_ZN7S3404C33v22Ev");}
void  S3404C3 ::v23(){vfunc_called(this, "_ZN7S3404C33v23Ev");}
void  S3404C3 ::v24(){vfunc_called(this, "_ZN7S3404C33v24Ev");}
void  S3404C3 ::v25(){vfunc_called(this, "_ZN7S3404C33v25Ev");}
void  S3404C3 ::v26(){vfunc_called(this, "_ZN7S3404C33v26Ev");}
void  S3404C3 ::v27(){vfunc_called(this, "_ZN7S3404C33v27Ev");}
void  S3404C3 ::v28(){vfunc_called(this, "_ZN7S3404C33v28Ev");}
void  S3404C3 ::v29(){vfunc_called(this, "_ZN7S3404C33v29Ev");}
void  S3404C3 ::v30(){vfunc_called(this, "_ZN7S3404C33v30Ev");}
void  S3404C3 ::v31(){vfunc_called(this, "_ZN7S3404C33v31Ev");}
void  S3404C3 ::v32(){vfunc_called(this, "_ZN7S3404C33v32Ev");}
void  S3404C3 ::v33(){vfunc_called(this, "_ZN7S3404C33v33Ev");}
void  S3404C3 ::v34(){vfunc_called(this, "_ZN7S3404C33v34Ev");}
void  S3404C3 ::v35(){vfunc_called(this, "_ZN7S3404C33v35Ev");}
void  S3404C3 ::v36(){vfunc_called(this, "_ZN7S3404C33v36Ev");}
void  S3404C3 ::v37(){vfunc_called(this, "_ZN7S3404C33v37Ev");}
void  S3404C3 ::v38(){vfunc_called(this, "_ZN7S3404C33v38Ev");}
void  S3404C3 ::v39(){vfunc_called(this, "_ZN7S3404C33v39Ev");}
void  S3404C3 ::v40(){vfunc_called(this, "_ZN7S3404C33v40Ev");}
void  S3404C3 ::v41(){vfunc_called(this, "_ZN7S3404C33v41Ev");}
void  S3404C3 ::v42(){vfunc_called(this, "_ZN7S3404C33v42Ev");}
void  S3404C3 ::v43(){vfunc_called(this, "_ZN7S3404C33v43Ev");}
void  S3404C3 ::v44(){vfunc_called(this, "_ZN7S3404C33v44Ev");}
void  S3404C3 ::v45(){vfunc_called(this, "_ZN7S3404C33v45Ev");}
void  S3404C3 ::v46(){vfunc_called(this, "_ZN7S3404C33v46Ev");}
void  S3404C3 ::v47(){vfunc_called(this, "_ZN7S3404C33v47Ev");}
void  S3404C3 ::v48(){vfunc_called(this, "_ZN7S3404C33v48Ev");}
void  S3404C3 ::v49(){vfunc_called(this, "_ZN7S3404C33v49Ev");}
void  S3404C3 ::v50(){vfunc_called(this, "_ZN7S3404C33v50Ev");}
void  S3404C3 ::v51(){vfunc_called(this, "_ZN7S3404C33v51Ev");}
void  S3404C3 ::v52(){vfunc_called(this, "_ZN7S3404C33v52Ev");}
void  S3404C3 ::v53(){vfunc_called(this, "_ZN7S3404C33v53Ev");}
void  S3404C3 ::v54(){vfunc_called(this, "_ZN7S3404C33v54Ev");}
void  S3404C3 ::v55(){vfunc_called(this, "_ZN7S3404C33v55Ev");}
void  S3404C3 ::v56(){vfunc_called(this, "_ZN7S3404C33v56Ev");}
void  S3404C3 ::v57(){vfunc_called(this, "_ZN7S3404C33v57Ev");}
void  S3404C3 ::v58(){vfunc_called(this, "_ZN7S3404C33v58Ev");}
void  S3404C3 ::v59(){vfunc_called(this, "_ZN7S3404C33v59Ev");}
void  S3404C3 ::v60(){vfunc_called(this, "_ZN7S3404C33v60Ev");}
void  S3404C3 ::v61(){vfunc_called(this, "_ZN7S3404C33v61Ev");}
void  S3404C3 ::v62(){vfunc_called(this, "_ZN7S3404C33v62Ev");}
void  S3404C3 ::v63(){vfunc_called(this, "_ZN7S3404C33v63Ev");}
void  S3404C3 ::v64(){vfunc_called(this, "_ZN7S3404C33v64Ev");}
void  S3404C3 ::v65(){vfunc_called(this, "_ZN7S3404C33v65Ev");}
void  S3404C3 ::v66(){vfunc_called(this, "_ZN7S3404C33v66Ev");}
void  S3404C3 ::v67(){vfunc_called(this, "_ZN7S3404C33v67Ev");}
void  S3404C3 ::v68(){vfunc_called(this, "_ZN7S3404C33v68Ev");}
void  S3404C3 ::v69(){vfunc_called(this, "_ZN7S3404C33v69Ev");}
void  S3404C3 ::v70(){vfunc_called(this, "_ZN7S3404C33v70Ev");}
S3404C3 ::S3404C3(){ note_ctor("S3404C3", this);} // tgen

static void Test_S3404C3()
{
  extern Class_Descriptor cd_S3404C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3404C3, buf);
    S3404C3 *dp, &lv = *(dp=new (buf) S3404C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3404C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3404C3)");
    check_field_offset(lv, s3404c3f0, ABISELECT(8,4), "S3404C3.s3404c3f0");
    check_field_offset(lv, s3404c3f1, ABISELECT(16,8), "S3404C3.s3404c3f1");
    check_field_offset(lv, s3404c3f2, ABISELECT(24,16), "S3404C3.s3404c3f2");
    check_field_offset(lv, s3404c3f3, ABISELECT(56,32), "S3404C3.s3404c3f3");
    check_field_offset(lv, s3404c3f4, ABISELECT(64,40), "S3404C3.s3404c3f4");
    check_field_offset(lv, s3404c3f5, ABISELECT(72,44), "S3404C3.s3404c3f5");
    check_field_offset(lv, s3404c3f6, ABISELECT(80,52), "S3404C3.s3404c3f6");
    test_class_info(&lv, &cd_S3404C3);
    dp->~S3404C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3404C3(Test_S3404C3, "S3404C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3404C3C1Ev();
extern void _ZN7S3404C3D1Ev();
Name_Map name_map_S3404C3[] = {
  NSPAIR(_ZN7S3404C3C1Ev),
  NSPAIR(_ZN7S3404C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3404C3[];
extern void _ZN7S3404C3D1Ev();
extern void _ZN7S3404C3D0Ev();
extern void _ZN7S3404C32v7Ev();
extern void _ZN7S3404C32v8Ev();
extern void _ZN7S3404C32v9Ev();
extern void _ZN7S3404C33v10Ev();
extern void _ZN7S3404C33v11Ev();
extern void _ZN7S3404C33v12Ev();
extern void _ZN7S3404C33v13Ev();
extern void _ZN7S3404C33v14Ev();
extern void _ZN7S3404C33v15Ev();
extern void _ZN7S3404C33v16Ev();
extern void _ZN7S3404C33v17Ev();
extern void _ZN7S3404C33v18Ev();
extern void _ZN7S3404C33v19Ev();
extern void _ZN7S3404C33v20Ev();
extern void _ZN7S3404C33v21Ev();
extern void _ZN7S3404C33v22Ev();
extern void _ZN7S3404C33v23Ev();
extern void _ZN7S3404C33v24Ev();
extern void _ZN7S3404C33v25Ev();
extern void _ZN7S3404C33v26Ev();
extern void _ZN7S3404C33v27Ev();
extern void _ZN7S3404C33v28Ev();
extern void _ZN7S3404C33v29Ev();
extern void _ZN7S3404C33v30Ev();
extern void _ZN7S3404C33v31Ev();
extern void _ZN7S3404C33v32Ev();
extern void _ZN7S3404C33v33Ev();
extern void _ZN7S3404C33v34Ev();
extern void _ZN7S3404C33v35Ev();
extern void _ZN7S3404C33v36Ev();
extern void _ZN7S3404C33v37Ev();
extern void _ZN7S3404C33v38Ev();
extern void _ZN7S3404C33v39Ev();
extern void _ZN7S3404C33v40Ev();
extern void _ZN7S3404C33v41Ev();
extern void _ZN7S3404C33v42Ev();
extern void _ZN7S3404C33v43Ev();
extern void _ZN7S3404C33v44Ev();
extern void _ZN7S3404C33v45Ev();
extern void _ZN7S3404C33v46Ev();
extern void _ZN7S3404C33v47Ev();
extern void _ZN7S3404C33v48Ev();
extern void _ZN7S3404C33v49Ev();
extern void _ZN7S3404C33v50Ev();
extern void _ZN7S3404C33v51Ev();
extern void _ZN7S3404C33v52Ev();
extern void _ZN7S3404C33v53Ev();
extern void _ZN7S3404C33v54Ev();
extern void _ZN7S3404C33v55Ev();
extern void _ZN7S3404C33v56Ev();
extern void _ZN7S3404C33v57Ev();
extern void _ZN7S3404C33v58Ev();
extern void _ZN7S3404C33v59Ev();
extern void _ZN7S3404C33v60Ev();
extern void _ZN7S3404C33v61Ev();
extern void _ZN7S3404C33v62Ev();
extern void _ZN7S3404C33v63Ev();
extern void _ZN7S3404C33v64Ev();
extern void _ZN7S3404C33v65Ev();
extern void _ZN7S3404C33v66Ev();
extern void _ZN7S3404C33v67Ev();
extern void _ZN7S3404C33v68Ev();
extern void _ZN7S3404C33v69Ev();
extern void _ZN7S3404C33v70Ev();
static  VTBL_ENTRY vtc_S3404C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3404C3[0]),
  (VTBL_ENTRY)&_ZN7S3404C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3404C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v70Ev,
};
extern VTBL_ENTRY _ZTI7S3404C3[];
extern  VTBL_ENTRY _ZTV7S3404C3[];
Class_Descriptor cd_S3404C3 = {  "S3404C3", // class name
  0,0,//no base classes
  &(vtc_S3404C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3404C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3404C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3404C2  : S3404C3 {
  int s3404c2f0;
  ::S1409C30 s3404c2f1;
  virtual  ~S3404C2(); // _ZN7S3404C2D1Ev
  virtual void  v71(); // _ZN7S3404C23v71Ev
  virtual void  v72(); // _ZN7S3404C23v72Ev
  virtual void  v73(); // _ZN7S3404C23v73Ev
  virtual void  v74(); // _ZN7S3404C23v74Ev
  virtual void  v75(); // _ZN7S3404C23v75Ev
  virtual void  v76(); // _ZN7S3404C23v76Ev
  virtual void  v77(); // _ZN7S3404C23v77Ev
  virtual void  v78(); // _ZN7S3404C23v78Ev
  virtual void  v79(); // _ZN7S3404C23v79Ev
  virtual void  v80(); // _ZN7S3404C23v80Ev
  virtual void  v81(); // _ZN7S3404C23v81Ev
  virtual void  v82(); // _ZN7S3404C23v82Ev
  virtual void  v83(); // _ZN7S3404C23v83Ev
  virtual void  v84(); // _ZN7S3404C23v84Ev
  virtual void  v85(); // _ZN7S3404C23v85Ev
  virtual void  v86(); // _ZN7S3404C23v86Ev
  virtual void  v87(); // _ZN7S3404C23v87Ev
  virtual void  v88(); // _ZN7S3404C23v88Ev
  S3404C2(); // tgen
};
//SIG(-1 S3404C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3404C2 ::~S3404C2(){ note_dtor("S3404C2", this);}
void  S3404C2 ::v71(){vfunc_called(this, "_ZN7S3404C23v71Ev");}
void  S3404C2 ::v72(){vfunc_called(this, "_ZN7S3404C23v72Ev");}
void  S3404C2 ::v73(){vfunc_called(this, "_ZN7S3404C23v73Ev");}
void  S3404C2 ::v74(){vfunc_called(this, "_ZN7S3404C23v74Ev");}
void  S3404C2 ::v75(){vfunc_called(this, "_ZN7S3404C23v75Ev");}
void  S3404C2 ::v76(){vfunc_called(this, "_ZN7S3404C23v76Ev");}
void  S3404C2 ::v77(){vfunc_called(this, "_ZN7S3404C23v77Ev");}
void  S3404C2 ::v78(){vfunc_called(this, "_ZN7S3404C23v78Ev");}
void  S3404C2 ::v79(){vfunc_called(this, "_ZN7S3404C23v79Ev");}
void  S3404C2 ::v80(){vfunc_called(this, "_ZN7S3404C23v80Ev");}
void  S3404C2 ::v81(){vfunc_called(this, "_ZN7S3404C23v81Ev");}
void  S3404C2 ::v82(){vfunc_called(this, "_ZN7S3404C23v82Ev");}
void  S3404C2 ::v83(){vfunc_called(this, "_ZN7S3404C23v83Ev");}
void  S3404C2 ::v84(){vfunc_called(this, "_ZN7S3404C23v84Ev");}
void  S3404C2 ::v85(){vfunc_called(this, "_ZN7S3404C23v85Ev");}
void  S3404C2 ::v86(){vfunc_called(this, "_ZN7S3404C23v86Ev");}
void  S3404C2 ::v87(){vfunc_called(this, "_ZN7S3404C23v87Ev");}
void  S3404C2 ::v88(){vfunc_called(this, "_ZN7S3404C23v88Ev");}
S3404C2 ::S3404C2(){ note_ctor("S3404C2", this);} // tgen

static void Test_S3404C2()
{
  extern Class_Descriptor cd_S3404C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3404C2, buf);
    S3404C2 *dp, &lv = *(dp=new (buf) S3404C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3404C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3404C2)");
    check_base_class_offset(lv, (S3404C3*), 0, "S3404C2");
    check_field_offset(lv, s3404c2f0, ABISELECT(96,60), "S3404C2.s3404c2f0");
    check_field_offset(lv, s3404c2f1, ABISELECT(104,64), "S3404C2.s3404c2f1");
    test_class_info(&lv, &cd_S3404C2);
    dp->~S3404C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3404C2(Test_S3404C2, "S3404C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3404C2C1Ev();
extern void _ZN7S3404C2D1Ev();
Name_Map name_map_S3404C2[] = {
  NSPAIR(_ZN7S3404C2C1Ev),
  NSPAIR(_ZN7S3404C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3404C3;
extern VTBL_ENTRY _ZTI7S3404C3[];
extern  VTBL_ENTRY _ZTV7S3404C3[];
static Base_Class bases_S3404C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3404C2[];
extern void _ZN7S3404C2D1Ev();
extern void _ZN7S3404C2D0Ev();
extern void _ZN7S3404C32v7Ev();
extern void _ZN7S3404C32v8Ev();
extern void _ZN7S3404C32v9Ev();
extern void _ZN7S3404C33v10Ev();
extern void _ZN7S3404C33v11Ev();
extern void _ZN7S3404C33v12Ev();
extern void _ZN7S3404C33v13Ev();
extern void _ZN7S3404C33v14Ev();
extern void _ZN7S3404C33v15Ev();
extern void _ZN7S3404C33v16Ev();
extern void _ZN7S3404C33v17Ev();
extern void _ZN7S3404C33v18Ev();
extern void _ZN7S3404C33v19Ev();
extern void _ZN7S3404C33v20Ev();
extern void _ZN7S3404C33v21Ev();
extern void _ZN7S3404C33v22Ev();
extern void _ZN7S3404C33v23Ev();
extern void _ZN7S3404C33v24Ev();
extern void _ZN7S3404C33v25Ev();
extern void _ZN7S3404C33v26Ev();
extern void _ZN7S3404C33v27Ev();
extern void _ZN7S3404C33v28Ev();
extern void _ZN7S3404C33v29Ev();
extern void _ZN7S3404C33v30Ev();
extern void _ZN7S3404C33v31Ev();
extern void _ZN7S3404C33v32Ev();
extern void _ZN7S3404C33v33Ev();
extern void _ZN7S3404C33v34Ev();
extern void _ZN7S3404C33v35Ev();
extern void _ZN7S3404C33v36Ev();
extern void _ZN7S3404C33v37Ev();
extern void _ZN7S3404C33v38Ev();
extern void _ZN7S3404C33v39Ev();
extern void _ZN7S3404C33v40Ev();
extern void _ZN7S3404C33v41Ev();
extern void _ZN7S3404C33v42Ev();
extern void _ZN7S3404C33v43Ev();
extern void _ZN7S3404C33v44Ev();
extern void _ZN7S3404C33v45Ev();
extern void _ZN7S3404C33v46Ev();
extern void _ZN7S3404C33v47Ev();
extern void _ZN7S3404C33v48Ev();
extern void _ZN7S3404C33v49Ev();
extern void _ZN7S3404C33v50Ev();
extern void _ZN7S3404C33v51Ev();
extern void _ZN7S3404C33v52Ev();
extern void _ZN7S3404C33v53Ev();
extern void _ZN7S3404C33v54Ev();
extern void _ZN7S3404C33v55Ev();
extern void _ZN7S3404C33v56Ev();
extern void _ZN7S3404C33v57Ev();
extern void _ZN7S3404C33v58Ev();
extern void _ZN7S3404C33v59Ev();
extern void _ZN7S3404C33v60Ev();
extern void _ZN7S3404C33v61Ev();
extern void _ZN7S3404C33v62Ev();
extern void _ZN7S3404C33v63Ev();
extern void _ZN7S3404C33v64Ev();
extern void _ZN7S3404C33v65Ev();
extern void _ZN7S3404C33v66Ev();
extern void _ZN7S3404C33v67Ev();
extern void _ZN7S3404C33v68Ev();
extern void _ZN7S3404C33v69Ev();
extern void _ZN7S3404C33v70Ev();
extern void _ZN7S3404C23v71Ev();
extern void _ZN7S3404C23v72Ev();
extern void _ZN7S3404C23v73Ev();
extern void _ZN7S3404C23v74Ev();
extern void _ZN7S3404C23v75Ev();
extern void _ZN7S3404C23v76Ev();
extern void _ZN7S3404C23v77Ev();
extern void _ZN7S3404C23v78Ev();
extern void _ZN7S3404C23v79Ev();
extern void _ZN7S3404C23v80Ev();
extern void _ZN7S3404C23v81Ev();
extern void _ZN7S3404C23v82Ev();
extern void _ZN7S3404C23v83Ev();
extern void _ZN7S3404C23v84Ev();
extern void _ZN7S3404C23v85Ev();
extern void _ZN7S3404C23v86Ev();
extern void _ZN7S3404C23v87Ev();
extern void _ZN7S3404C23v88Ev();
static  VTBL_ENTRY vtc_S3404C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3404C2[0]),
  (VTBL_ENTRY)&_ZN7S3404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3404C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v88Ev,
};
extern VTBL_ENTRY _ZTI7S3404C2[];
extern  VTBL_ENTRY _ZTV7S3404C2[];
Class_Descriptor cd_S3404C2 = {  "S3404C2", // class name
  bases_S3404C2, 1,
  &(vtc_S3404C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3404C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3404C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3404C1  : S3404C2 {
  ::S1409C5_nt s3404c1f0;
  virtual  ~S3404C1(); // _ZN7S3404C1D1Ev
  virtual void  v1(); // _ZN7S3404C12v1Ev
  virtual void  v2(); // _ZN7S3404C12v2Ev
  virtual void  v3(); // _ZN7S3404C12v3Ev
  virtual void  v4(); // _ZN7S3404C12v4Ev
  virtual void  v5(); // _ZN7S3404C12v5Ev
  virtual void  v6(); // _ZN7S3404C12v6Ev
  S3404C1(); // tgen
};
//SIG(1 S3404C1) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5 v6 FC4}


 S3404C1 ::~S3404C1(){ note_dtor("S3404C1", this);}
void  S3404C1 ::v1(){vfunc_called(this, "_ZN7S3404C12v1Ev");}
void  S3404C1 ::v2(){vfunc_called(this, "_ZN7S3404C12v2Ev");}
void  S3404C1 ::v3(){vfunc_called(this, "_ZN7S3404C12v3Ev");}
void  S3404C1 ::v4(){vfunc_called(this, "_ZN7S3404C12v4Ev");}
void  S3404C1 ::v5(){vfunc_called(this, "_ZN7S3404C12v5Ev");}
void  S3404C1 ::v6(){vfunc_called(this, "_ZN7S3404C12v6Ev");}
S3404C1 ::S3404C1(){ note_ctor("S3404C1", this);} // tgen

static void Test_S3404C1()
{
  extern Class_Descriptor cd_S3404C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S3404C1, buf);
    S3404C1 *dp, &lv = *(dp=new (buf) S3404C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S3404C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3404C1)");
    check_base_class_offset(lv, (S3404C3*)(S3404C2*), 0, "S3404C1");
    check_base_class_offset(lv, (S3404C2*), 0, "S3404C1");
    check_field_offset(lv, s3404c1f0, ABISELECT(120,76), "S3404C1.s3404c1f0");
    test_class_info(&lv, &cd_S3404C1);
    dp->~S3404C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3404C1(Test_S3404C1, "S3404C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S3404C1C1Ev();
extern void _ZN7S3404C1D1Ev();
Name_Map name_map_S3404C1[] = {
  NSPAIR(_ZN7S3404C1C1Ev),
  NSPAIR(_ZN7S3404C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3404C3;
extern VTBL_ENTRY _ZTI7S3404C3[];
extern  VTBL_ENTRY _ZTV7S3404C3[];
extern Class_Descriptor cd_S3404C2;
extern VTBL_ENTRY _ZTI7S3404C2[];
extern  VTBL_ENTRY _ZTV7S3404C2[];
static Base_Class bases_S3404C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3404C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3404C1[];
extern void _ZN7S3404C1D1Ev();
extern void _ZN7S3404C1D0Ev();
extern void _ZN7S3404C32v7Ev();
extern void _ZN7S3404C32v8Ev();
extern void _ZN7S3404C32v9Ev();
extern void _ZN7S3404C33v10Ev();
extern void _ZN7S3404C33v11Ev();
extern void _ZN7S3404C33v12Ev();
extern void _ZN7S3404C33v13Ev();
extern void _ZN7S3404C33v14Ev();
extern void _ZN7S3404C33v15Ev();
extern void _ZN7S3404C33v16Ev();
extern void _ZN7S3404C33v17Ev();
extern void _ZN7S3404C33v18Ev();
extern void _ZN7S3404C33v19Ev();
extern void _ZN7S3404C33v20Ev();
extern void _ZN7S3404C33v21Ev();
extern void _ZN7S3404C33v22Ev();
extern void _ZN7S3404C33v23Ev();
extern void _ZN7S3404C33v24Ev();
extern void _ZN7S3404C33v25Ev();
extern void _ZN7S3404C33v26Ev();
extern void _ZN7S3404C33v27Ev();
extern void _ZN7S3404C33v28Ev();
extern void _ZN7S3404C33v29Ev();
extern void _ZN7S3404C33v30Ev();
extern void _ZN7S3404C33v31Ev();
extern void _ZN7S3404C33v32Ev();
extern void _ZN7S3404C33v33Ev();
extern void _ZN7S3404C33v34Ev();
extern void _ZN7S3404C33v35Ev();
extern void _ZN7S3404C33v36Ev();
extern void _ZN7S3404C33v37Ev();
extern void _ZN7S3404C33v38Ev();
extern void _ZN7S3404C33v39Ev();
extern void _ZN7S3404C33v40Ev();
extern void _ZN7S3404C33v41Ev();
extern void _ZN7S3404C33v42Ev();
extern void _ZN7S3404C33v43Ev();
extern void _ZN7S3404C33v44Ev();
extern void _ZN7S3404C33v45Ev();
extern void _ZN7S3404C33v46Ev();
extern void _ZN7S3404C33v47Ev();
extern void _ZN7S3404C33v48Ev();
extern void _ZN7S3404C33v49Ev();
extern void _ZN7S3404C33v50Ev();
extern void _ZN7S3404C33v51Ev();
extern void _ZN7S3404C33v52Ev();
extern void _ZN7S3404C33v53Ev();
extern void _ZN7S3404C33v54Ev();
extern void _ZN7S3404C33v55Ev();
extern void _ZN7S3404C33v56Ev();
extern void _ZN7S3404C33v57Ev();
extern void _ZN7S3404C33v58Ev();
extern void _ZN7S3404C33v59Ev();
extern void _ZN7S3404C33v60Ev();
extern void _ZN7S3404C33v61Ev();
extern void _ZN7S3404C33v62Ev();
extern void _ZN7S3404C33v63Ev();
extern void _ZN7S3404C33v64Ev();
extern void _ZN7S3404C33v65Ev();
extern void _ZN7S3404C33v66Ev();
extern void _ZN7S3404C33v67Ev();
extern void _ZN7S3404C33v68Ev();
extern void _ZN7S3404C33v69Ev();
extern void _ZN7S3404C33v70Ev();
extern void _ZN7S3404C23v71Ev();
extern void _ZN7S3404C23v72Ev();
extern void _ZN7S3404C23v73Ev();
extern void _ZN7S3404C23v74Ev();
extern void _ZN7S3404C23v75Ev();
extern void _ZN7S3404C23v76Ev();
extern void _ZN7S3404C23v77Ev();
extern void _ZN7S3404C23v78Ev();
extern void _ZN7S3404C23v79Ev();
extern void _ZN7S3404C23v80Ev();
extern void _ZN7S3404C23v81Ev();
extern void _ZN7S3404C23v82Ev();
extern void _ZN7S3404C23v83Ev();
extern void _ZN7S3404C23v84Ev();
extern void _ZN7S3404C23v85Ev();
extern void _ZN7S3404C23v86Ev();
extern void _ZN7S3404C23v87Ev();
extern void _ZN7S3404C23v88Ev();
extern void _ZN7S3404C12v1Ev();
extern void _ZN7S3404C12v2Ev();
extern void _ZN7S3404C12v3Ev();
extern void _ZN7S3404C12v4Ev();
extern void _ZN7S3404C12v5Ev();
extern void _ZN7S3404C12v6Ev();
static  VTBL_ENTRY vtc_S3404C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3404C1[0]),
  (VTBL_ENTRY)&_ZN7S3404C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3404C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3404C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3404C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3404C23v88Ev,
  (VTBL_ENTRY)&_ZN7S3404C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3404C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3404C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3404C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3404C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3404C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3404C1[];
extern  VTBL_ENTRY _ZTV7S3404C1[];
Class_Descriptor cd_S3404C1 = {  "S3404C1", // class name
  bases_S3404C1, 2,
  &(vtc_S3404C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S3404C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3404C1),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3374C3  {
  int s3374c3f0;
  __tsi64 s3374c3f1;
  void *s3374c3f2[4];
  int s3374c3f3[2];
  void *s3374c3f4;
  ::S1409C5_nt s3374c3f5;
  void *s3374c3f6[2];
  virtual  ~S3374C3(); // _ZN7S3374C3D1Ev
  virtual void  v6(); // _ZN7S3374C32v6Ev
  virtual void  v7(); // _ZN7S3374C32v7Ev
  virtual void  v8(); // _ZN7S3374C32v8Ev
  virtual void  v9(); // _ZN7S3374C32v9Ev
  virtual void  v10(); // _ZN7S3374C33v10Ev
  virtual void  v11(); // _ZN7S3374C33v11Ev
  virtual void  v12(); // _ZN7S3374C33v12Ev
  virtual void  v13(); // _ZN7S3374C33v13Ev
  virtual void  v14(); // _ZN7S3374C33v14Ev
  virtual void  v15(); // _ZN7S3374C33v15Ev
  virtual void  v16(); // _ZN7S3374C33v16Ev
  virtual void  v17(); // _ZN7S3374C33v17Ev
  virtual void  v18(); // _ZN7S3374C33v18Ev
  virtual void  v19(); // _ZN7S3374C33v19Ev
  virtual void  v20(); // _ZN7S3374C33v20Ev
  virtual void  v21(); // _ZN7S3374C33v21Ev
  virtual void  v22(); // _ZN7S3374C33v22Ev
  virtual void  v23(); // _ZN7S3374C33v23Ev
  virtual void  v24(); // _ZN7S3374C33v24Ev
  virtual void  v25(); // _ZN7S3374C33v25Ev
  virtual void  v26(); // _ZN7S3374C33v26Ev
  virtual void  v27(); // _ZN7S3374C33v27Ev
  virtual void  v28(); // _ZN7S3374C33v28Ev
  virtual void  v29(); // _ZN7S3374C33v29Ev
  virtual void  v30(); // _ZN7S3374C33v30Ev
  virtual void  v31(); // _ZN7S3374C33v31Ev
  virtual void  v32(); // _ZN7S3374C33v32Ev
  virtual void  v33(); // _ZN7S3374C33v33Ev
  virtual void  v34(); // _ZN7S3374C33v34Ev
  virtual void  v35(); // _ZN7S3374C33v35Ev
  virtual void  v36(); // _ZN7S3374C33v36Ev
  virtual void  v37(); // _ZN7S3374C33v37Ev
  virtual void  v38(); // _ZN7S3374C33v38Ev
  virtual void  v39(); // _ZN7S3374C33v39Ev
  virtual void  v40(); // _ZN7S3374C33v40Ev
  virtual void  v41(); // _ZN7S3374C33v41Ev
  virtual void  v42(); // _ZN7S3374C33v42Ev
  virtual void  v43(); // _ZN7S3374C33v43Ev
  virtual void  v44(); // _ZN7S3374C33v44Ev
  virtual void  v45(); // _ZN7S3374C33v45Ev
  virtual void  v46(); // _ZN7S3374C33v46Ev
  virtual void  v47(); // _ZN7S3374C33v47Ev
  virtual void  v48(); // _ZN7S3374C33v48Ev
  virtual void  v49(); // _ZN7S3374C33v49Ev
  virtual void  v50(); // _ZN7S3374C33v50Ev
  virtual void  v51(); // _ZN7S3374C33v51Ev
  virtual void  v52(); // _ZN7S3374C33v52Ev
  virtual void  v53(); // _ZN7S3374C33v53Ev
  virtual void  v54(); // _ZN7S3374C33v54Ev
  virtual void  v55(); // _ZN7S3374C33v55Ev
  virtual void  v56(); // _ZN7S3374C33v56Ev
  virtual void  v57(); // _ZN7S3374C33v57Ev
  virtual void  v58(); // _ZN7S3374C33v58Ev
  virtual void  v59(); // _ZN7S3374C33v59Ev
  virtual void  v60(); // _ZN7S3374C33v60Ev
  virtual void  v61(); // _ZN7S3374C33v61Ev
  virtual void  v62(); // _ZN7S3374C33v62Ev
  virtual void  v63(); // _ZN7S3374C33v63Ev
  virtual void  v64(); // _ZN7S3374C33v64Ev
  virtual void  v65(); // _ZN7S3374C33v65Ev
  virtual void  v66(); // _ZN7S3374C33v66Ev
  virtual void  v67(); // _ZN7S3374C33v67Ev
  virtual void  v68(); // _ZN7S3374C33v68Ev
  virtual void  v69(); // _ZN7S3374C33v69Ev
  S3374C3(); // tgen
};
//SIG(-1 S3374C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3374C3 ::~S3374C3(){ note_dtor("S3374C3", this);}
void  S3374C3 ::v6(){vfunc_called(this, "_ZN7S3374C32v6Ev");}
void  S3374C3 ::v7(){vfunc_called(this, "_ZN7S3374C32v7Ev");}
void  S3374C3 ::v8(){vfunc_called(this, "_ZN7S3374C32v8Ev");}
void  S3374C3 ::v9(){vfunc_called(this, "_ZN7S3374C32v9Ev");}
void  S3374C3 ::v10(){vfunc_called(this, "_ZN7S3374C33v10Ev");}
void  S3374C3 ::v11(){vfunc_called(this, "_ZN7S3374C33v11Ev");}
void  S3374C3 ::v12(){vfunc_called(this, "_ZN7S3374C33v12Ev");}
void  S3374C3 ::v13(){vfunc_called(this, "_ZN7S3374C33v13Ev");}
void  S3374C3 ::v14(){vfunc_called(this, "_ZN7S3374C33v14Ev");}
void  S3374C3 ::v15(){vfunc_called(this, "_ZN7S3374C33v15Ev");}
void  S3374C3 ::v16(){vfunc_called(this, "_ZN7S3374C33v16Ev");}
void  S3374C3 ::v17(){vfunc_called(this, "_ZN7S3374C33v17Ev");}
void  S3374C3 ::v18(){vfunc_called(this, "_ZN7S3374C33v18Ev");}
void  S3374C3 ::v19(){vfunc_called(this, "_ZN7S3374C33v19Ev");}
void  S3374C3 ::v20(){vfunc_called(this, "_ZN7S3374C33v20Ev");}
void  S3374C3 ::v21(){vfunc_called(this, "_ZN7S3374C33v21Ev");}
void  S3374C3 ::v22(){vfunc_called(this, "_ZN7S3374C33v22Ev");}
void  S3374C3 ::v23(){vfunc_called(this, "_ZN7S3374C33v23Ev");}
void  S3374C3 ::v24(){vfunc_called(this, "_ZN7S3374C33v24Ev");}
void  S3374C3 ::v25(){vfunc_called(this, "_ZN7S3374C33v25Ev");}
void  S3374C3 ::v26(){vfunc_called(this, "_ZN7S3374C33v26Ev");}
void  S3374C3 ::v27(){vfunc_called(this, "_ZN7S3374C33v27Ev");}
void  S3374C3 ::v28(){vfunc_called(this, "_ZN7S3374C33v28Ev");}
void  S3374C3 ::v29(){vfunc_called(this, "_ZN7S3374C33v29Ev");}
void  S3374C3 ::v30(){vfunc_called(this, "_ZN7S3374C33v30Ev");}
void  S3374C3 ::v31(){vfunc_called(this, "_ZN7S3374C33v31Ev");}
void  S3374C3 ::v32(){vfunc_called(this, "_ZN7S3374C33v32Ev");}
void  S3374C3 ::v33(){vfunc_called(this, "_ZN7S3374C33v33Ev");}
void  S3374C3 ::v34(){vfunc_called(this, "_ZN7S3374C33v34Ev");}
void  S3374C3 ::v35(){vfunc_called(this, "_ZN7S3374C33v35Ev");}
void  S3374C3 ::v36(){vfunc_called(this, "_ZN7S3374C33v36Ev");}
void  S3374C3 ::v37(){vfunc_called(this, "_ZN7S3374C33v37Ev");}
void  S3374C3 ::v38(){vfunc_called(this, "_ZN7S3374C33v38Ev");}
void  S3374C3 ::v39(){vfunc_called(this, "_ZN7S3374C33v39Ev");}
void  S3374C3 ::v40(){vfunc_called(this, "_ZN7S3374C33v40Ev");}
void  S3374C3 ::v41(){vfunc_called(this, "_ZN7S3374C33v41Ev");}
void  S3374C3 ::v42(){vfunc_called(this, "_ZN7S3374C33v42Ev");}
void  S3374C3 ::v43(){vfunc_called(this, "_ZN7S3374C33v43Ev");}
void  S3374C3 ::v44(){vfunc_called(this, "_ZN7S3374C33v44Ev");}
void  S3374C3 ::v45(){vfunc_called(this, "_ZN7S3374C33v45Ev");}
void  S3374C3 ::v46(){vfunc_called(this, "_ZN7S3374C33v46Ev");}
void  S3374C3 ::v47(){vfunc_called(this, "_ZN7S3374C33v47Ev");}
void  S3374C3 ::v48(){vfunc_called(this, "_ZN7S3374C33v48Ev");}
void  S3374C3 ::v49(){vfunc_called(this, "_ZN7S3374C33v49Ev");}
void  S3374C3 ::v50(){vfunc_called(this, "_ZN7S3374C33v50Ev");}
void  S3374C3 ::v51(){vfunc_called(this, "_ZN7S3374C33v51Ev");}
void  S3374C3 ::v52(){vfunc_called(this, "_ZN7S3374C33v52Ev");}
void  S3374C3 ::v53(){vfunc_called(this, "_ZN7S3374C33v53Ev");}
void  S3374C3 ::v54(){vfunc_called(this, "_ZN7S3374C33v54Ev");}
void  S3374C3 ::v55(){vfunc_called(this, "_ZN7S3374C33v55Ev");}
void  S3374C3 ::v56(){vfunc_called(this, "_ZN7S3374C33v56Ev");}
void  S3374C3 ::v57(){vfunc_called(this, "_ZN7S3374C33v57Ev");}
void  S3374C3 ::v58(){vfunc_called(this, "_ZN7S3374C33v58Ev");}
void  S3374C3 ::v59(){vfunc_called(this, "_ZN7S3374C33v59Ev");}
void  S3374C3 ::v60(){vfunc_called(this, "_ZN7S3374C33v60Ev");}
void  S3374C3 ::v61(){vfunc_called(this, "_ZN7S3374C33v61Ev");}
void  S3374C3 ::v62(){vfunc_called(this, "_ZN7S3374C33v62Ev");}
void  S3374C3 ::v63(){vfunc_called(this, "_ZN7S3374C33v63Ev");}
void  S3374C3 ::v64(){vfunc_called(this, "_ZN7S3374C33v64Ev");}
void  S3374C3 ::v65(){vfunc_called(this, "_ZN7S3374C33v65Ev");}
void  S3374C3 ::v66(){vfunc_called(this, "_ZN7S3374C33v66Ev");}
void  S3374C3 ::v67(){vfunc_called(this, "_ZN7S3374C33v67Ev");}
void  S3374C3 ::v68(){vfunc_called(this, "_ZN7S3374C33v68Ev");}
void  S3374C3 ::v69(){vfunc_called(this, "_ZN7S3374C33v69Ev");}
S3374C3 ::S3374C3(){ note_ctor("S3374C3", this);} // tgen

static void Test_S3374C3()
{
  extern Class_Descriptor cd_S3374C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3374C3, buf);
    S3374C3 *dp, &lv = *(dp=new (buf) S3374C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3374C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3374C3)");
    check_field_offset(lv, s3374c3f0, ABISELECT(8,4), "S3374C3.s3374c3f0");
    check_field_offset(lv, s3374c3f1, ABISELECT(16,8), "S3374C3.s3374c3f1");
    check_field_offset(lv, s3374c3f2, ABISELECT(24,16), "S3374C3.s3374c3f2");
    check_field_offset(lv, s3374c3f3, ABISELECT(56,32), "S3374C3.s3374c3f3");
    check_field_offset(lv, s3374c3f4, ABISELECT(64,40), "S3374C3.s3374c3f4");
    check_field_offset(lv, s3374c3f5, ABISELECT(72,44), "S3374C3.s3374c3f5");
    check_field_offset(lv, s3374c3f6, ABISELECT(80,52), "S3374C3.s3374c3f6");
    test_class_info(&lv, &cd_S3374C3);
    dp->~S3374C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3374C3(Test_S3374C3, "S3374C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3374C3C1Ev();
extern void _ZN7S3374C3D1Ev();
Name_Map name_map_S3374C3[] = {
  NSPAIR(_ZN7S3374C3C1Ev),
  NSPAIR(_ZN7S3374C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3374C3[];
extern void _ZN7S3374C3D1Ev();
extern void _ZN7S3374C3D0Ev();
extern void _ZN7S3374C32v6Ev();
extern void _ZN7S3374C32v7Ev();
extern void _ZN7S3374C32v8Ev();
extern void _ZN7S3374C32v9Ev();
extern void _ZN7S3374C33v10Ev();
extern void _ZN7S3374C33v11Ev();
extern void _ZN7S3374C33v12Ev();
extern void _ZN7S3374C33v13Ev();
extern void _ZN7S3374C33v14Ev();
extern void _ZN7S3374C33v15Ev();
extern void _ZN7S3374C33v16Ev();
extern void _ZN7S3374C33v17Ev();
extern void _ZN7S3374C33v18Ev();
extern void _ZN7S3374C33v19Ev();
extern void _ZN7S3374C33v20Ev();
extern void _ZN7S3374C33v21Ev();
extern void _ZN7S3374C33v22Ev();
extern void _ZN7S3374C33v23Ev();
extern void _ZN7S3374C33v24Ev();
extern void _ZN7S3374C33v25Ev();
extern void _ZN7S3374C33v26Ev();
extern void _ZN7S3374C33v27Ev();
extern void _ZN7S3374C33v28Ev();
extern void _ZN7S3374C33v29Ev();
extern void _ZN7S3374C33v30Ev();
extern void _ZN7S3374C33v31Ev();
extern void _ZN7S3374C33v32Ev();
extern void _ZN7S3374C33v33Ev();
extern void _ZN7S3374C33v34Ev();
extern void _ZN7S3374C33v35Ev();
extern void _ZN7S3374C33v36Ev();
extern void _ZN7S3374C33v37Ev();
extern void _ZN7S3374C33v38Ev();
extern void _ZN7S3374C33v39Ev();
extern void _ZN7S3374C33v40Ev();
extern void _ZN7S3374C33v41Ev();
extern void _ZN7S3374C33v42Ev();
extern void _ZN7S3374C33v43Ev();
extern void _ZN7S3374C33v44Ev();
extern void _ZN7S3374C33v45Ev();
extern void _ZN7S3374C33v46Ev();
extern void _ZN7S3374C33v47Ev();
extern void _ZN7S3374C33v48Ev();
extern void _ZN7S3374C33v49Ev();
extern void _ZN7S3374C33v50Ev();
extern void _ZN7S3374C33v51Ev();
extern void _ZN7S3374C33v52Ev();
extern void _ZN7S3374C33v53Ev();
extern void _ZN7S3374C33v54Ev();
extern void _ZN7S3374C33v55Ev();
extern void _ZN7S3374C33v56Ev();
extern void _ZN7S3374C33v57Ev();
extern void _ZN7S3374C33v58Ev();
extern void _ZN7S3374C33v59Ev();
extern void _ZN7S3374C33v60Ev();
extern void _ZN7S3374C33v61Ev();
extern void _ZN7S3374C33v62Ev();
extern void _ZN7S3374C33v63Ev();
extern void _ZN7S3374C33v64Ev();
extern void _ZN7S3374C33v65Ev();
extern void _ZN7S3374C33v66Ev();
extern void _ZN7S3374C33v67Ev();
extern void _ZN7S3374C33v68Ev();
extern void _ZN7S3374C33v69Ev();
static  VTBL_ENTRY vtc_S3374C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3374C3[0]),
  (VTBL_ENTRY)&_ZN7S3374C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3374C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v69Ev,
};
extern VTBL_ENTRY _ZTI7S3374C3[];
extern  VTBL_ENTRY _ZTV7S3374C3[];
Class_Descriptor cd_S3374C3 = {  "S3374C3", // class name
  0,0,//no base classes
  &(vtc_S3374C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3374C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3374C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3374C2  : S3374C3 {
  int s3374c2f0;
  ::S1409C30 s3374c2f1;
  virtual  ~S3374C2(); // _ZN7S3374C2D1Ev
  virtual void  v70(); // _ZN7S3374C23v70Ev
  virtual void  v71(); // _ZN7S3374C23v71Ev
  virtual void  v72(); // _ZN7S3374C23v72Ev
  virtual void  v73(); // _ZN7S3374C23v73Ev
  virtual void  v74(); // _ZN7S3374C23v74Ev
  virtual void  v75(); // _ZN7S3374C23v75Ev
  virtual void  v76(); // _ZN7S3374C23v76Ev
  virtual void  v77(); // _ZN7S3374C23v77Ev
  virtual void  v78(); // _ZN7S3374C23v78Ev
  virtual void  v79(); // _ZN7S3374C23v79Ev
  virtual void  v80(); // _ZN7S3374C23v80Ev
  virtual void  v81(); // _ZN7S3374C23v81Ev
  virtual void  v82(); // _ZN7S3374C23v82Ev
  virtual void  v83(); // _ZN7S3374C23v83Ev
  virtual void  v84(); // _ZN7S3374C23v84Ev
  virtual void  v85(); // _ZN7S3374C23v85Ev
  virtual void  v86(); // _ZN7S3374C23v86Ev
  virtual void  v87(); // _ZN7S3374C23v87Ev
  S3374C2(); // tgen
};
//SIG(-1 S3374C2) C1{ BC2{ vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fi FC4{ BC5{ BC6{ m Fp Fi[2]}}}}


 S3374C2 ::~S3374C2(){ note_dtor("S3374C2", this);}
void  S3374C2 ::v70(){vfunc_called(this, "_ZN7S3374C23v70Ev");}
void  S3374C2 ::v71(){vfunc_called(this, "_ZN7S3374C23v71Ev");}
void  S3374C2 ::v72(){vfunc_called(this, "_ZN7S3374C23v72Ev");}
void  S3374C2 ::v73(){vfunc_called(this, "_ZN7S3374C23v73Ev");}
void  S3374C2 ::v74(){vfunc_called(this, "_ZN7S3374C23v74Ev");}
void  S3374C2 ::v75(){vfunc_called(this, "_ZN7S3374C23v75Ev");}
void  S3374C2 ::v76(){vfunc_called(this, "_ZN7S3374C23v76Ev");}
void  S3374C2 ::v77(){vfunc_called(this, "_ZN7S3374C23v77Ev");}
void  S3374C2 ::v78(){vfunc_called(this, "_ZN7S3374C23v78Ev");}
void  S3374C2 ::v79(){vfunc_called(this, "_ZN7S3374C23v79Ev");}
void  S3374C2 ::v80(){vfunc_called(this, "_ZN7S3374C23v80Ev");}
void  S3374C2 ::v81(){vfunc_called(this, "_ZN7S3374C23v81Ev");}
void  S3374C2 ::v82(){vfunc_called(this, "_ZN7S3374C23v82Ev");}
void  S3374C2 ::v83(){vfunc_called(this, "_ZN7S3374C23v83Ev");}
void  S3374C2 ::v84(){vfunc_called(this, "_ZN7S3374C23v84Ev");}
void  S3374C2 ::v85(){vfunc_called(this, "_ZN7S3374C23v85Ev");}
void  S3374C2 ::v86(){vfunc_called(this, "_ZN7S3374C23v86Ev");}
void  S3374C2 ::v87(){vfunc_called(this, "_ZN7S3374C23v87Ev");}
S3374C2 ::S3374C2(){ note_ctor("S3374C2", this);} // tgen

static void Test_S3374C2()
{
  extern Class_Descriptor cd_S3374C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3374C2, buf);
    S3374C2 *dp, &lv = *(dp=new (buf) S3374C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3374C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3374C2)");
    check_base_class_offset(lv, (S3374C3*), 0, "S3374C2");
    check_field_offset(lv, s3374c2f0, ABISELECT(96,60), "S3374C2.s3374c2f0");
    check_field_offset(lv, s3374c2f1, ABISELECT(104,64), "S3374C2.s3374c2f1");
    test_class_info(&lv, &cd_S3374C2);
    dp->~S3374C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3374C2(Test_S3374C2, "S3374C2", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3374C2C1Ev();
extern void _ZN7S3374C2D1Ev();
Name_Map name_map_S3374C2[] = {
  NSPAIR(_ZN7S3374C2C1Ev),
  NSPAIR(_ZN7S3374C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3374C3;
extern VTBL_ENTRY _ZTI7S3374C3[];
extern  VTBL_ENTRY _ZTV7S3374C3[];
static Base_Class bases_S3374C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3374C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3374C2[];
extern void _ZN7S3374C2D1Ev();
extern void _ZN7S3374C2D0Ev();
extern void _ZN7S3374C32v6Ev();
extern void _ZN7S3374C32v7Ev();
extern void _ZN7S3374C32v8Ev();
extern void _ZN7S3374C32v9Ev();
extern void _ZN7S3374C33v10Ev();
extern void _ZN7S3374C33v11Ev();
extern void _ZN7S3374C33v12Ev();
extern void _ZN7S3374C33v13Ev();
extern void _ZN7S3374C33v14Ev();
extern void _ZN7S3374C33v15Ev();
extern void _ZN7S3374C33v16Ev();
extern void _ZN7S3374C33v17Ev();
extern void _ZN7S3374C33v18Ev();
extern void _ZN7S3374C33v19Ev();
extern void _ZN7S3374C33v20Ev();
extern void _ZN7S3374C33v21Ev();
extern void _ZN7S3374C33v22Ev();
extern void _ZN7S3374C33v23Ev();
extern void _ZN7S3374C33v24Ev();
extern void _ZN7S3374C33v25Ev();
extern void _ZN7S3374C33v26Ev();
extern void _ZN7S3374C33v27Ev();
extern void _ZN7S3374C33v28Ev();
extern void _ZN7S3374C33v29Ev();
extern void _ZN7S3374C33v30Ev();
extern void _ZN7S3374C33v31Ev();
extern void _ZN7S3374C33v32Ev();
extern void _ZN7S3374C33v33Ev();
extern void _ZN7S3374C33v34Ev();
extern void _ZN7S3374C33v35Ev();
extern void _ZN7S3374C33v36Ev();
extern void _ZN7S3374C33v37Ev();
extern void _ZN7S3374C33v38Ev();
extern void _ZN7S3374C33v39Ev();
extern void _ZN7S3374C33v40Ev();
extern void _ZN7S3374C33v41Ev();
extern void _ZN7S3374C33v42Ev();
extern void _ZN7S3374C33v43Ev();
extern void _ZN7S3374C33v44Ev();
extern void _ZN7S3374C33v45Ev();
extern void _ZN7S3374C33v46Ev();
extern void _ZN7S3374C33v47Ev();
extern void _ZN7S3374C33v48Ev();
extern void _ZN7S3374C33v49Ev();
extern void _ZN7S3374C33v50Ev();
extern void _ZN7S3374C33v51Ev();
extern void _ZN7S3374C33v52Ev();
extern void _ZN7S3374C33v53Ev();
extern void _ZN7S3374C33v54Ev();
extern void _ZN7S3374C33v55Ev();
extern void _ZN7S3374C33v56Ev();
extern void _ZN7S3374C33v57Ev();
extern void _ZN7S3374C33v58Ev();
extern void _ZN7S3374C33v59Ev();
extern void _ZN7S3374C33v60Ev();
extern void _ZN7S3374C33v61Ev();
extern void _ZN7S3374C33v62Ev();
extern void _ZN7S3374C33v63Ev();
extern void _ZN7S3374C33v64Ev();
extern void _ZN7S3374C33v65Ev();
extern void _ZN7S3374C33v66Ev();
extern void _ZN7S3374C33v67Ev();
extern void _ZN7S3374C33v68Ev();
extern void _ZN7S3374C33v69Ev();
extern void _ZN7S3374C23v70Ev();
extern void _ZN7S3374C23v71Ev();
extern void _ZN7S3374C23v72Ev();
extern void _ZN7S3374C23v73Ev();
extern void _ZN7S3374C23v74Ev();
extern void _ZN7S3374C23v75Ev();
extern void _ZN7S3374C23v76Ev();
extern void _ZN7S3374C23v77Ev();
extern void _ZN7S3374C23v78Ev();
extern void _ZN7S3374C23v79Ev();
extern void _ZN7S3374C23v80Ev();
extern void _ZN7S3374C23v81Ev();
extern void _ZN7S3374C23v82Ev();
extern void _ZN7S3374C23v83Ev();
extern void _ZN7S3374C23v84Ev();
extern void _ZN7S3374C23v85Ev();
extern void _ZN7S3374C23v86Ev();
extern void _ZN7S3374C23v87Ev();
static  VTBL_ENTRY vtc_S3374C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3374C2[0]),
  (VTBL_ENTRY)&_ZN7S3374C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3374C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S3374C2[];
extern  VTBL_ENTRY _ZTV7S3374C2[];
Class_Descriptor cd_S3374C2 = {  "S3374C2", // class name
  bases_S3374C2, 1,
  &(vtc_S3374C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3374C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3374C2),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3374C1  : S3374C2 {
  virtual  ~S3374C1(); // _ZN7S3374C1D1Ev
  virtual void  v1(); // _ZN7S3374C12v1Ev
  virtual void  v2(); // _ZN7S3374C12v2Ev
  virtual void  v3(); // _ZN7S3374C12v3Ev
  virtual void  v4(); // _ZN7S3374C12v4Ev
  virtual void  v5(); // _ZN7S3374C12v5Ev
  S3374C1(); // tgen
};
//SIG(1 S3374C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 Fi FC5{ BC6{ BC7{ m Fp Fi[2]}}}} vd v1 v2 v3 v4 v5}


 S3374C1 ::~S3374C1(){ note_dtor("S3374C1", this);}
void  S3374C1 ::v1(){vfunc_called(this, "_ZN7S3374C12v1Ev");}
void  S3374C1 ::v2(){vfunc_called(this, "_ZN7S3374C12v2Ev");}
void  S3374C1 ::v3(){vfunc_called(this, "_ZN7S3374C12v3Ev");}
void  S3374C1 ::v4(){vfunc_called(this, "_ZN7S3374C12v4Ev");}
void  S3374C1 ::v5(){vfunc_called(this, "_ZN7S3374C12v5Ev");}
S3374C1 ::S3374C1(){ note_ctor("S3374C1", this);} // tgen

static void Test_S3374C1()
{
  extern Class_Descriptor cd_S3374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3374C1, buf);
    S3374C1 *dp, &lv = *(dp=new (buf) S3374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3374C1)");
    check_base_class_offset(lv, (S3374C3*)(S3374C2*), 0, "S3374C1");
    check_base_class_offset(lv, (S3374C2*), 0, "S3374C1");
    test_class_info(&lv, &cd_S3374C1);
    dp->~S3374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3374C1(Test_S3374C1, "S3374C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3374C1C1Ev();
extern void _ZN7S3374C1D1Ev();
Name_Map name_map_S3374C1[] = {
  NSPAIR(_ZN7S3374C1C1Ev),
  NSPAIR(_ZN7S3374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3374C3;
extern VTBL_ENTRY _ZTI7S3374C3[];
extern  VTBL_ENTRY _ZTV7S3374C3[];
extern Class_Descriptor cd_S3374C2;
extern VTBL_ENTRY _ZTI7S3374C2[];
extern  VTBL_ENTRY _ZTV7S3374C2[];
static Base_Class bases_S3374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3374C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3374C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3374C1[];
extern void _ZN7S3374C1D1Ev();
extern void _ZN7S3374C1D0Ev();
extern void _ZN7S3374C32v6Ev();
extern void _ZN7S3374C32v7Ev();
extern void _ZN7S3374C32v8Ev();
extern void _ZN7S3374C32v9Ev();
extern void _ZN7S3374C33v10Ev();
extern void _ZN7S3374C33v11Ev();
extern void _ZN7S3374C33v12Ev();
extern void _ZN7S3374C33v13Ev();
extern void _ZN7S3374C33v14Ev();
extern void _ZN7S3374C33v15Ev();
extern void _ZN7S3374C33v16Ev();
extern void _ZN7S3374C33v17Ev();
extern void _ZN7S3374C33v18Ev();
extern void _ZN7S3374C33v19Ev();
extern void _ZN7S3374C33v20Ev();
extern void _ZN7S3374C33v21Ev();
extern void _ZN7S3374C33v22Ev();
extern void _ZN7S3374C33v23Ev();
extern void _ZN7S3374C33v24Ev();
extern void _ZN7S3374C33v25Ev();
extern void _ZN7S3374C33v26Ev();
extern void _ZN7S3374C33v27Ev();
extern void _ZN7S3374C33v28Ev();
extern void _ZN7S3374C33v29Ev();
extern void _ZN7S3374C33v30Ev();
extern void _ZN7S3374C33v31Ev();
extern void _ZN7S3374C33v32Ev();
extern void _ZN7S3374C33v33Ev();
extern void _ZN7S3374C33v34Ev();
extern void _ZN7S3374C33v35Ev();
extern void _ZN7S3374C33v36Ev();
extern void _ZN7S3374C33v37Ev();
extern void _ZN7S3374C33v38Ev();
extern void _ZN7S3374C33v39Ev();
extern void _ZN7S3374C33v40Ev();
extern void _ZN7S3374C33v41Ev();
extern void _ZN7S3374C33v42Ev();
extern void _ZN7S3374C33v43Ev();
extern void _ZN7S3374C33v44Ev();
extern void _ZN7S3374C33v45Ev();
extern void _ZN7S3374C33v46Ev();
extern void _ZN7S3374C33v47Ev();
extern void _ZN7S3374C33v48Ev();
extern void _ZN7S3374C33v49Ev();
extern void _ZN7S3374C33v50Ev();
extern void _ZN7S3374C33v51Ev();
extern void _ZN7S3374C33v52Ev();
extern void _ZN7S3374C33v53Ev();
extern void _ZN7S3374C33v54Ev();
extern void _ZN7S3374C33v55Ev();
extern void _ZN7S3374C33v56Ev();
extern void _ZN7S3374C33v57Ev();
extern void _ZN7S3374C33v58Ev();
extern void _ZN7S3374C33v59Ev();
extern void _ZN7S3374C33v60Ev();
extern void _ZN7S3374C33v61Ev();
extern void _ZN7S3374C33v62Ev();
extern void _ZN7S3374C33v63Ev();
extern void _ZN7S3374C33v64Ev();
extern void _ZN7S3374C33v65Ev();
extern void _ZN7S3374C33v66Ev();
extern void _ZN7S3374C33v67Ev();
extern void _ZN7S3374C33v68Ev();
extern void _ZN7S3374C33v69Ev();
extern void _ZN7S3374C23v70Ev();
extern void _ZN7S3374C23v71Ev();
extern void _ZN7S3374C23v72Ev();
extern void _ZN7S3374C23v73Ev();
extern void _ZN7S3374C23v74Ev();
extern void _ZN7S3374C23v75Ev();
extern void _ZN7S3374C23v76Ev();
extern void _ZN7S3374C23v77Ev();
extern void _ZN7S3374C23v78Ev();
extern void _ZN7S3374C23v79Ev();
extern void _ZN7S3374C23v80Ev();
extern void _ZN7S3374C23v81Ev();
extern void _ZN7S3374C23v82Ev();
extern void _ZN7S3374C23v83Ev();
extern void _ZN7S3374C23v84Ev();
extern void _ZN7S3374C23v85Ev();
extern void _ZN7S3374C23v86Ev();
extern void _ZN7S3374C23v87Ev();
extern void _ZN7S3374C12v1Ev();
extern void _ZN7S3374C12v2Ev();
extern void _ZN7S3374C12v3Ev();
extern void _ZN7S3374C12v4Ev();
extern void _ZN7S3374C12v5Ev();
static  VTBL_ENTRY vtc_S3374C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3374C1[0]),
  (VTBL_ENTRY)&_ZN7S3374C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3374C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3374C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3374C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v85Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v86Ev,
  (VTBL_ENTRY)&_ZN7S3374C23v87Ev,
  (VTBL_ENTRY)&_ZN7S3374C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3374C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3374C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3374C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3374C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3374C1[];
extern  VTBL_ENTRY _ZTV7S3374C1[];
Class_Descriptor cd_S3374C1 = {  "S3374C1", // class name
  bases_S3374C1, 2,
  &(vtc_S3374C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3374C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3374C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8188C1  : S20570C17 {
  long s8188c1f0;
  int s8188c1f1[4];
  ::S20570C5 s8188c1f2;
  int s8188c1f3;
  __tsi64 s8188c1f4;
  unsigned int s8188c1f5:1;
  ::S20570C16 s8188c1f6;
  virtual  ~S8188C1(); // _ZN7S8188C1D1Ev
  virtual void  v1(); // _ZN7S8188C12v1Ev
  virtual void  v2(); // _ZN7S8188C12v2Ev
  S8188C1(); // tgen
};
//SIG(1 S8188C1) C1{ BC2{ vd m Fp Fl Fi Fp} vd v1 v2 Fl Fi[4] FC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} Fi FL Fi:1 FC4{ VBC5{ BC3 v3 v4 v5 FD Fs:16 Fi[7] FD Fc:6 FL:64 FL[2] Fi} VBC6{ BC5 VBC3 FC7{} FL Fi:23 Fs Fi Fl[2]} BC8{ BC9{ VBC3 vd v6 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC5 v7 FD Fp Fs[6] Fp Fi FD Fi} VBC10{ VBC3 Fp Fi FC5 Fi Fp} vd Fc:5 Fl[4] Fc[6] FC2}}


 S8188C1 ::~S8188C1(){ note_dtor("S8188C1", this);}
void  S8188C1 ::v1(){vfunc_called(this, "_ZN7S8188C12v1Ev");}
void  S8188C1 ::v2(){vfunc_called(this, "_ZN7S8188C12v2Ev");}
S8188C1 ::S8188C1(){ note_ctor("S8188C1", this);} // tgen

static void Test_S8188C1()
{
  extern Class_Descriptor cd_S8188C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(227,658)];
    init_test(&cd_S8188C1, buf);
    S8188C1 *dp, &lv = *(dp=new (buf) S8188C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3616,2628), "sizeof(S8188C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S8188C1)");
    check_base_class_offset(lv, (S20570C17*), 0, "S8188C1");
    check_field_offset(lv, s8188c1f0, ABISELECT(40,20), "S8188C1.s8188c1f0");
    check_field_offset(lv, s8188c1f1, ABISELECT(48,24), "S8188C1.s8188c1f1");
    check_field_offset(lv, s8188c1f2, ABISELECT(64,40), "S8188C1.s8188c1f2");
    check_field_offset(lv, s8188c1f3, ABISELECT(288,208), "S8188C1.s8188c1f3");
    check_field_offset(lv, s8188c1f4, ABISELECT(296,212), "S8188C1.s8188c1f4");
    set_bf_and_test(lv, s8188c1f5, ABISELECT(304,220), 0, 1, 1, "S8188C1");
    check_field_offset(lv, s8188c1f6, ABISELECT(320,224), "S8188C1.s8188c1f6");
    test_class_info(&lv, &cd_S8188C1);
    dp->~S8188C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8188C1(Test_S8188C1, "S8188C1", ABISELECT(3616,2628));

#else // __cplusplus

extern void _ZN7S8188C1C1Ev();
extern void _ZN7S8188C1D1Ev();
Name_Map name_map_S8188C1[] = {
  NSPAIR(_ZN7S8188C1C1Ev),
  NSPAIR(_ZN7S8188C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
static Base_Class bases_S8188C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8188C1[];
extern void _ZN7S8188C1D1Ev();
extern void _ZN7S8188C1D0Ev();
extern void _ZN7S8188C12v1Ev();
extern void _ZN7S8188C12v2Ev();
static  VTBL_ENTRY vtc_S8188C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8188C1[0]),
  (VTBL_ENTRY)&_ZN7S8188C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8188C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8188C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8188C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S8188C1[];
extern  VTBL_ENTRY _ZTV7S8188C1[];
Class_Descriptor cd_S8188C1 = {  "S8188C1", // class name
  bases_S8188C1, 1,
  &(vtc_S8188C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3616,2628), // object size
  NSPAIRA(_ZTI7S8188C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8188C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8187C1  : S20570C17 {
  long s8187c1f0;
  int s8187c1f1[4];
  ::S20570C5 s8187c1f2;
  int s8187c1f3;
  __tsi64 s8187c1f4;
  unsigned int s8187c1f5:1;
  ::S20571C16 s8187c1f6;
  virtual  ~S8187C1(); // _ZN7S8187C1D1Ev
  virtual void  v1(); // _ZN7S8187C12v1Ev
  virtual void  v2(); // _ZN7S8187C12v2Ev
  S8187C1(); // tgen
};
//SIG(1 S8187C1) C1{ BC2{ vd m Fp Fl Fi Fp} vd v1 v2 Fl Fi[4] FC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} Fi FL Fi:1 FC4{ VBC5{ BC3 v3 v4 v5 FD Fs:16 Fi[7] FD Fc:6 Fi:32 FL[2] Fi} VBC6{ BC5 VBC3 FC7{} FL Fi:23 Fs Fi FL[2]} BC8{ BC9{ VBC3 vd v6 FC3[5] FL Fs:5 Fc:0 Fp[2] Fi FL} BC3 BC5 v7 FD Fp Fs[6] Fp Fi FD Fi} VBC10{ VBC3 Fp Fi FC5 Fi Fp} vd Fc:5 FL[4] Fc[6] FC2}}


 S8187C1 ::~S8187C1(){ note_dtor("S8187C1", this);}
void  S8187C1 ::v1(){vfunc_called(this, "_ZN7S8187C12v1Ev");}
void  S8187C1 ::v2(){vfunc_called(this, "_ZN7S8187C12v2Ev");}
S8187C1 ::S8187C1(){ note_ctor("S8187C1", this);} // tgen

static void Test_S8187C1()
{
  extern Class_Descriptor cd_S8187C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(224,660)];
    init_test(&cd_S8187C1, buf);
    S8187C1 *dp, &lv = *(dp=new (buf) S8187C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3568,2636), "sizeof(S8187C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S8187C1)");
    check_base_class_offset(lv, (S20570C17*), 0, "S8187C1");
    check_field_offset(lv, s8187c1f0, ABISELECT(40,20), "S8187C1.s8187c1f0");
    check_field_offset(lv, s8187c1f1, ABISELECT(48,24), "S8187C1.s8187c1f1");
    check_field_offset(lv, s8187c1f2, ABISELECT(64,40), "S8187C1.s8187c1f2");
    check_field_offset(lv, s8187c1f3, ABISELECT(288,208), "S8187C1.s8187c1f3");
    check_field_offset(lv, s8187c1f4, ABISELECT(296,212), "S8187C1.s8187c1f4");
    set_bf_and_test(lv, s8187c1f5, ABISELECT(304,220), 0, 1, 1, "S8187C1");
    check_field_offset(lv, s8187c1f6, ABISELECT(320,224), "S8187C1.s8187c1f6");
    test_class_info(&lv, &cd_S8187C1);
    dp->~S8187C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8187C1(Test_S8187C1, "S8187C1", ABISELECT(3568,2636));

#else // __cplusplus

extern void _ZN7S8187C1C1Ev();
extern void _ZN7S8187C1D1Ev();
Name_Map name_map_S8187C1[] = {
  NSPAIR(_ZN7S8187C1C1Ev),
  NSPAIR(_ZN7S8187C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C17;
extern VTBL_ENTRY _ZTI9S20570C17[];
extern  VTBL_ENTRY _ZTV9S20570C17[];
static Base_Class bases_S8187C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8187C1[];
extern void _ZN7S8187C1D1Ev();
extern void _ZN7S8187C1D0Ev();
extern void _ZN7S8187C12v1Ev();
extern void _ZN7S8187C12v2Ev();
static  VTBL_ENTRY vtc_S8187C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8187C1[0]),
  (VTBL_ENTRY)&_ZN7S8187C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8187C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8187C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8187C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S8187C1[];
extern  VTBL_ENTRY _ZTV7S8187C1[];
Class_Descriptor cd_S8187C1 = {  "S8187C1", // class name
  bases_S8187C1, 1,
  &(vtc_S8187C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3568,2636), // object size
  NSPAIRA(_ZTI7S8187C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8187C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4302C3  {
  virtual  ~S4302C3(); // _ZN7S4302C3D1Ev
  virtual void  v18(); // _ZN7S4302C33v18Ev
  virtual void  v19(); // _ZN7S4302C33v19Ev
  virtual void  v20(); // _ZN7S4302C33v20Ev
  S4302C3(); // tgen
};
//SIG(-1 S4302C3) C1{ vd v1 v2 v3}


 S4302C3 ::~S4302C3(){ note_dtor("S4302C3", this);}
void  S4302C3 ::v18(){vfunc_called(this, "_ZN7S4302C33v18Ev");}
void  S4302C3 ::v19(){vfunc_called(this, "_ZN7S4302C33v19Ev");}
void  S4302C3 ::v20(){vfunc_called(this, "_ZN7S4302C33v20Ev");}
S4302C3 ::S4302C3(){ note_ctor("S4302C3", this);} // tgen

static void Test_S4302C3()
{
  extern Class_Descriptor cd_S4302C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4302C3, buf);
    S4302C3 *dp, &lv = *(dp=new (buf) S4302C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4302C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4302C3)");
    test_class_info(&lv, &cd_S4302C3);
    dp->~S4302C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4302C3(Test_S4302C3, "S4302C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4302C3C1Ev();
extern void _ZN7S4302C3D1Ev();
Name_Map name_map_S4302C3[] = {
  NSPAIR(_ZN7S4302C3C1Ev),
  NSPAIR(_ZN7S4302C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4302C3[];
extern void _ZN7S4302C3D1Ev();
extern void _ZN7S4302C3D0Ev();
extern void _ZN7S4302C33v18Ev();
extern void _ZN7S4302C33v19Ev();
extern void _ZN7S4302C33v20Ev();
static  VTBL_ENTRY vtc_S4302C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4302C3[0]),
  (VTBL_ENTRY)&_ZN7S4302C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4302C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S4302C3[];
extern  VTBL_ENTRY _ZTV7S4302C3[];
Class_Descriptor cd_S4302C3 = {  "S4302C3", // class name
  0,0,//no base classes
  &(vtc_S4302C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4302C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4302C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4302C4_nt  {
  virtual  ~S4302C4_nt(); // _ZN10S4302C4_ntD1Ev
  virtual void  v21(); // _ZN10S4302C4_nt3v21Ev
  virtual void  v22(); // _ZN10S4302C4_nt3v22Ev
  S4302C4_nt(); // tgen
};
//SIG(-1 S4302C4_nt) C1{ vd v1 v2}


 S4302C4_nt ::~S4302C4_nt(){ note_dtor("S4302C4_nt", this);}
void  S4302C4_nt ::v21(){vfunc_called(this, "_ZN10S4302C4_nt3v21Ev");}
void  S4302C4_nt ::v22(){vfunc_called(this, "_ZN10S4302C4_nt3v22Ev");}
S4302C4_nt ::S4302C4_nt(){ note_ctor("S4302C4_nt", this);} // tgen

//skip512 S4302C4_nt

#else // __cplusplus

extern void _ZN10S4302C4_ntC1Ev();
extern void _ZN10S4302C4_ntD1Ev();
Name_Map name_map_S4302C4_nt[] = {
  NSPAIR(_ZN10S4302C4_ntC1Ev),
  NSPAIR(_ZN10S4302C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4302C4_nt[];
extern void _ZN10S4302C4_ntD1Ev();
extern void _ZN10S4302C4_ntD0Ev();
extern void _ZN10S4302C4_nt3v21Ev();
extern void _ZN10S4302C4_nt3v22Ev();
static  VTBL_ENTRY vtc_S4302C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4302C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S4302C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4302C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4302C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4302C4_nt3v22Ev,
};
extern VTBL_ENTRY _ZTI10S4302C4_nt[];
VTBL_ENTRY *P__ZTI10S4302C4_nt = _ZTI10S4302C4_nt; 
extern  VTBL_ENTRY _ZTV10S4302C4_nt[];
Class_Descriptor cd_S4302C4_nt = {  "S4302C4_nt", // class name
  0,0,//no base classes
  &(vtc_S4302C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4302C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4302C4_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4302C2_nt  : S4302C3 , S4302C4_nt {
  void *s4302c2f0;
  ::S1409C9_nt s4302c2f1;
  void *s4302c2f2[3];
  ::S2265C26 s4302c2f3;
  char s4302c2f4[33];
  virtual  ~S4302C2_nt(); // _ZN10S4302C2_ntD1Ev
  virtual void  v23(); // _ZN10S4302C2_nt3v23Ev
  virtual void  v24(); // _ZN10S4302C2_nt3v24Ev
  virtual void  v25(); // _ZN10S4302C2_nt3v25Ev
  virtual void  v26(); // _ZN10S4302C2_nt3v26Ev
  virtual void  v27(); // _ZN10S4302C2_nt3v27Ev
  virtual void  v28(); // _ZN10S4302C2_nt3v28Ev
  virtual void  v29(); // _ZN10S4302C2_nt3v29Ev
  virtual void  v30(); // _ZN10S4302C2_nt3v30Ev
  virtual void  v31(); // _ZN10S4302C2_nt3v31Ev
  virtual void  v32(); // _ZN10S4302C2_nt3v32Ev
  virtual void  v33(); // _ZN10S4302C2_nt3v33Ev
  virtual void  v34(); // _ZN10S4302C2_nt3v34Ev
  virtual void  v35(); // _ZN10S4302C2_nt3v35Ev
  virtual void  v36(); // _ZN10S4302C2_nt3v36Ev
  virtual void  v37(); // _ZN10S4302C2_nt3v37Ev
  virtual void  v38(); // _ZN10S4302C2_nt3v38Ev
  virtual void  v39(); // _ZN10S4302C2_nt3v39Ev
  virtual void  v40(); // _ZN10S4302C2_nt3v40Ev
  virtual void  v41(); // _ZN10S4302C2_nt3v41Ev
  virtual void  v42(); // _ZN10S4302C2_nt3v42Ev
  virtual void  v43(); // _ZN10S4302C2_nt3v43Ev
  virtual void  v44(); // _ZN10S4302C2_nt3v44Ev
  S4302C2_nt(); // tgen
};
//SIG(-1 S4302C2_nt) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26 v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC4{ m Fi} Fp[3] FC5{ m Fp Fi FC6{ m} FC7{ m}} Fc[33]}


 S4302C2_nt ::~S4302C2_nt(){ note_dtor("S4302C2_nt", this);}
void  S4302C2_nt ::v23(){vfunc_called(this, "_ZN10S4302C2_nt3v23Ev");}
void  S4302C2_nt ::v24(){vfunc_called(this, "_ZN10S4302C2_nt3v24Ev");}
void  S4302C2_nt ::v25(){vfunc_called(this, "_ZN10S4302C2_nt3v25Ev");}
void  S4302C2_nt ::v26(){vfunc_called(this, "_ZN10S4302C2_nt3v26Ev");}
void  S4302C2_nt ::v27(){vfunc_called(this, "_ZN10S4302C2_nt3v27Ev");}
void  S4302C2_nt ::v28(){vfunc_called(this, "_ZN10S4302C2_nt3v28Ev");}
void  S4302C2_nt ::v29(){vfunc_called(this, "_ZN10S4302C2_nt3v29Ev");}
void  S4302C2_nt ::v30(){vfunc_called(this, "_ZN10S4302C2_nt3v30Ev");}
void  S4302C2_nt ::v31(){vfunc_called(this, "_ZN10S4302C2_nt3v31Ev");}
void  S4302C2_nt ::v32(){vfunc_called(this, "_ZN10S4302C2_nt3v32Ev");}
void  S4302C2_nt ::v33(){vfunc_called(this, "_ZN10S4302C2_nt3v33Ev");}
void  S4302C2_nt ::v34(){vfunc_called(this, "_ZN10S4302C2_nt3v34Ev");}
void  S4302C2_nt ::v35(){vfunc_called(this, "_ZN10S4302C2_nt3v35Ev");}
void  S4302C2_nt ::v36(){vfunc_called(this, "_ZN10S4302C2_nt3v36Ev");}
void  S4302C2_nt ::v37(){vfunc_called(this, "_ZN10S4302C2_nt3v37Ev");}
void  S4302C2_nt ::v38(){vfunc_called(this, "_ZN10S4302C2_nt3v38Ev");}
void  S4302C2_nt ::v39(){vfunc_called(this, "_ZN10S4302C2_nt3v39Ev");}
void  S4302C2_nt ::v40(){vfunc_called(this, "_ZN10S4302C2_nt3v40Ev");}
void  S4302C2_nt ::v41(){vfunc_called(this, "_ZN10S4302C2_nt3v41Ev");}
void  S4302C2_nt ::v42(){vfunc_called(this, "_ZN10S4302C2_nt3v42Ev");}
void  S4302C2_nt ::v43(){vfunc_called(this, "_ZN10S4302C2_nt3v43Ev");}
void  S4302C2_nt ::v44(){vfunc_called(this, "_ZN10S4302C2_nt3v44Ev");}
S4302C2_nt ::S4302C2_nt(){ note_ctor("S4302C2_nt", this);} // tgen

//skip512 S4302C2_nt

#else // __cplusplus

extern void _ZN10S4302C2_ntC1Ev();
extern void _ZN10S4302C2_ntD1Ev();
Name_Map name_map_S4302C2_nt[] = {
  NSPAIR(_ZN10S4302C2_ntC1Ev),
  NSPAIR(_ZN10S4302C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4302C3;
extern VTBL_ENTRY _ZTI7S4302C3[];
extern  VTBL_ENTRY _ZTV7S4302C3[];
extern Class_Descriptor cd_S4302C4_nt;
extern VTBL_ENTRY _ZTI10S4302C4_nt[];
extern  VTBL_ENTRY _ZTV10S4302C4_nt[];
static Base_Class bases_S4302C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4302C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4302C4_nt,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4302C2_nt[];
extern void _ZN10S4302C2_ntD1Ev();
extern void _ZN10S4302C2_ntD0Ev();
extern void _ZN7S4302C33v18Ev();
extern void _ZN7S4302C33v19Ev();
extern void _ZN7S4302C33v20Ev();
extern void _ZN10S4302C2_nt3v23Ev();
extern void _ZN10S4302C2_nt3v24Ev();
extern void _ZN10S4302C2_nt3v25Ev();
extern void _ZN10S4302C2_nt3v26Ev();
extern void _ZN10S4302C2_nt3v27Ev();
extern void _ZN10S4302C2_nt3v28Ev();
extern void _ZN10S4302C2_nt3v29Ev();
extern void _ZN10S4302C2_nt3v30Ev();
extern void _ZN10S4302C2_nt3v31Ev();
extern void _ZN10S4302C2_nt3v32Ev();
extern void _ZN10S4302C2_nt3v33Ev();
extern void _ZN10S4302C2_nt3v34Ev();
extern void _ZN10S4302C2_nt3v35Ev();
extern void _ZN10S4302C2_nt3v36Ev();
extern void _ZN10S4302C2_nt3v37Ev();
extern void _ZN10S4302C2_nt3v38Ev();
extern void _ZN10S4302C2_nt3v39Ev();
extern void _ZN10S4302C2_nt3v40Ev();
extern void _ZN10S4302C2_nt3v41Ev();
extern void _ZN10S4302C2_nt3v42Ev();
extern void _ZN10S4302C2_nt3v43Ev();
extern void _ZN10S4302C2_nt3v44Ev();
extern void ABISELECT(_ZThn8_N10S4302C2_ntD1Ev,_ZThn4_N10S4302C2_ntD1Ev)();
extern void ABISELECT(_ZThn8_N10S4302C2_ntD0Ev,_ZThn4_N10S4302C2_ntD0Ev)();
extern void _ZN10S4302C4_nt3v21Ev();
extern void _ZN10S4302C4_nt3v22Ev();
static  VTBL_ENTRY vtc_S4302C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4302C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4302C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v20Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v44Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S4302C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S4302C2_ntD1Ev,_ZThn4_N10S4302C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S4302C2_ntD0Ev,_ZThn4_N10S4302C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S4302C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4302C4_nt3v22Ev,
};
extern VTBL_ENTRY _ZTI10S4302C2_nt[];
VTBL_ENTRY *P__ZTI10S4302C2_nt = _ZTI10S4302C2_nt; 
extern  VTBL_ENTRY _ZTV10S4302C2_nt[];
Class_Descriptor cd_S4302C2_nt = {  "S4302C2_nt", // class name
  bases_S4302C2_nt, 2,
  &(vtc_S4302C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI10S4302C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S4302C2_nt),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4302C9_nt  {
  virtual  ~S4302C9_nt(); // _ZN10S4302C9_ntD1Ev
  virtual void  v45(); // _ZN10S4302C9_nt3v45Ev
  virtual void  v46(); // _ZN10S4302C9_nt3v46Ev
  virtual void  v47(); // _ZN10S4302C9_nt3v47Ev
  virtual void  v48(); // _ZN10S4302C9_nt3v48Ev
  virtual void  v49(); // _ZN10S4302C9_nt3v49Ev
  virtual void  v50(); // _ZN10S4302C9_nt3v50Ev
  S4302C9_nt(); // tgen
};
//SIG(-1 S4302C9_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S4302C9_nt ::~S4302C9_nt(){ note_dtor("S4302C9_nt", this);}
void  S4302C9_nt ::v45(){vfunc_called(this, "_ZN10S4302C9_nt3v45Ev");}
void  S4302C9_nt ::v46(){vfunc_called(this, "_ZN10S4302C9_nt3v46Ev");}
void  S4302C9_nt ::v47(){vfunc_called(this, "_ZN10S4302C9_nt3v47Ev");}
void  S4302C9_nt ::v48(){vfunc_called(this, "_ZN10S4302C9_nt3v48Ev");}
void  S4302C9_nt ::v49(){vfunc_called(this, "_ZN10S4302C9_nt3v49Ev");}
void  S4302C9_nt ::v50(){vfunc_called(this, "_ZN10S4302C9_nt3v50Ev");}
S4302C9_nt ::S4302C9_nt(){ note_ctor("S4302C9_nt", this);} // tgen

//skip512 S4302C9_nt

#else // __cplusplus

extern void _ZN10S4302C9_ntC1Ev();
extern void _ZN10S4302C9_ntD1Ev();
Name_Map name_map_S4302C9_nt[] = {
  NSPAIR(_ZN10S4302C9_ntC1Ev),
  NSPAIR(_ZN10S4302C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4302C9_nt[];
extern void _ZN10S4302C9_ntD1Ev();
extern void _ZN10S4302C9_ntD0Ev();
extern void _ZN10S4302C9_nt3v45Ev();
extern void _ZN10S4302C9_nt3v46Ev();
extern void _ZN10S4302C9_nt3v47Ev();
extern void _ZN10S4302C9_nt3v48Ev();
extern void _ZN10S4302C9_nt3v49Ev();
extern void _ZN10S4302C9_nt3v50Ev();
static  VTBL_ENTRY vtc_S4302C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4302C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S4302C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v50Ev,
};
extern VTBL_ENTRY _ZTI10S4302C9_nt[];
VTBL_ENTRY *P__ZTI10S4302C9_nt = _ZTI10S4302C9_nt; 
extern  VTBL_ENTRY _ZTV10S4302C9_nt[];
Class_Descriptor cd_S4302C9_nt = {  "S4302C9_nt", // class name
  0,0,//no base classes
  &(vtc_S4302C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4302C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4302C9_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4302C10  {
  virtual  ~S4302C10(); // _ZN8S4302C10D1Ev
  virtual void  v51(); // _ZN8S4302C103v51Ev
  S4302C10(); // tgen
};
//SIG(-1 S4302C10) C1{ vd v1}


 S4302C10 ::~S4302C10(){ note_dtor("S4302C10", this);}
void  S4302C10 ::v51(){vfunc_called(this, "_ZN8S4302C103v51Ev");}
S4302C10 ::S4302C10(){ note_ctor("S4302C10", this);} // tgen

static void Test_S4302C10()
{
  extern Class_Descriptor cd_S4302C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4302C10, buf);
    S4302C10 *dp, &lv = *(dp=new (buf) S4302C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4302C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4302C10)");
    test_class_info(&lv, &cd_S4302C10);
    dp->~S4302C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4302C10(Test_S4302C10, "S4302C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4302C10C1Ev();
extern void _ZN8S4302C10D1Ev();
Name_Map name_map_S4302C10[] = {
  NSPAIR(_ZN8S4302C10C1Ev),
  NSPAIR(_ZN8S4302C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4302C10[];
extern void _ZN8S4302C10D1Ev();
extern void _ZN8S4302C10D0Ev();
extern void _ZN8S4302C103v51Ev();
static  VTBL_ENTRY vtc_S4302C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4302C10[0]),
  (VTBL_ENTRY)&_ZN8S4302C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4302C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4302C103v51Ev,
};
extern VTBL_ENTRY _ZTI8S4302C10[];
extern  VTBL_ENTRY _ZTV8S4302C10[];
Class_Descriptor cd_S4302C10 = {  "S4302C10", // class name
  0,0,//no base classes
  &(vtc_S4302C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4302C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4302C10),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4302C1  : S4302C2_nt , S4302C9_nt , S4302C10 {
  void *s4302c1f0;
  int s4302c1f1;
  char s4302c1f2;
  void *s4302c1f3;
  virtual  ~S4302C1(); // _ZN7S4302C1D1Ev
  virtual void  v1(); // _ZN7S4302C12v1Ev
  virtual void  v2(); // _ZN7S4302C12v2Ev
  virtual void  v3(); // _ZN7S4302C12v3Ev
  virtual void  v4(); // _ZN7S4302C12v4Ev
  virtual void  v5(); // _ZN7S4302C12v5Ev
  virtual void  v6(); // _ZN7S4302C12v6Ev
  virtual void  v7(); // _ZN7S4302C12v7Ev
  virtual void  v8(); // _ZN7S4302C12v8Ev
  virtual void  v9(); // _ZN7S4302C12v9Ev
  virtual void  v10(); // _ZN7S4302C13v10Ev
  virtual void  v11(); // _ZN7S4302C13v11Ev
  virtual void  v12(); // _ZN7S4302C13v12Ev
  virtual void  v13(); // _ZN7S4302C13v13Ev
  virtual void  v14(); // _ZN7S4302C13v14Ev
  virtual void  v15(); // _ZN7S4302C13v15Ev
  virtual void  v16(); // _ZN7S4302C13v16Ev
  virtual void  v17(); // _ZN7S4302C13v17Ev
  S4302C1(); // tgen
};
//SIG(1 S4302C1) C1{ BC2{ BC3{ vd v18 v19 v20} BC4{ vd v21 v22} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 Fp FC5{ m Fi} Fp[3] FC6{ m Fp Fi FC7{ m} FC8{ m}} Fc[33]} BC9{ vd v45 v46 v47 v48 v49 v50} BC10{ vd v51} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp Fi Fc Fp}


 S4302C1 ::~S4302C1(){ note_dtor("S4302C1", this);}
void  S4302C1 ::v1(){vfunc_called(this, "_ZN7S4302C12v1Ev");}
void  S4302C1 ::v2(){vfunc_called(this, "_ZN7S4302C12v2Ev");}
void  S4302C1 ::v3(){vfunc_called(this, "_ZN7S4302C12v3Ev");}
void  S4302C1 ::v4(){vfunc_called(this, "_ZN7S4302C12v4Ev");}
void  S4302C1 ::v5(){vfunc_called(this, "_ZN7S4302C12v5Ev");}
void  S4302C1 ::v6(){vfunc_called(this, "_ZN7S4302C12v6Ev");}
void  S4302C1 ::v7(){vfunc_called(this, "_ZN7S4302C12v7Ev");}
void  S4302C1 ::v8(){vfunc_called(this, "_ZN7S4302C12v8Ev");}
void  S4302C1 ::v9(){vfunc_called(this, "_ZN7S4302C12v9Ev");}
void  S4302C1 ::v10(){vfunc_called(this, "_ZN7S4302C13v10Ev");}
void  S4302C1 ::v11(){vfunc_called(this, "_ZN7S4302C13v11Ev");}
void  S4302C1 ::v12(){vfunc_called(this, "_ZN7S4302C13v12Ev");}
void  S4302C1 ::v13(){vfunc_called(this, "_ZN7S4302C13v13Ev");}
void  S4302C1 ::v14(){vfunc_called(this, "_ZN7S4302C13v14Ev");}
void  S4302C1 ::v15(){vfunc_called(this, "_ZN7S4302C13v15Ev");}
void  S4302C1 ::v16(){vfunc_called(this, "_ZN7S4302C13v16Ev");}
void  S4302C1 ::v17(){vfunc_called(this, "_ZN7S4302C13v17Ev");}
S4302C1 ::S4302C1(){ note_ctor("S4302C1", this);} // tgen

static void Test_S4302C1()
{
  extern Class_Descriptor cd_S4302C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S4302C1, buf);
    S4302C1 *dp, &lv = *(dp=new (buf) S4302C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S4302C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4302C1)");
    check_base_class_offset(lv, (S4302C3*)(S4302C2_nt*), 0, "S4302C1");
    check_base_class_offset(lv, (S4302C4_nt*)(S4302C2_nt*), ABISELECT(8,4), "S4302C1");
    check_base_class_offset(lv, (S4302C2_nt*), 0, "S4302C1");
    check_base_class_offset(lv, (S4302C9_nt*), ABISELECT(112,76), "S4302C1");
    check_base_class_offset(lv, (S4302C10*), ABISELECT(120,80), "S4302C1");
    check_field_offset(lv, s4302c1f0, ABISELECT(128,84), "S4302C1.s4302c1f0");
    check_field_offset(lv, s4302c1f1, ABISELECT(136,88), "S4302C1.s4302c1f1");
    check_field_offset(lv, s4302c1f2, ABISELECT(140,92), "S4302C1.s4302c1f2");
    check_field_offset(lv, s4302c1f3, ABISELECT(144,96), "S4302C1.s4302c1f3");
    test_class_info(&lv, &cd_S4302C1);
    dp->~S4302C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4302C1(Test_S4302C1, "S4302C1", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN7S4302C1C1Ev();
extern void _ZN7S4302C1D1Ev();
Name_Map name_map_S4302C1[] = {
  NSPAIR(_ZN7S4302C1C1Ev),
  NSPAIR(_ZN7S4302C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4302C3;
extern VTBL_ENTRY _ZTI7S4302C3[];
extern  VTBL_ENTRY _ZTV7S4302C3[];
extern Class_Descriptor cd_S4302C4_nt;
extern VTBL_ENTRY _ZTI10S4302C4_nt[];
extern  VTBL_ENTRY _ZTV10S4302C4_nt[];
extern Class_Descriptor cd_S4302C2_nt;
extern VTBL_ENTRY _ZTI10S4302C2_nt[];
extern  VTBL_ENTRY _ZTV10S4302C2_nt[];
extern Class_Descriptor cd_S4302C9_nt;
extern VTBL_ENTRY _ZTI10S4302C9_nt[];
extern  VTBL_ENTRY _ZTV10S4302C9_nt[];
extern Class_Descriptor cd_S4302C10;
extern VTBL_ENTRY _ZTI8S4302C10[];
extern  VTBL_ENTRY _ZTV8S4302C10[];
static Base_Class bases_S4302C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4302C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4302C4_nt,    ABISELECT(8,4), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4302C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4302C9_nt,    ABISELECT(112,76), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4302C10,    ABISELECT(120,80), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4302C1[];
extern void _ZN7S4302C1D1Ev();
extern void _ZN7S4302C1D0Ev();
extern void _ZN7S4302C33v18Ev();
extern void _ZN7S4302C33v19Ev();
extern void _ZN7S4302C33v20Ev();
extern void _ZN10S4302C2_nt3v23Ev();
extern void _ZN10S4302C2_nt3v24Ev();
extern void _ZN10S4302C2_nt3v25Ev();
extern void _ZN10S4302C2_nt3v26Ev();
extern void _ZN10S4302C2_nt3v27Ev();
extern void _ZN10S4302C2_nt3v28Ev();
extern void _ZN10S4302C2_nt3v29Ev();
extern void _ZN10S4302C2_nt3v30Ev();
extern void _ZN10S4302C2_nt3v31Ev();
extern void _ZN10S4302C2_nt3v32Ev();
extern void _ZN10S4302C2_nt3v33Ev();
extern void _ZN10S4302C2_nt3v34Ev();
extern void _ZN10S4302C2_nt3v35Ev();
extern void _ZN10S4302C2_nt3v36Ev();
extern void _ZN10S4302C2_nt3v37Ev();
extern void _ZN10S4302C2_nt3v38Ev();
extern void _ZN10S4302C2_nt3v39Ev();
extern void _ZN10S4302C2_nt3v40Ev();
extern void _ZN10S4302C2_nt3v41Ev();
extern void _ZN10S4302C2_nt3v42Ev();
extern void _ZN10S4302C2_nt3v43Ev();
extern void _ZN10S4302C2_nt3v44Ev();
extern void _ZN7S4302C12v1Ev();
extern void _ZN7S4302C12v2Ev();
extern void _ZN7S4302C12v3Ev();
extern void _ZN7S4302C12v4Ev();
extern void _ZN7S4302C12v5Ev();
extern void _ZN7S4302C12v6Ev();
extern void _ZN7S4302C12v7Ev();
extern void _ZN7S4302C12v8Ev();
extern void _ZN7S4302C12v9Ev();
extern void _ZN7S4302C13v10Ev();
extern void _ZN7S4302C13v11Ev();
extern void _ZN7S4302C13v12Ev();
extern void _ZN7S4302C13v13Ev();
extern void _ZN7S4302C13v14Ev();
extern void _ZN7S4302C13v15Ev();
extern void _ZN7S4302C13v16Ev();
extern void _ZN7S4302C13v17Ev();
extern void ABISELECT(_ZThn8_N7S4302C1D1Ev,_ZThn4_N7S4302C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S4302C1D0Ev,_ZThn4_N7S4302C1D0Ev)();
extern void _ZN10S4302C4_nt3v21Ev();
extern void _ZN10S4302C4_nt3v22Ev();
extern void ABISELECT(_ZThn112_N7S4302C1D1Ev,_ZThn76_N7S4302C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S4302C1D0Ev,_ZThn76_N7S4302C1D0Ev)();
extern void _ZN10S4302C9_nt3v45Ev();
extern void _ZN10S4302C9_nt3v46Ev();
extern void _ZN10S4302C9_nt3v47Ev();
extern void _ZN10S4302C9_nt3v48Ev();
extern void _ZN10S4302C9_nt3v49Ev();
extern void _ZN10S4302C9_nt3v50Ev();
extern void ABISELECT(_ZThn120_N7S4302C1D1Ev,_ZThn80_N7S4302C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S4302C1D0Ev,_ZThn80_N7S4302C1D0Ev)();
extern void _ZN8S4302C103v51Ev();
static  VTBL_ENTRY vtc_S4302C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4302C1[0]),
  (VTBL_ENTRY)&_ZN7S4302C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4302C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4302C33v20Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4302C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4302C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4302C13v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S4302C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4302C1D1Ev,_ZThn4_N7S4302C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4302C1D0Ev,_ZThn4_N7S4302C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4302C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4302C4_nt3v22Ev,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S4302C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S4302C1D1Ev,_ZThn76_N7S4302C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S4302C1D0Ev,_ZThn76_N7S4302C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4302C9_nt3v50Ev,
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI7S4302C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S4302C1D1Ev,_ZThn80_N7S4302C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S4302C1D0Ev,_ZThn80_N7S4302C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4302C103v51Ev,
};
extern VTBL_ENTRY _ZTI7S4302C1[];
extern  VTBL_ENTRY _ZTV7S4302C1[];
Class_Descriptor cd_S4302C1 = {  "S4302C1", // class name
  bases_S4302C1, 5,
  &(vtc_S4302C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI7S4302C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S4302C1),67, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1778C4_nt  {
  void *s1778c4f0;
  int s1778c4f1;
  void  mf1778c4(); // _ZN10S1778C4_nt8mf1778c4Ev
  virtual  ~S1778C4_nt(); // _ZN10S1778C4_ntD1Ev
  S1778C4_nt(); // tgen
};
//SIG(-1 S1778C4_nt) C1{ vd m Fp Fi}


void  S1778C4_nt ::mf1778c4(){}
 S1778C4_nt ::~S1778C4_nt(){ note_dtor("S1778C4_nt", this);}
S1778C4_nt ::S1778C4_nt(){ note_ctor("S1778C4_nt", this);} // tgen

//skip512 S1778C4_nt

#else // __cplusplus

extern void _ZN10S1778C4_ntC1Ev();
extern void _ZN10S1778C4_ntD1Ev();
Name_Map name_map_S1778C4_nt[] = {
  NSPAIR(_ZN10S1778C4_ntC1Ev),
  NSPAIR(_ZN10S1778C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern void _ZN10S1778C4_ntD1Ev();
extern void _ZN10S1778C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1778C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1778C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1778C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1778C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
VTBL_ENTRY *P__ZTI10S1778C4_nt = _ZTI10S1778C4_nt; 
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
Class_Descriptor cd_S1778C4_nt = {  "S1778C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1778C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S1778C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1778C4_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1778C3  : S1778C4_nt {
  virtual void  v18(); // _ZN7S1778C33v18Ev
  virtual void  v19(); // _ZN7S1778C33v19Ev
  virtual void  v20(); // _ZN7S1778C33v20Ev
  virtual void  v21(); // _ZN7S1778C33v21Ev
  virtual void  v22(); // _ZN7S1778C33v22Ev
  virtual void  v23(); // _ZN7S1778C33v23Ev
  virtual void  v24(); // _ZN7S1778C33v24Ev
  virtual void  v25(); // _ZN7S1778C33v25Ev
  virtual void  v26(); // _ZN7S1778C33v26Ev
  virtual void  v27(); // _ZN7S1778C33v27Ev
  virtual void  v28(); // _ZN7S1778C33v28Ev
  virtual void  v29(); // _ZN7S1778C33v29Ev
  virtual void  v30(); // _ZN7S1778C33v30Ev
  virtual void  v31(); // _ZN7S1778C33v31Ev
  virtual void  v32(); // _ZN7S1778C33v32Ev
  virtual void  v33(); // _ZN7S1778C33v33Ev
  virtual void  v34(); // _ZN7S1778C33v34Ev
  virtual void  v35(); // _ZN7S1778C33v35Ev
  virtual void  v36(); // _ZN7S1778C33v36Ev
  virtual void  v37(); // _ZN7S1778C33v37Ev
  virtual void  v38(); // _ZN7S1778C33v38Ev
  virtual void  v39(); // _ZN7S1778C33v39Ev
  virtual void  v40(); // _ZN7S1778C33v40Ev
  virtual void  v41(); // _ZN7S1778C33v41Ev
  virtual void  v42(); // _ZN7S1778C33v42Ev
  virtual void  v43(); // _ZN7S1778C33v43Ev
  virtual void  v44(); // _ZN7S1778C33v44Ev
  virtual void  v45(); // _ZN7S1778C33v45Ev
  virtual void  v46(); // _ZN7S1778C33v46Ev
  virtual void  v47(); // _ZN7S1778C33v47Ev
  virtual void  v48(); // _ZN7S1778C33v48Ev
  virtual void  v49(); // _ZN7S1778C33v49Ev
  virtual void  v50(); // _ZN7S1778C33v50Ev
  virtual void  v51(); // _ZN7S1778C33v51Ev
  virtual void  v52(); // _ZN7S1778C33v52Ev
  virtual void  v53(); // _ZN7S1778C33v53Ev
  virtual void  v54(); // _ZN7S1778C33v54Ev
  virtual void  v55(); // _ZN7S1778C33v55Ev
  virtual void  v56(); // _ZN7S1778C33v56Ev
  virtual void  v57(); // _ZN7S1778C33v57Ev
  virtual void  v58(); // _ZN7S1778C33v58Ev
  virtual void  v59(); // _ZN7S1778C33v59Ev
  virtual void  v60(); // _ZN7S1778C33v60Ev
  virtual void  v61(); // _ZN7S1778C33v61Ev
  virtual void  v62(); // _ZN7S1778C33v62Ev
  virtual void  v63(); // _ZN7S1778C33v63Ev
  virtual void  v64(); // _ZN7S1778C33v64Ev
  virtual void  v65(); // _ZN7S1778C33v65Ev
  virtual void  v66(); // _ZN7S1778C33v66Ev
  virtual void  v67(); // _ZN7S1778C33v67Ev
  ~S1778C3(); // tgen
  S1778C3(); // tgen
};
//SIG(-1 S1778C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1778C3 ::v18(){vfunc_called(this, "_ZN7S1778C33v18Ev");}
void  S1778C3 ::v19(){vfunc_called(this, "_ZN7S1778C33v19Ev");}
void  S1778C3 ::v20(){vfunc_called(this, "_ZN7S1778C33v20Ev");}
void  S1778C3 ::v21(){vfunc_called(this, "_ZN7S1778C33v21Ev");}
void  S1778C3 ::v22(){vfunc_called(this, "_ZN7S1778C33v22Ev");}
void  S1778C3 ::v23(){vfunc_called(this, "_ZN7S1778C33v23Ev");}
void  S1778C3 ::v24(){vfunc_called(this, "_ZN7S1778C33v24Ev");}
void  S1778C3 ::v25(){vfunc_called(this, "_ZN7S1778C33v25Ev");}
void  S1778C3 ::v26(){vfunc_called(this, "_ZN7S1778C33v26Ev");}
void  S1778C3 ::v27(){vfunc_called(this, "_ZN7S1778C33v27Ev");}
void  S1778C3 ::v28(){vfunc_called(this, "_ZN7S1778C33v28Ev");}
void  S1778C3 ::v29(){vfunc_called(this, "_ZN7S1778C33v29Ev");}
void  S1778C3 ::v30(){vfunc_called(this, "_ZN7S1778C33v30Ev");}
void  S1778C3 ::v31(){vfunc_called(this, "_ZN7S1778C33v31Ev");}
void  S1778C3 ::v32(){vfunc_called(this, "_ZN7S1778C33v32Ev");}
void  S1778C3 ::v33(){vfunc_called(this, "_ZN7S1778C33v33Ev");}
void  S1778C3 ::v34(){vfunc_called(this, "_ZN7S1778C33v34Ev");}
void  S1778C3 ::v35(){vfunc_called(this, "_ZN7S1778C33v35Ev");}
void  S1778C3 ::v36(){vfunc_called(this, "_ZN7S1778C33v36Ev");}
void  S1778C3 ::v37(){vfunc_called(this, "_ZN7S1778C33v37Ev");}
void  S1778C3 ::v38(){vfunc_called(this, "_ZN7S1778C33v38Ev");}
void  S1778C3 ::v39(){vfunc_called(this, "_ZN7S1778C33v39Ev");}
void  S1778C3 ::v40(){vfunc_called(this, "_ZN7S1778C33v40Ev");}
void  S1778C3 ::v41(){vfunc_called(this, "_ZN7S1778C33v41Ev");}
void  S1778C3 ::v42(){vfunc_called(this, "_ZN7S1778C33v42Ev");}
void  S1778C3 ::v43(){vfunc_called(this, "_ZN7S1778C33v43Ev");}
void  S1778C3 ::v44(){vfunc_called(this, "_ZN7S1778C33v44Ev");}
void  S1778C3 ::v45(){vfunc_called(this, "_ZN7S1778C33v45Ev");}
void  S1778C3 ::v46(){vfunc_called(this, "_ZN7S1778C33v46Ev");}
void  S1778C3 ::v47(){vfunc_called(this, "_ZN7S1778C33v47Ev");}
void  S1778C3 ::v48(){vfunc_called(this, "_ZN7S1778C33v48Ev");}
void  S1778C3 ::v49(){vfunc_called(this, "_ZN7S1778C33v49Ev");}
void  S1778C3 ::v50(){vfunc_called(this, "_ZN7S1778C33v50Ev");}
void  S1778C3 ::v51(){vfunc_called(this, "_ZN7S1778C33v51Ev");}
void  S1778C3 ::v52(){vfunc_called(this, "_ZN7S1778C33v52Ev");}
void  S1778C3 ::v53(){vfunc_called(this, "_ZN7S1778C33v53Ev");}
void  S1778C3 ::v54(){vfunc_called(this, "_ZN7S1778C33v54Ev");}
void  S1778C3 ::v55(){vfunc_called(this, "_ZN7S1778C33v55Ev");}
void  S1778C3 ::v56(){vfunc_called(this, "_ZN7S1778C33v56Ev");}
void  S1778C3 ::v57(){vfunc_called(this, "_ZN7S1778C33v57Ev");}
void  S1778C3 ::v58(){vfunc_called(this, "_ZN7S1778C33v58Ev");}
void  S1778C3 ::v59(){vfunc_called(this, "_ZN7S1778C33v59Ev");}
void  S1778C3 ::v60(){vfunc_called(this, "_ZN7S1778C33v60Ev");}
void  S1778C3 ::v61(){vfunc_called(this, "_ZN7S1778C33v61Ev");}
void  S1778C3 ::v62(){vfunc_called(this, "_ZN7S1778C33v62Ev");}
void  S1778C3 ::v63(){vfunc_called(this, "_ZN7S1778C33v63Ev");}
void  S1778C3 ::v64(){vfunc_called(this, "_ZN7S1778C33v64Ev");}
void  S1778C3 ::v65(){vfunc_called(this, "_ZN7S1778C33v65Ev");}
void  S1778C3 ::v66(){vfunc_called(this, "_ZN7S1778C33v66Ev");}
void  S1778C3 ::v67(){vfunc_called(this, "_ZN7S1778C33v67Ev");}
S1778C3 ::~S1778C3(){ note_dtor("S1778C3", this);} // tgen
S1778C3 ::S1778C3(){ note_ctor("S1778C3", this);} // tgen

static void Test_S1778C3()
{
  extern Class_Descriptor cd_S1778C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1778C3, buf);
    S1778C3 *dp, &lv = *(dp=new (buf) S1778C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1778C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1778C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1778C3");
    test_class_info(&lv, &cd_S1778C3);
    dp->~S1778C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1778C3(Test_S1778C3, "S1778C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1778C3C1Ev();
extern void _ZN7S1778C3D1Ev();
Name_Map name_map_S1778C3[] = {
  NSPAIR(_ZN7S1778C3C1Ev),
  NSPAIR(_ZN7S1778C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1778C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1778C3[];
extern void _ZN7S1778C3D1Ev();
extern void _ZN7S1778C3D0Ev();
extern void _ZN7S1778C33v18Ev();
extern void _ZN7S1778C33v19Ev();
extern void _ZN7S1778C33v20Ev();
extern void _ZN7S1778C33v21Ev();
extern void _ZN7S1778C33v22Ev();
extern void _ZN7S1778C33v23Ev();
extern void _ZN7S1778C33v24Ev();
extern void _ZN7S1778C33v25Ev();
extern void _ZN7S1778C33v26Ev();
extern void _ZN7S1778C33v27Ev();
extern void _ZN7S1778C33v28Ev();
extern void _ZN7S1778C33v29Ev();
extern void _ZN7S1778C33v30Ev();
extern void _ZN7S1778C33v31Ev();
extern void _ZN7S1778C33v32Ev();
extern void _ZN7S1778C33v33Ev();
extern void _ZN7S1778C33v34Ev();
extern void _ZN7S1778C33v35Ev();
extern void _ZN7S1778C33v36Ev();
extern void _ZN7S1778C33v37Ev();
extern void _ZN7S1778C33v38Ev();
extern void _ZN7S1778C33v39Ev();
extern void _ZN7S1778C33v40Ev();
extern void _ZN7S1778C33v41Ev();
extern void _ZN7S1778C33v42Ev();
extern void _ZN7S1778C33v43Ev();
extern void _ZN7S1778C33v44Ev();
extern void _ZN7S1778C33v45Ev();
extern void _ZN7S1778C33v46Ev();
extern void _ZN7S1778C33v47Ev();
extern void _ZN7S1778C33v48Ev();
extern void _ZN7S1778C33v49Ev();
extern void _ZN7S1778C33v50Ev();
extern void _ZN7S1778C33v51Ev();
extern void _ZN7S1778C33v52Ev();
extern void _ZN7S1778C33v53Ev();
extern void _ZN7S1778C33v54Ev();
extern void _ZN7S1778C33v55Ev();
extern void _ZN7S1778C33v56Ev();
extern void _ZN7S1778C33v57Ev();
extern void _ZN7S1778C33v58Ev();
extern void _ZN7S1778C33v59Ev();
extern void _ZN7S1778C33v60Ev();
extern void _ZN7S1778C33v61Ev();
extern void _ZN7S1778C33v62Ev();
extern void _ZN7S1778C33v63Ev();
extern void _ZN7S1778C33v64Ev();
extern void _ZN7S1778C33v65Ev();
extern void _ZN7S1778C33v66Ev();
extern void _ZN7S1778C33v67Ev();
static  VTBL_ENTRY vtc_S1778C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1778C3[0]),
  (VTBL_ENTRY)&_ZN7S1778C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1778C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S1778C3[];
extern  VTBL_ENTRY _ZTV7S1778C3[];
Class_Descriptor cd_S1778C3 = {  "S1778C3", // class name
  bases_S1778C3, 1,
  &(vtc_S1778C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1778C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1778C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1778C2  : S1778C3 {
  virtual void  v68(); // _ZN7S1778C23v68Ev
  ~S1778C2(); // tgen
  S1778C2(); // tgen
};
//SIG(-1 S1778C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1778C2 ::v68(){vfunc_called(this, "_ZN7S1778C23v68Ev");}
S1778C2 ::~S1778C2(){ note_dtor("S1778C2", this);} // tgen
S1778C2 ::S1778C2(){ note_ctor("S1778C2", this);} // tgen

static void Test_S1778C2()
{
  extern Class_Descriptor cd_S1778C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1778C2, buf);
    S1778C2 *dp, &lv = *(dp=new (buf) S1778C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1778C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1778C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1778C3*), 0, "S1778C2");
    check_base_class_offset(lv, (S1778C3*), 0, "S1778C2");
    test_class_info(&lv, &cd_S1778C2);
    dp->~S1778C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1778C2(Test_S1778C2, "S1778C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1778C2C1Ev();
extern void _ZN7S1778C2D1Ev();
Name_Map name_map_S1778C2[] = {
  NSPAIR(_ZN7S1778C2C1Ev),
  NSPAIR(_ZN7S1778C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1778C3;
extern VTBL_ENTRY _ZTI7S1778C3[];
extern  VTBL_ENTRY _ZTV7S1778C3[];
static Base_Class bases_S1778C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1778C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1778C2[];
extern void _ZN7S1778C2D1Ev();
extern void _ZN7S1778C2D0Ev();
extern void _ZN7S1778C33v18Ev();
extern void _ZN7S1778C33v19Ev();
extern void _ZN7S1778C33v20Ev();
extern void _ZN7S1778C33v21Ev();
extern void _ZN7S1778C33v22Ev();
extern void _ZN7S1778C33v23Ev();
extern void _ZN7S1778C33v24Ev();
extern void _ZN7S1778C33v25Ev();
extern void _ZN7S1778C33v26Ev();
extern void _ZN7S1778C33v27Ev();
extern void _ZN7S1778C33v28Ev();
extern void _ZN7S1778C33v29Ev();
extern void _ZN7S1778C33v30Ev();
extern void _ZN7S1778C33v31Ev();
extern void _ZN7S1778C33v32Ev();
extern void _ZN7S1778C33v33Ev();
extern void _ZN7S1778C33v34Ev();
extern void _ZN7S1778C33v35Ev();
extern void _ZN7S1778C33v36Ev();
extern void _ZN7S1778C33v37Ev();
extern void _ZN7S1778C33v38Ev();
extern void _ZN7S1778C33v39Ev();
extern void _ZN7S1778C33v40Ev();
extern void _ZN7S1778C33v41Ev();
extern void _ZN7S1778C33v42Ev();
extern void _ZN7S1778C33v43Ev();
extern void _ZN7S1778C33v44Ev();
extern void _ZN7S1778C33v45Ev();
extern void _ZN7S1778C33v46Ev();
extern void _ZN7S1778C33v47Ev();
extern void _ZN7S1778C33v48Ev();
extern void _ZN7S1778C33v49Ev();
extern void _ZN7S1778C33v50Ev();
extern void _ZN7S1778C33v51Ev();
extern void _ZN7S1778C33v52Ev();
extern void _ZN7S1778C33v53Ev();
extern void _ZN7S1778C33v54Ev();
extern void _ZN7S1778C33v55Ev();
extern void _ZN7S1778C33v56Ev();
extern void _ZN7S1778C33v57Ev();
extern void _ZN7S1778C33v58Ev();
extern void _ZN7S1778C33v59Ev();
extern void _ZN7S1778C33v60Ev();
extern void _ZN7S1778C33v61Ev();
extern void _ZN7S1778C33v62Ev();
extern void _ZN7S1778C33v63Ev();
extern void _ZN7S1778C33v64Ev();
extern void _ZN7S1778C33v65Ev();
extern void _ZN7S1778C33v66Ev();
extern void _ZN7S1778C33v67Ev();
extern void _ZN7S1778C23v68Ev();
static  VTBL_ENTRY vtc_S1778C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1778C2[0]),
  (VTBL_ENTRY)&_ZN7S1778C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1778C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1778C23v68Ev,
};
extern VTBL_ENTRY _ZTI7S1778C2[];
extern  VTBL_ENTRY _ZTV7S1778C2[];
Class_Descriptor cd_S1778C2 = {  "S1778C2", // class name
  bases_S1778C2, 2,
  &(vtc_S1778C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1778C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1778C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1778C1  : S1778C2 {
  virtual void  v1(); // _ZN7S1778C12v1Ev
  virtual void  v2(); // _ZN7S1778C12v2Ev
  virtual void  v3(); // _ZN7S1778C12v3Ev
  virtual void  v4(); // _ZN7S1778C12v4Ev
  virtual void  v5(); // _ZN7S1778C12v5Ev
  virtual void  v6(); // _ZN7S1778C12v6Ev
  virtual void  v7(); // _ZN7S1778C12v7Ev
  virtual void  v8(); // _ZN7S1778C12v8Ev
  virtual void  v9(); // _ZN7S1778C12v9Ev
  virtual void  v10(); // _ZN7S1778C13v10Ev
  virtual void  v11(); // _ZN7S1778C13v11Ev
  virtual void  v12(); // _ZN7S1778C13v12Ev
  virtual void  v13(); // _ZN7S1778C13v13Ev
  virtual void  v14(); // _ZN7S1778C13v14Ev
  virtual void  v15(); // _ZN7S1778C13v15Ev
  virtual void  v16(); // _ZN7S1778C13v16Ev
  virtual void  v17(); // _ZN7S1778C13v17Ev
  ~S1778C1(); // tgen
  S1778C1(); // tgen
};
//SIG(1 S1778C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67} v68} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17}


void  S1778C1 ::v1(){vfunc_called(this, "_ZN7S1778C12v1Ev");}
void  S1778C1 ::v2(){vfunc_called(this, "_ZN7S1778C12v2Ev");}
void  S1778C1 ::v3(){vfunc_called(this, "_ZN7S1778C12v3Ev");}
void  S1778C1 ::v4(){vfunc_called(this, "_ZN7S1778C12v4Ev");}
void  S1778C1 ::v5(){vfunc_called(this, "_ZN7S1778C12v5Ev");}
void  S1778C1 ::v6(){vfunc_called(this, "_ZN7S1778C12v6Ev");}
void  S1778C1 ::v7(){vfunc_called(this, "_ZN7S1778C12v7Ev");}
void  S1778C1 ::v8(){vfunc_called(this, "_ZN7S1778C12v8Ev");}
void  S1778C1 ::v9(){vfunc_called(this, "_ZN7S1778C12v9Ev");}
void  S1778C1 ::v10(){vfunc_called(this, "_ZN7S1778C13v10Ev");}
void  S1778C1 ::v11(){vfunc_called(this, "_ZN7S1778C13v11Ev");}
void  S1778C1 ::v12(){vfunc_called(this, "_ZN7S1778C13v12Ev");}
void  S1778C1 ::v13(){vfunc_called(this, "_ZN7S1778C13v13Ev");}
void  S1778C1 ::v14(){vfunc_called(this, "_ZN7S1778C13v14Ev");}
void  S1778C1 ::v15(){vfunc_called(this, "_ZN7S1778C13v15Ev");}
void  S1778C1 ::v16(){vfunc_called(this, "_ZN7S1778C13v16Ev");}
void  S1778C1 ::v17(){vfunc_called(this, "_ZN7S1778C13v17Ev");}
S1778C1 ::~S1778C1(){ note_dtor("S1778C1", this);} // tgen
S1778C1 ::S1778C1(){ note_ctor("S1778C1", this);} // tgen

static void Test_S1778C1()
{
  extern Class_Descriptor cd_S1778C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1778C1, buf);
    S1778C1 *dp, &lv = *(dp=new (buf) S1778C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1778C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1778C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1778C3*)(S1778C2*), 0, "S1778C1");
    check_base_class_offset(lv, (S1778C3*)(S1778C2*), 0, "S1778C1");
    check_base_class_offset(lv, (S1778C2*), 0, "S1778C1");
    test_class_info(&lv, &cd_S1778C1);
    dp->~S1778C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1778C1(Test_S1778C1, "S1778C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1778C1C1Ev();
extern void _ZN7S1778C1D1Ev();
Name_Map name_map_S1778C1[] = {
  NSPAIR(_ZN7S1778C1C1Ev),
  NSPAIR(_ZN7S1778C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1778C3;
extern VTBL_ENTRY _ZTI7S1778C3[];
extern  VTBL_ENTRY _ZTV7S1778C3[];
extern Class_Descriptor cd_S1778C2;
extern VTBL_ENTRY _ZTI7S1778C2[];
extern  VTBL_ENTRY _ZTV7S1778C2[];
static Base_Class bases_S1778C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1778C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1778C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1778C1[];
extern void _ZN7S1778C1D1Ev();
extern void _ZN7S1778C1D0Ev();
extern void _ZN7S1778C33v18Ev();
extern void _ZN7S1778C33v19Ev();
extern void _ZN7S1778C33v20Ev();
extern void _ZN7S1778C33v21Ev();
extern void _ZN7S1778C33v22Ev();
extern void _ZN7S1778C33v23Ev();
extern void _ZN7S1778C33v24Ev();
extern void _ZN7S1778C33v25Ev();
extern void _ZN7S1778C33v26Ev();
extern void _ZN7S1778C33v27Ev();
extern void _ZN7S1778C33v28Ev();
extern void _ZN7S1778C33v29Ev();
extern void _ZN7S1778C33v30Ev();
extern void _ZN7S1778C33v31Ev();
extern void _ZN7S1778C33v32Ev();
extern void _ZN7S1778C33v33Ev();
extern void _ZN7S1778C33v34Ev();
extern void _ZN7S1778C33v35Ev();
extern void _ZN7S1778C33v36Ev();
extern void _ZN7S1778C33v37Ev();
extern void _ZN7S1778C33v38Ev();
extern void _ZN7S1778C33v39Ev();
extern void _ZN7S1778C33v40Ev();
extern void _ZN7S1778C33v41Ev();
extern void _ZN7S1778C33v42Ev();
extern void _ZN7S1778C33v43Ev();
extern void _ZN7S1778C33v44Ev();
extern void _ZN7S1778C33v45Ev();
extern void _ZN7S1778C33v46Ev();
extern void _ZN7S1778C33v47Ev();
extern void _ZN7S1778C33v48Ev();
extern void _ZN7S1778C33v49Ev();
extern void _ZN7S1778C33v50Ev();
extern void _ZN7S1778C33v51Ev();
extern void _ZN7S1778C33v52Ev();
extern void _ZN7S1778C33v53Ev();
extern void _ZN7S1778C33v54Ev();
extern void _ZN7S1778C33v55Ev();
extern void _ZN7S1778C33v56Ev();
extern void _ZN7S1778C33v57Ev();
extern void _ZN7S1778C33v58Ev();
extern void _ZN7S1778C33v59Ev();
extern void _ZN7S1778C33v60Ev();
extern void _ZN7S1778C33v61Ev();
extern void _ZN7S1778C33v62Ev();
extern void _ZN7S1778C33v63Ev();
extern void _ZN7S1778C33v64Ev();
extern void _ZN7S1778C33v65Ev();
extern void _ZN7S1778C33v66Ev();
extern void _ZN7S1778C33v67Ev();
extern void _ZN7S1778C23v68Ev();
extern void _ZN7S1778C12v1Ev();
extern void _ZN7S1778C12v2Ev();
extern void _ZN7S1778C12v3Ev();
extern void _ZN7S1778C12v4Ev();
extern void _ZN7S1778C12v5Ev();
extern void _ZN7S1778C12v6Ev();
extern void _ZN7S1778C12v7Ev();
extern void _ZN7S1778C12v8Ev();
extern void _ZN7S1778C12v9Ev();
extern void _ZN7S1778C13v10Ev();
extern void _ZN7S1778C13v11Ev();
extern void _ZN7S1778C13v12Ev();
extern void _ZN7S1778C13v13Ev();
extern void _ZN7S1778C13v14Ev();
extern void _ZN7S1778C13v15Ev();
extern void _ZN7S1778C13v16Ev();
extern void _ZN7S1778C13v17Ev();
static  VTBL_ENTRY vtc_S1778C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1778C1[0]),
  (VTBL_ENTRY)&_ZN7S1778C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1778C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1778C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1778C23v68Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1778C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v12Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v13Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v14Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v15Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v16Ev,
  (VTBL_ENTRY)&_ZN7S1778C13v17Ev,
};
extern VTBL_ENTRY _ZTI7S1778C1[];
extern  VTBL_ENTRY _ZTV7S1778C1[];
Class_Descriptor cd_S1778C1 = {  "S1778C1", // class name
  bases_S1778C1, 3,
  &(vtc_S1778C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1778C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1778C1),72, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C6  {
  short s19859c6f0;
  void  mf19859c6(); // _ZN8S19859C69mf19859c6Ev
  virtual  ~S19859C6(); // _ZN8S19859C6D1Ev
  S19859C6(); // tgen
};
//SIG(-1 S19859C6) C1{ vd m Fs}


void  S19859C6 ::mf19859c6(){}
 S19859C6 ::~S19859C6(){ note_dtor("S19859C6", this);}
S19859C6 ::S19859C6(){ note_ctor("S19859C6", this);} // tgen

static void Test_S19859C6()
{
  extern Class_Descriptor cd_S19859C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19859C6, buf);
    S19859C6 *dp, &lv = *(dp=new (buf) S19859C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19859C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C6)");
    check_field_offset(lv, s19859c6f0, ABISELECT(8,4), "S19859C6.s19859c6f0");
    test_class_info(&lv, &cd_S19859C6);
    dp->~S19859C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C6(Test_S19859C6, "S19859C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19859C6C1Ev();
extern void _ZN8S19859C6D1Ev();
Name_Map name_map_S19859C6[] = {
  NSPAIR(_ZN8S19859C6C1Ev),
  NSPAIR(_ZN8S19859C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19859C6[];
extern void _ZN8S19859C6D1Ev();
extern void _ZN8S19859C6D0Ev();
static  VTBL_ENTRY vtc_S19859C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C6[0]),
  (VTBL_ENTRY)&_ZN8S19859C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C6D0Ev,
};
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
Class_Descriptor cd_S19859C6 = {  "S19859C6", // class name
  0,0,//no base classes
  &(vtc_S19859C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19859C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19859C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C5  : virtual S19859C6 {
  virtual  ~S19859C5(); // _ZN8S19859C5D2Ev
  S19859C5(); // tgen
};
//SIG(-1 S19859C5) C1{ VBC2{ vd m Fs} vd}


 S19859C5 ::~S19859C5(){ note_dtor("S19859C5", this);}
S19859C5 ::S19859C5(){ note_ctor("S19859C5", this);} // tgen

static void Test_S19859C5()
{
  extern Class_Descriptor cd_S19859C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19859C5, buf);
    S19859C5 *dp, &lv = *(dp=new (buf) S19859C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19859C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C5)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19859C5");
    test_class_info(&lv, &cd_S19859C5);
    dp->~S19859C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C5(Test_S19859C5, "S19859C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19859C5C1Ev();
extern void _ZN8S19859C5D2Ev();
Name_Map name_map_S19859C5[] = {
  NSPAIR(_ZN8S19859C5C1Ev),
  NSPAIR(_ZN8S19859C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S19859C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C5[];
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C5[];
static  VTT_ENTRY vtt_S19859C5[] = {
  {&(_ZTV8S19859C5[3]),  3,10},
  {&(_ZTV8S19859C5[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C5 = {  "S19859C5", // class name
  bases_S19859C5, 1,
  &(vtc_S19859C5[0]), // expected_vtbl_contents
  &(vtt_S19859C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19859C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19859C5),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C7  : virtual S19859C6 {
  ~S19859C7(); // tgen
  S19859C7(); // tgen
};
//SIG(-1 S19859C7) C1{ VBC2{ vd m Fs}}


S19859C7 ::~S19859C7(){ note_dtor("S19859C7", this);} // tgen
S19859C7 ::S19859C7(){ note_ctor("S19859C7", this);} // tgen

static void Test_S19859C7()
{
  extern Class_Descriptor cd_S19859C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19859C7, buf);
    S19859C7 *dp, &lv = *(dp=new (buf) S19859C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19859C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C7)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19859C7");
    test_class_info(&lv, &cd_S19859C7);
    dp->~S19859C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C7(Test_S19859C7, "S19859C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19859C7C1Ev();
extern void _ZN8S19859C7D1Ev();
Name_Map name_map_S19859C7[] = {
  NSPAIR(_ZN8S19859C7C1Ev),
  NSPAIR(_ZN8S19859C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S19859C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C7[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C7[];
static  VTT_ENTRY vtt_S19859C7[] = {
  {&(_ZTV8S19859C7[3]),  3,10},
  {&(_ZTV8S19859C7[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C7 = {  "S19859C7", // class name
  bases_S19859C7, 1,
  &(vtc_S19859C7[0]), // expected_vtbl_contents
  &(vtt_S19859C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19859C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19859C7),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C8  : virtual S19859C6 , virtual S19859C5 , S19859C7 {
  int s19859c8f0;
  virtual  ~S19859C8(); // _ZN8S19859C8D2Ev
  S19859C8(); // tgen
};
//SIG(-1 S19859C8) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S19859C8 ::~S19859C8(){ note_dtor("S19859C8", this);}
S19859C8 ::S19859C8(){ note_ctor("S19859C8", this);} // tgen

static void Test_S19859C8()
{
  extern Class_Descriptor cd_S19859C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19859C8, buf);
    S19859C8 *dp, &lv = *(dp=new (buf) S19859C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19859C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C8)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S19859C8");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(16,8), "S19859C8");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(16,8), "S19859C8");
    check_base_class_offset(lv, (S19859C5*), ABISELECT(32,16), "S19859C8");
    check_base_class_offset(lv, (S19859C7*), 0, "S19859C8");
    check_field_offset(lv, s19859c8f0, ABISELECT(8,4), "S19859C8.s19859c8f0");
    test_class_info(&lv, &cd_S19859C8);
    dp->~S19859C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C8(Test_S19859C8, "S19859C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19859C8C1Ev();
extern void _ZN8S19859C8D2Ev();
Name_Map name_map_S19859C8[] = {
  NSPAIR(_ZN8S19859C8C1Ev),
  NSPAIR(_ZN8S19859C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C5,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C8[];
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C8[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C8[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__8S19859C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn8_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn8_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__8S19859C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__8S19859C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
static  VTT_ENTRY vtt_S19859C8[] = {
  {&(_ZTV8S19859C8[4]),  4,17},
  {&(_tg__ZTV8S19859C7__8S19859C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__8S19859C8[3]),  3,5},
  {&(_ZTV8S19859C8[9]),  9,17},
  {&(_ZTV8S19859C8[15]),  15,17},
  {&(_tg__ZTV8S19859C5__8S19859C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__8S19859C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn8_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn8_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C8 = {  "S19859C8", // class name
  bases_S19859C8, 3,
  &(vtc_S19859C8[0]), // expected_vtbl_contents
  &(vtt_S19859C8[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19859C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19859C8),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C8),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C4  : S19859C5 , S19859C6 , S19859C7 , S19859C8 {
  virtual  ~S19859C4(); // _ZN8S19859C4D2Ev
  S19859C4(); // tgen
};
//SIG(-1 S19859C4) C1{ BC2{ VBC3{ vd m Fs} vd} BC3 BC4{ VBC3} BC5{ VBC3 VBC2 BC4 vd Fi} vd}


 S19859C4 ::~S19859C4(){ note_dtor("S19859C4", this);}
S19859C4 ::S19859C4(){ note_ctor("S19859C4", this);} // tgen

static void Test_S19859C4()
{
  extern Class_Descriptor cd_S19859C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19859C4, buf);
    S19859C4 *dp, &lv = *(dp=new (buf) S19859C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19859C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C4)");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(48,24), "S19859C4");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(48,24), "S19859C4");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*), ABISELECT(48,24), "S19859C4");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(48,24), "S19859C4");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*), ABISELECT(48,24), "S19859C4");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*), 0, "S19859C4");
    /*is_ambiguous_... S19859C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19859C4");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*), ABISELECT(24,12), "S19859C4");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*), ABISELECT(64,32), "S19859C4");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*), ABISELECT(32,16), "S19859C4");
    check_base_class_offset(lv, (S19859C8*), ABISELECT(32,16), "S19859C4");
    test_class_info(&lv, &cd_S19859C4);
    dp->~S19859C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C4(Test_S19859C4, "S19859C4", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S19859C4C1Ev();
extern void _ZN8S19859C4D2Ev();
Name_Map name_map_S19859C4[] = {
  NSPAIR(_ZN8S19859C4C1Ev),
  NSPAIR(_ZN8S19859C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
static Base_Class bases_S19859C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C7,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C5,    ABISELECT(64,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(32,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C4[];
extern void _ZN8S19859C4D1Ev();
extern void _ZN8S19859C4D0Ev();
extern void ABISELECT(_ZThn8_N8S19859C4D1Ev,_ZThn4_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C4D0Ev,_ZThn4_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C4D1Ev,_ZThn24_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C4D0Ev,_ZThn24_N8S19859C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19859C4D1Ev,_ZThn32_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19859C4D0Ev,_ZThn32_N8S19859C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C4[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&_ZN8S19859C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C4D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19859C4D1Ev,_ZThn4_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19859C4D0Ev,_ZThn4_N8S19859C4D0Ev),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C4[];
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A__8S19859C4[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C5D1Ev,_ZThn24_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C5D0Ev,_ZThn24_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__A__8S19859C4[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__8S19859C4[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__8S19859C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C4[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C8__A1__8S19859C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn8_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn8_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C8__A1__8S19859C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C8__8S19859C4[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8__8S19859C4[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__A1__8S19859C4[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
static  VTT_ENTRY vtt_S19859C4[] = {
  {&(_ZTV8S19859C4[4]),  4,32},
  {&(_tg__ZTV8S19859C5__A__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__A__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C7__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C4[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C8__A1__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C8__A1__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C8__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C8__8S19859C4[4]),  4,6},
  {&(_ZTV8S19859C4[24]),  24,32},
  {&(_ZTV8S19859C4[13]),  13,32},
  {&(_ZTV8S19859C4[19]),  19,32},
  {&(_ZTV8S19859C4[30]),  30,32},
  {&(_tg__ZTV8S19859C5__A1__8S19859C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__A1__8S19859C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19859C4[];
extern  VTBL_ENTRY _ZTV8S19859C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C4[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn8_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn8_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C5D0Ev,_ZThn24_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C5D1Ev,_ZThn24_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C4D0Ev,_ZThn32_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C4D1Ev,_ZThn32_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C4D0Ev,_ZThn24_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C4D1Ev,_ZThn24_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C4 = {  "S19859C4", // class name
  bases_S19859C4, 7,
  &(vtc_S19859C4[0]), // expected_vtbl_contents
  &(vtt_S19859C4[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S19859C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19859C4),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C4),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C9  : S19859C6 , virtual S19859C5 , S19859C8 , virtual S19859C7 {
  int s19859c9f0;
  virtual  ~S19859C9(); // _ZN8S19859C9D2Ev
  S19859C9(); // tgen
};
//SIG(-1 S19859C9) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2 VBC3 BC5{ VBC2} vd Fi} VBC5 vd Fi}


 S19859C9 ::~S19859C9(){ note_dtor("S19859C9", this);}
S19859C9 ::S19859C9(){ note_ctor("S19859C9", this);} // tgen

static void Test_S19859C9()
{
  extern Class_Descriptor cd_S19859C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19859C9, buf);
    S19859C9 *dp, &lv = *(dp=new (buf) S19859C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19859C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C9)");
    /*is_ambiguous_... S19859C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S19859C9");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(40,24), "S19859C9");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*), ABISELECT(40,24), "S19859C9");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*), ABISELECT(40,24), "S19859C9");
    /*is_ambiguous_... S19859C9::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(40,24), "S19859C9");
    check_base_class_offset(lv, (S19859C5*), ABISELECT(32,20), "S19859C9");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*), ABISELECT(32,20), "S19859C9");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*), ABISELECT(16,8), "S19859C9");
    check_base_class_offset(lv, (S19859C8*), ABISELECT(16,8), "S19859C9");
    /*is_ambiguous_... S19859C9::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*), ABISELECT(56,32), "S19859C9");
    check_field_offset(lv, s19859c9f0, ABISELECT(28,16), "S19859C9.s19859c9f0");
    test_class_info(&lv, &cd_S19859C9);
    dp->~S19859C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C9(Test_S19859C9, "S19859C9", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19859C9C1Ev();
extern void _ZN8S19859C9D2Ev();
Name_Map name_map_S19859C9[] = {
  NSPAIR(_ZN8S19859C9C1Ev),
  NSPAIR(_ZN8S19859C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19859C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C7,    ABISELECT(56,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C9[];
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S19859C9D1Ev,_ZThn24_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S19859C9D0Ev,_ZThn24_N8S19859C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S19859C9D1Ev,_ZThn32_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S19859C9D0Ev,_ZThn32_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C9[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C9[];
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C9[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C8__8S19859C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn16_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn16_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C8__8S19859C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C8__8S19859C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8__8S19859C9[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__8S19859C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A1__8S19859C9[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
static  VTT_ENTRY vtt_S19859C9[] = {
  {&(_ZTV8S19859C9[5]),  5,30},
  {&(_tg__ZTV8S19859C8__8S19859C9[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C8__8S19859C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C8__8S19859C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C8__8S19859C9[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C8__8S19859C9[4]),  4,6},
  {&(_ZTV8S19859C9[17]),  17,30},
  {&(_ZTV8S19859C9[22]),  22,30},
  {&(_ZTV8S19859C9[11]),  11,30},
  {&(_ZTV8S19859C9[28]),  28,30},
  {&(_tg__ZTV8S19859C5__8S19859C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__8S19859C9[3]),  3,5},
  {&(_tg__ZTV8S19859C7__A1__8S19859C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A1__8S19859C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn16_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn16_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19859C9D0Ev,_ZThn24_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19859C9D1Ev,_ZThn24_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C9D0Ev,_ZThn32_N8S19859C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C9D1Ev,_ZThn32_N8S19859C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C9 = {  "S19859C9", // class name
  bases_S19859C9, 6,
  &(vtc_S19859C9[0]), // expected_vtbl_contents
  &(vtt_S19859C9[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19859C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19859C9),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C9),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C11  : virtual S19859C7 {
  virtual  ~S19859C11(); // _ZN9S19859C11D2Ev
  S19859C11(); // tgen
};
//SIG(-1 S19859C11) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S19859C11 ::~S19859C11(){ note_dtor("S19859C11", this);}
S19859C11 ::S19859C11(){ note_ctor("S19859C11", this);} // tgen

static void Test_S19859C11()
{
  extern Class_Descriptor cd_S19859C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19859C11, buf);
    S19859C11 *dp, &lv = *(dp=new (buf) S19859C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19859C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C11)");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(8,4), "S19859C11");
    check_base_class_offset(lv, (S19859C7*), 0, "S19859C11");
    test_class_info(&lv, &cd_S19859C11);
    dp->~S19859C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C11(Test_S19859C11, "S19859C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19859C11C1Ev();
extern void _ZN9S19859C11D2Ev();
Name_Map name_map_S19859C11[] = {
  NSPAIR(_ZN9S19859C11C1Ev),
  NSPAIR(_ZN9S19859C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C11[];
extern void _ZN9S19859C11D1Ev();
extern void _ZN9S19859C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C11D1Ev,_ZThn4_N9S19859C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C11D0Ev,_ZThn4_N9S19859C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C11[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&_ZN9S19859C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C11D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C11[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__9S19859C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
static  VTT_ENTRY vtt_S19859C11[] = {
  {&(_ZTV9S19859C11[5]),  5,12},
  {&(_ZTV9S19859C11[5]),  5,12},
  {&(_ZTV9S19859C11[10]),  10,12},
  {&(_tg__ZTV8S19859C7__9S19859C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__9S19859C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C11[];
extern  VTBL_ENTRY _ZTV9S19859C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C11[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C11D0Ev,_ZThn4_N9S19859C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C11D1Ev,_ZThn4_N9S19859C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C11 = {  "S19859C11", // class name
  bases_S19859C11, 2,
  &(vtc_S19859C11[0]), // expected_vtbl_contents
  &(vtt_S19859C11[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19859C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19859C11),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C11),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C12  : virtual S19859C9 , S19859C7 {
  virtual  ~S19859C12(); // _ZN9S19859C12D2Ev
  S19859C12(); // tgen
};
//SIG(-1 S19859C12) C1{ VBC2{ BC3{ vd m Fs} VBC4{ VBC3 vd} BC5{ VBC3 VBC4 BC6{ VBC3} vd Fi} VBC6 vd Fi} BC6 vd}


 S19859C12 ::~S19859C12(){ note_dtor("S19859C12", this);}
S19859C12 ::S19859C12(){ note_ctor("S19859C12", this);} // tgen

static void Test_S19859C12()
{
  extern Class_Descriptor cd_S19859C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S19859C12, buf);
    S19859C12 *dp, &lv = *(dp=new (buf) S19859C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19859C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C12)");
    /*is_ambiguous_... S19859C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C9*), ABISELECT(8,4), "S19859C12");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(48,28), "S19859C12");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C9*), ABISELECT(48,28), "S19859C12");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(48,28), "S19859C12");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(48,28), "S19859C12");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(48,28), "S19859C12");
    check_base_class_offset(lv, (S19859C5*)(S19859C9*), ABISELECT(40,24), "S19859C12");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C9*), ABISELECT(40,24), "S19859C12");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(24,12), "S19859C12");
    check_base_class_offset(lv, (S19859C8*)(S19859C9*), ABISELECT(24,12), "S19859C12");
    /*is_ambiguous_... S19859C9::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C9*), ABISELECT(64,36), "S19859C12");
    check_base_class_offset(lv, (S19859C9*), ABISELECT(8,4), "S19859C12");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*), 0, "S19859C12");
    test_class_info(&lv, &cd_S19859C12);
    dp->~S19859C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C12(Test_S19859C12, "S19859C12", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN9S19859C12C1Ev();
extern void _ZN9S19859C12D2Ev();
Name_Map name_map_S19859C12[] = {
  NSPAIR(_ZN9S19859C12C1Ev),
  NSPAIR(_ZN9S19859C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C9;
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(48,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19859C5,    ABISELECT(40,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(64,36), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19859C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C12[];
extern void _ZN9S19859C12D1Ev();
extern void _ZN9S19859C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn40_N9S19859C12D1Ev,_ZThn24_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn40_N9S19859C12D0Ev,_ZThn24_N9S19859C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19859C12D1Ev,_ZThn28_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19859C12D0Ev,_ZThn28_N9S19859C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S19859C12D1Ev,_ZThn36_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S19859C12D0Ev,_ZThn36_N9S19859C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C12[] = {
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&_ZN9S19859C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C12D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev),
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(8,4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C12[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A__9S19859C12[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C7D1Ev,_ZThn28_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C7D0Ev,_ZThn28_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A__9S19859C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C12[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C12[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C9__9S19859C12[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn16_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn16_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__9S19859C12[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C9__9S19859C12[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C9__9S19859C12[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C9__9S19859C12[] = {
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S19859C9D1Ev,_ZThn24_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S19859C9D0Ev,_ZThn24_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19859C9__9S19859C12[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C9__9S19859C12[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S19859C9D1Ev,_ZThn32_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S19859C9D0Ev,_ZThn32_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C9__9S19859C12[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__9S19859C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__9S19859C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A1__9S19859C12[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
static  VTT_ENTRY vtt_S19859C12[] = {
  {&(_ZTV9S19859C12[6]),  6,39},
  {&(_tg__ZTV8S19859C7__A__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A__9S19859C12[3]),  3,5},
  {&(_ZTV9S19859C12[14]),  14,39},
  {&(_ZTV9S19859C12[26]),  26,39},
  {&(_ZTV9S19859C12[31]),  31,39},
  {&(_ZTV9S19859C12[20]),  20,39},
  {&(_ZTV9S19859C12[37]),  37,39},
  {&(_tg__ZTV8S19859C9__9S19859C12[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C12[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C9__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C9__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C9__9S19859C12[4]),  4,6},
  {&(_tg__ZTV8S19859C5__8S19859C9__9S19859C12[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19859C9__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C9__9S19859C12[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__8S19859C9__9S19859C12[4]),  4,6},
  {&(_tg__ZTV8S19859C5__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C7__A1__9S19859C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A1__9S19859C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C12[];
extern  VTBL_ENTRY _ZTV9S19859C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C12[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19859C9D0Ev,_ZThn24_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19859C9D1Ev,_ZThn24_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C9D0Ev,_ZThn32_N8S19859C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C9D1Ev,_ZThn32_N8S19859C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C8D0Ev,_ZThn16_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C8D1Ev,_ZThn16_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn16_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C7D0Ev,_ZThn28_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn16_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C7D1Ev,_ZThn28_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C12D0Ev,_ZThn28_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C12D1Ev,_ZThn28_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19859C12D0Ev,_ZThn36_N9S19859C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19859C12D0Ev,_ZThn24_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19859C12D1Ev,_ZThn36_N9S19859C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19859C12D1Ev,_ZThn24_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C12 = {  "S19859C12", // class name
  bases_S19859C12, 8,
  &(vtc_S19859C12[0]), // expected_vtbl_contents
  &(vtt_S19859C12[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI9S19859C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19859C12),39, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C12),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C10  : S19859C11 , virtual S19859C12 , virtual S19859C8 {
  ~S19859C10(); // tgen
  S19859C10(); // tgen
};
//SIG(-1 S19859C10) C1{ BC2{ VBC3{ VBC4{ vd m Fs}} vd} VBC5{ VBC6{ BC4 VBC7{ VBC4 vd} BC8{ VBC4 VBC7 BC3 vd Fi} VBC3 vd Fi} BC3 vd} VBC8}


S19859C10 ::~S19859C10(){ note_dtor("S19859C10", this);} // tgen
S19859C10 ::S19859C10(){ note_ctor("S19859C10", this);} // tgen

static void Test_S19859C10()
{
  extern Class_Descriptor cd_S19859C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19859C10, buf);
    S19859C10 *dp, &lv = *(dp=new (buf) S19859C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19859C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C10)");
    /*is_ambiguous_... S19859C10::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(8,4), "S19859C10");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(8,4), "S19859C10");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C9*), ABISELECT(8,4), "S19859C10");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(8,4), "S19859C10");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C12*), ABISELECT(8,4), "S19859C10");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*), ABISELECT(8,4), "S19859C10");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*), ABISELECT(8,4), "S19859C10");
    check_base_class_offset(lv, (S19859C7*)(S19859C11*), 0, "S19859C10");
    /*is_ambiguous_... S19859C9::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C9*), 0, "S19859C10");
    check_base_class_offset(lv, (S19859C11*), 0, "S19859C10");
    /*is_ambiguous_... S19859C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C9*), ABISELECT(32,16), "S19859C10");
    check_base_class_offset(lv, (S19859C5*)(S19859C9*), ABISELECT(64,36), "S19859C10");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C9*), ABISELECT(64,36), "S19859C10");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*), ABISELECT(64,36), "S19859C10");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(48,24), "S19859C10");
    check_base_class_offset(lv, (S19859C8*)(S19859C9*), ABISELECT(48,24), "S19859C10");
    check_base_class_offset(lv, (S19859C9*)(S19859C12*), ABISELECT(32,16), "S19859C10");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C12*), ABISELECT(24,12), "S19859C10");
    check_base_class_offset(lv, (S19859C12*), ABISELECT(24,12), "S19859C10");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*), ABISELECT(72,40), "S19859C10");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C8*), ABISELECT(72,40), "S19859C10");
    test_class_info(&lv, &cd_S19859C10);
    dp->~S19859C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C10(Test_S19859C10, "S19859C10", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN9S19859C10C1Ev();
extern void _ZN9S19859C10D1Ev();
Name_Map name_map_S19859C10[] = {
  NSPAIR(_ZN9S19859C10C1Ev),
  NSPAIR(_ZN9S19859C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C11;
extern VTBL_ENTRY _ZTI9S19859C11[];
extern  VTBL_ENTRY _ZTV9S19859C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C11[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C9;
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C12;
extern VTBL_ENTRY _ZTI9S19859C12[];
extern  VTBL_ENTRY _ZTV9S19859C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C12[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
static Base_Class bases_S19859C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19859C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C5,    ABISELECT(64,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19859C12,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(72,40), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C10[];
extern void ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev)();
extern void _ZN9S19859C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev)();
extern void _ZN9S19859C10D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C10D1Ev,_ZThn4_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C10D0Ev,_ZThn4_N9S19859C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19859C10D1Ev,_ZThn12_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19859C10D0Ev,_ZThn12_N9S19859C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S19859C10D1Ev,_ZThn16_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S19859C10D0Ev,_ZThn16_N9S19859C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N9S19859C10D1Ev,_ZTvn8_n24_N9S19859C10D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C10D0Ev,_ZTvn8_n24_N9S19859C10D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19859C10D1Ev,_ZThn36_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19859C10D0Ev,_ZThn36_N9S19859C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn72_N9S19859C10D1Ev,_ZThn40_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn72_N9S19859C10D0Ev,_ZThn40_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C10[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C10D1Ev,_ZTvn8_n24_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C10D0Ev,_ZTvn8_n24_N9S19859C10D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C10[];
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void _ZN9S19859C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
extern void _ZN9S19859C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C11__9S19859C10[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C11D1Ev,_ZThn4_N9S19859C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C11D0Ev,_ZThn4_N9S19859C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C11__9S19859C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__9S19859C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN9S19859C12D1Ev();
extern void _ZN9S19859C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C12__9S19859C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&_ZN9S19859C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C12D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C79S19859C12__A2__9S19859C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C79S19859C12__A2__9S19859C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C12__9S19859C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn40_N9S19859C12D1Ev,_ZThn24_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn40_N9S19859C12D0Ev,_ZThn24_N9S19859C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C12__9S19859C10[] = {
  ABISELECT(-40,-24),
  ABISELECT(-56,-32),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19859C12__9S19859C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C12__9S19859C10[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__9S19859C12__9S19859C10[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C10[] = {
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C10[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C9__A1__9S19859C10[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A1__9S19859C10[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C9__9S19859C10[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C9__9S19859C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C9__9S19859C10[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19859C9__9S19859C10[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C9__9S19859C10[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C9__9S19859C10[] = {
  ABISELECT(32,16),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C10[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__9S19859C10[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C8__A1__9S19859C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C8__A3__9S19859C10[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C8__A3__9S19859C10[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C8__A1__9S19859C10[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8__A1__9S19859C10[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
static  VTT_ENTRY vtt_S19859C10[] = {
  {&(_ZTV9S19859C10[9]),  9,52},
  {&(_tg__ZTV9S19859C11__9S19859C10[5]),  5,7},
  {&(_tg__ZTV9S19859C11__9S19859C10[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C11__9S19859C10[3]),  3,5},
  {&(_ZTV9S19859C10[9]),  9,52},
  {&(_ZTV9S19859C10[14]),  14,52},
  {&(_ZTV9S19859C10[23]),  23,52},
  {&(_ZTV9S19859C10[31]),  31,52},
  {&(_ZTV9S19859C10[43]),  43,52},
  {&(_ZTV9S19859C10[37]),  37,52},
  {&(_ZTV9S19859C10[50]),  50,52},
  {&(_tg__ZTV8S19859C7__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__9S19859C10[3]),  3,5},
  {&(_tg__ZTV9S19859C12__9S19859C10[6]),  6,8},
  {&(_tg__ZTV8S19859C79S19859C12__A2__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C79S19859C12__A2__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C9__9S19859C12__9S19859C10[6]),  6,8},
  {&(_tg__ZTV8S19859C5__9S19859C12__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19859C12__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C12__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__9S19859C12__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C9__9S19859C10[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C9__A1__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A1__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C9__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C9__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C5__8S19859C9__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19859C9__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C9__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__8S19859C9__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C5__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C8__A1__9S19859C10[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C8__A3__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C8__A3__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C8__A1__9S19859C10[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C8__A1__9S19859C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19859C10[];
extern  VTBL_ENTRY _ZTV9S19859C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C10[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19859C12D0Ev,_ZThn24_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19859C12D1Ev,_ZThn24_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C11D0Ev,_ZThn4_N9S19859C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C11D1Ev,_ZThn4_N9S19859C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19859C10D0Ev,_ZThn40_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19859C10D1Ev,_ZThn40_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C10D0Ev,_ZThn16_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C10D1Ev,_ZThn16_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19859C10D0Ev,_ZThn12_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19859C10D1Ev,_ZThn12_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C10D0Ev,_ZThn4_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C10D1Ev,_ZThn4_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19859C10D0Ev,_ZThn36_N9S19859C10D0Ev),
  (VTBL_ENTRY)_ZN9S19859C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19859C10D1Ev,_ZThn36_N9S19859C10D1Ev),
  (VTBL_ENTRY)_ZN9S19859C10D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C10 = {  "S19859C10", // class name
  bases_S19859C10, 12,
  &(vtc_S19859C10[0]), // expected_vtbl_contents
  &(vtt_S19859C10[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI9S19859C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19859C10),52, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C10),38, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C3  : S19859C4 , S19859C9 , virtual S19859C10 {
  virtual void  v1(); // _ZN8S19859C32v1Ev
  ~S19859C3(); // tgen
  S19859C3(); // tgen
};
//SIG(-1 S19859C3) C1{ BC2{ BC3{ VBC4{ vd m Fs} vd} BC4 BC5{ VBC4} BC6{ VBC4 VBC3 BC5 vd Fi} vd} BC7{ BC4 VBC3 BC6 VBC5 vd Fi} VBC8{ BC9{ VBC5 vd} VBC10{ VBC7 BC5 vd} VBC6} v1}


void  S19859C3 ::v1(){vfunc_called(this, "_ZN8S19859C32v1Ev");}
S19859C3 ::~S19859C3(){ note_dtor("S19859C3", this);} // tgen
S19859C3 ::S19859C3(){ note_ctor("S19859C3", this);} // tgen

static void Test_S19859C3()
{
  extern Class_Descriptor cd_S19859C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,24)];
    init_test(&cd_S19859C3, buf);
    S19859C3 *dp, &lv = *(dp=new (buf) S19859C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,92), "sizeof(S19859C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C3)");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*)(S19859C4*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C4*), ABISELECT(80,44), "S19859C3");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C4*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(80,44), "S19859C3");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C4*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C9*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C9*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C12*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*), ABISELECT(80,44), "S19859C3");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C4*), 0, "S19859C3");
    /*is_ambiguous_... S19859C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C4*), ABISELECT(8,4), "S19859C3");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C4*), ABISELECT(24,12), "S19859C3");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C4*), ABISELECT(96,52), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C9*), ABISELECT(96,52), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C9*), ABISELECT(96,52), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C9*), ABISELECT(96,52), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C9*), ABISELECT(96,52), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*), ABISELECT(96,52), "S19859C3");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C4*), ABISELECT(32,16), "S19859C3");
    check_base_class_offset(lv, (S19859C8*)(S19859C4*), ABISELECT(32,16), "S19859C3");
    check_base_class_offset(lv, (S19859C4*), 0, "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C9*), ABISELECT(48,24), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(64,32), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C9*), ABISELECT(64,32), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C9*), ABISELECT(104,56), "S19859C3");
    check_base_class_offset(lv, (S19859C7*)(S19859C11*)(S19859C10*), ABISELECT(104,56), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C9*), ABISELECT(104,56), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C9*), ABISELECT(48,24), "S19859C3");
    check_base_class_offset(lv, (S19859C11*)(S19859C10*), ABISELECT(104,56), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C9*), ABISELECT(120,64), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(136,72), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C9*), ABISELECT(136,72), "S19859C3");
    check_base_class_offset(lv, (S19859C9*)(S19859C12*), ABISELECT(120,64), "S19859C3");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C12*), ABISELECT(112,60), "S19859C3");
    check_base_class_offset(lv, (S19859C12*)(S19859C10*), ABISELECT(112,60), "S19859C3");
    /*is_ambiguous_... S19859C3::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*), ABISELECT(152,84), "S19859C3");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C10*), ABISELECT(152,84), "S19859C3");
    check_base_class_offset(lv, (S19859C10*), ABISELECT(104,56), "S19859C3");
    test_class_info(&lv, &cd_S19859C3);
    dp->~S19859C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C3(Test_S19859C3, "S19859C3", ABISELECT(168,92));

#else // __cplusplus

extern void _ZN8S19859C3C1Ev();
extern void _ZN8S19859C3D1Ev();
Name_Map name_map_S19859C3[] = {
  NSPAIR(_ZN8S19859C3C1Ev),
  NSPAIR(_ZN8S19859C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C4;
extern VTBL_ENTRY _ZTI8S19859C4[];
extern  VTBL_ENTRY _ZTV8S19859C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C4[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C9;
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
extern Class_Descriptor cd_S19859C11;
extern VTBL_ENTRY _ZTI9S19859C11[];
extern  VTBL_ENTRY _ZTV9S19859C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C11[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C9;
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C12;
extern VTBL_ENTRY _ZTI9S19859C12[];
extern  VTBL_ENTRY _ZTV9S19859C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C12[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C10;
extern VTBL_ENTRY _ZTI9S19859C10[];
extern  VTBL_ENTRY _ZTV9S19859C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C10[];
static Base_Class bases_S19859C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(80,44), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C5,    ABISELECT(96,52), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(64,32), //bcp->offset
    34, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19859C9,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C11,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(120,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(136,72), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19859C9,    ABISELECT(120,64), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19859C12,    ABISELECT(112,60), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(152,84), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19859C10,    ABISELECT(104,56), //bcp->offset
    51, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C3[];
extern void _ZN8S19859C3D1Ev();
extern void _ZN8S19859C3D0Ev();
extern void _ZN8S19859C32v1Ev();
extern void ABISELECT(_ZThn8_N8S19859C3D1Ev,_ZThn4_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C3D0Ev,_ZThn4_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C3D1Ev,_ZThn12_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C3D0Ev,_ZThn12_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C3D1Ev,_ZThn16_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C3D0Ev,_ZThn16_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C3D1Ev,_ZThn24_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C3D0Ev,_ZThn24_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19859C3D1Ev,_ZThn32_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19859C3D0Ev,_ZThn32_N8S19859C3D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C3D1Ev,_ZTv0_n12_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19859C3D1Ev,_ZThn44_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C3D0Ev,_ZTv0_n12_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19859C3D0Ev,_ZThn44_N8S19859C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S19859C3D1Ev,_ZThn52_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S19859C3D0Ev,_ZThn52_N8S19859C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S19859C3D1Ev,_ZThn56_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S19859C3D0Ev,_ZThn56_N8S19859C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19859C3D1Ev,_ZTv0_n28_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19859C3D1Ev,_ZThn60_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19859C3D0Ev,_ZTv0_n28_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19859C3D0Ev,_ZThn60_N8S19859C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19859C3D1Ev,_ZTv0_n24_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn120_N8S19859C3D1Ev,_ZThn64_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19859C3D0Ev,_ZTv0_n24_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn120_N8S19859C3D0Ev,_ZThn64_N8S19859C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S19859C3D1Ev,_ZTvn8_n24_N8S19859C3D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19859C3D0Ev,_ZTvn8_n24_N8S19859C3D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19859C3D1Ev,_ZTv0_n20_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn152_N8S19859C3D1Ev,_ZThn84_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19859C3D0Ev,_ZTv0_n20_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn152_N8S19859C3D0Ev,_ZThn84_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C3[] = {
  ABISELECT(152,84),
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&_ZN8S19859C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19859C32v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19859C3D1Ev,_ZThn4_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19859C3D0Ev,_ZThn4_N8S19859C3D0Ev),
  ABISELECT(56,32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C3D1Ev,_ZThn12_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C3D0Ev,_ZThn12_N8S19859C3D0Ev),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C3D1Ev,_ZThn16_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C3D0Ev,_ZThn16_N8S19859C3D0Ev),
  ABISELECT(56,32),
  ABISELECT(32,20),
  ABISELECT(48,28),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19859C3D1Ev,_ZThn24_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19859C3D0Ev,_ZThn24_N8S19859C3D0Ev),
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19859C3D1Ev,_ZThn32_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19859C3D0Ev,_ZThn32_N8S19859C3D0Ev),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C3D1Ev,_ZTv0_n12_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C3D0Ev,_ZTv0_n12_N8S19859C3D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-16,-8),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev),
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  ABISELECT(-104,-56),
  ABISELECT(-24,-12),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19859C3D1Ev,_ZTv0_n28_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19859C3D0Ev,_ZTv0_n28_N8S19859C3D0Ev),
  ABISELECT(-120,-64),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19859C3D1Ev,_ZTv0_n24_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19859C3D0Ev,_ZTv0_n24_N8S19859C3D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19859C3D1Ev,_ZTvn8_n24_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19859C3D0Ev,_ZTvn8_n24_N8S19859C3D0Ev),
  ABISELECT(-152,-84),
  ABISELECT(-56,-32),
  ABISELECT(-72,-40),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C3D1Ev,_ZTv0_n20_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C3D0Ev,_ZTv0_n20_N8S19859C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C3[];
extern void _ZN8S19859C4D1Ev();
extern void _ZN8S19859C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C4__8S19859C3[] = {
  ABISELECT(96,52),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&_ZN8S19859C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C4D0Ev,
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C58S19859C4__8S19859C3[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn80_N8S19859C5D1Ev,_ZThn44_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn80_N8S19859C5D0Ev,_ZThn44_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C58S19859C4__8S19859C3[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C4__8S19859C3[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19859C7D1Ev,_ZThn32_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19859C7D0Ev,_ZThn32_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C4__8S19859C3[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C4__8S19859C3[] = {
  ABISELECT(64,36),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C4__A1__8S19859C3[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C7D1Ev,_ZThn28_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C7D0Ev,_ZThn28_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C4__A1__8S19859C3[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C8D1Ev,_ZThn28_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C8D0Ev,_ZThn28_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C4__8S19859C3[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19859C8D1Ev,_ZThn36_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19859C8D0Ev,_ZThn36_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C4__8S19859C3[] = {
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S19859C4D1Ev,_ZThn44_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S19859C4D0Ev,_ZThn44_N8S19859C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C4__8S19859C3[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__8S19859C4__8S19859C3[] = {
  ABISELECT(56,32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C4__8S19859C3[] = {
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn96_N8S19859C4D1Ev,_ZThn52_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn96_N8S19859C4D0Ev,_ZThn52_N8S19859C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C4__8S19859C3[] = {
  ABISELECT(-96,-52),
  ABISELECT(-16,-8),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev),
};
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C9__A__8S19859C3[] = {
  ABISELECT(56,32),
  ABISELECT(32,20),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__A1__8S19859C3[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C9__A2__8S19859C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A2__8S19859C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C9__A1__8S19859C3[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn20_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn20_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C9__A1__8S19859C3[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C9D1Ev,_ZThn28_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C9D0Ev,_ZThn28_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C9__A__8S19859C3[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19859C9__A__8S19859C3[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C9__A__8S19859C3[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S19859C9D1Ev,_ZThn32_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S19859C9D0Ev,_ZThn32_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C9__A__8S19859C3[] = {
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C3[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__A1__8S19859C3[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A3__8S19859C3[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A3__8S19859C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev)();
extern void _ZN9S19859C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev)();
extern void _ZN9S19859C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C10__8S19859C3[] = {
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void _ZN9S19859C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
extern void _ZN9S19859C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C119S19859C10__8S19859C3[] = {
  0,
  0,
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C119S19859C10__8S19859C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C10__8S19859C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C10D1Ev,_ZThn4_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C10D0Ev,_ZThn4_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C12__9S19859C10__8S19859C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C10D1Ev,_ZThn8_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C10D0Ev,_ZThn8_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C10__8S19859C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C10__8S19859C3[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N9S19859C10D1Ev,_ZTvn8_n24_N9S19859C10D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C10D0Ev,_ZTvn8_n24_N9S19859C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C10__8S19859C3[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C10D1Ev,_ZTvn8_n24_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C10D0Ev,_ZTvn8_n24_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19859C10D1Ev,_ZThn28_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19859C10D0Ev,_ZThn28_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C8__A1__9S19859C10__8S19859C3[] = {
  ABISELECT(-48,-28),
  ABISELECT(-56,-32),
  ABISELECT(-72,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev),
};
extern void _ZN9S19859C12D1Ev();
extern void _ZN9S19859C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C12__8S19859C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&_ZN9S19859C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C12D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C79S19859C12__A5__8S19859C3[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C79S19859C12__A5__8S19859C3[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C12__8S19859C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C12__8S19859C3[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19859C12__8S19859C3[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C12__8S19859C3[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__9S19859C12__8S19859C3[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C9__A1__8S19859C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__A2__8S19859C3[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C9__A4__8S19859C3[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A4__8S19859C3[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C9__A2__8S19859C3[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C9__A2__8S19859C3[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C9__A1__8S19859C3[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19859C9__A1__8S19859C3[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C9__A1__8S19859C3[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C9__A1__8S19859C3[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C8__A3__8S19859C3[] = {
  ABISELECT(-56,-32),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C8__A6__8S19859C3[] = {
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C8__A6__8S19859C3[] = {
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C8__A3__8S19859C3[] = {
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8__A3__8S19859C3[] = {
  ABISELECT(56,32),
  ABISELECT(-16,-8),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
static  VTT_ENTRY vtt_S19859C3[] = {
  {&(_ZTV8S19859C3[9]),  9,92},
  {&(_tg__ZTV8S19859C4__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C58S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C58S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C78S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C4__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C4__A1__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C4__A1__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C4__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C7__8S19859C4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C4__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A1__8S19859C4__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C9__A__8S19859C3[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C9__A1__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C9__A2__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A2__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C9__A1__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C9__A1__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C5__8S19859C9__A__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19859C9__A__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C9__A__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__8S19859C9__A__8S19859C3[4]),  4,6},
  {&(_ZTV8S19859C3[43]),  43,92},
  {&(_ZTV8S19859C3[19]),  19,92},
  {&(_ZTV8S19859C3[25]),  25,92},
  {&(_ZTV8S19859C3[49]),  49,92},
  {&(_ZTV8S19859C3[32]),  32,92},
  {&(_ZTV8S19859C3[38]),  38,92},
  {&(_ZTV8S19859C3[60]),  60,92},
  {&(_ZTV8S19859C3[60]),  60,92},
  {&(_ZTV8S19859C3[69]),  69,92},
  {&(_ZTV8S19859C3[77]),  77,92},
  {&(_ZTV8S19859C3[83]),  83,92},
  {&(_ZTV8S19859C3[90]),  90,92},
  {&(_tg__ZTV8S19859C5__A1__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__A1__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C7__A3__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A3__8S19859C3[3]),  3,5},
  {&(_tg__ZTV9S19859C10__8S19859C3[9]),  9,11},
  {&(_tg__ZTV9S19859C119S19859C10__8S19859C3[5]),  5,7},
  {&(_tg__ZTV9S19859C119S19859C10__8S19859C3[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C119S19859C10__8S19859C3[3]),  3,5},
  {&(_tg__ZTV9S19859C10__8S19859C3[9]),  9,11},
  {&(_tg__ZTV8S19859C6__9S19859C10__8S19859C3[3]),  3,5},
  {&(_tg__ZTV9S19859C12__9S19859C10__8S19859C3[7]),  7,9},
  {&(_tg__ZTV8S19859C9__9S19859C10__8S19859C3[6]),  6,8},
  {&(_tg__ZTV8S19859C5__9S19859C10__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C10__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C8__A1__9S19859C10__8S19859C3[5]),  5,7},
  {&(_tg__ZTV9S19859C12__8S19859C3[6]),  6,8},
  {&(_tg__ZTV8S19859C79S19859C12__A5__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C79S19859C12__A5__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C9__9S19859C12__8S19859C3[6]),  6,8},
  {&(_tg__ZTV8S19859C5__9S19859C12__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19859C12__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C12__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__9S19859C12__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C9__A1__8S19859C3[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C9__A2__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C9__A4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A4__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C9__A2__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C9__A2__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C5__8S19859C9__A1__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19859C9__A1__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C9__A1__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__8S19859C9__A1__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C8__A3__8S19859C3[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C8__A6__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C8__A6__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C8__A3__8S19859C3[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C8__A3__8S19859C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19859C3[];
extern  VTBL_ENTRY _ZTV8S19859C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C3[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C10D0Ev,_ZThn28_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C10D1Ev,_ZThn28_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C10D0Ev,_ZThn8_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C10D1Ev,_ZThn8_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C10D0Ev,_ZThn4_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C10D1Ev,_ZThn4_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C9D0Ev,_ZThn32_N8S19859C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C9D0Ev,_ZThn28_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C9D1Ev,_ZThn32_N8S19859C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C9D1Ev,_ZThn28_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19859C4D0Ev,_ZThn52_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19859C4D1Ev,_ZThn52_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C4D0Ev,_ZThn44_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C4D1Ev,_ZThn44_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn20_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C8D0Ev,_ZThn36_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn20_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C8D1Ev,_ZThn36_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C8D0Ev,_ZThn28_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C8D1Ev,_ZThn28_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C7D0Ev,_ZThn28_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C7D0Ev,_ZThn32_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C7D1Ev,_ZThn28_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C7D1Ev,_ZThn32_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C5D0Ev,_ZThn44_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C5D1Ev,_ZThn44_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19859C3D0Ev,_ZTv0_n20_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19859C3D0Ev,_ZThn84_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19859C3D1Ev,_ZTv0_n20_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19859C3D1Ev,_ZThn84_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19859C3D0Ev,_ZTv0_n24_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19859C3D0Ev,_ZThn64_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19859C3D1Ev,_ZTv0_n24_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19859C3D1Ev,_ZThn64_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19859C3D0Ev,_ZTv0_n28_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C3D0Ev,_ZThn60_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19859C3D1Ev,_ZTv0_n28_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C3D1Ev,_ZThn60_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19859C3D0Ev,_ZThn56_N8S19859C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19859C3D0Ev,_ZThn52_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19859C3D1Ev,_ZThn56_N8S19859C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19859C3D1Ev,_ZThn52_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C3D0Ev,_ZTv0_n12_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C3D0Ev,_ZThn44_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C3D1Ev,_ZTv0_n12_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C3D1Ev,_ZThn44_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C3 = {  "S19859C3", // class name
  bases_S19859C3, 23,
  &(vtc_S19859C3[0]), // expected_vtbl_contents
  &(vtt_S19859C3[0]), // expected_vtt_contents
  ABISELECT(168,92), // object size
  NSPAIRA(_ZTI8S19859C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19859C3),92, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C3),75, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C13  : S19859C7 {
  void *s19859c13f0;
  virtual  ~S19859C13(); // _ZN9S19859C13D2Ev
  S19859C13(); // tgen
};
//SIG(-1 S19859C13) C1{ BC2{ VBC3{ vd m Fs}} vd Fp}


 S19859C13 ::~S19859C13(){ note_dtor("S19859C13", this);}
S19859C13 ::S19859C13(){ note_ctor("S19859C13", this);} // tgen

static void Test_S19859C13()
{
  extern Class_Descriptor cd_S19859C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19859C13, buf);
    S19859C13 *dp, &lv = *(dp=new (buf) S19859C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19859C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C13)");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(16,8), "S19859C13");
    check_base_class_offset(lv, (S19859C7*), 0, "S19859C13");
    check_field_offset(lv, s19859c13f0, ABISELECT(8,4), "S19859C13.s19859c13f0");
    test_class_info(&lv, &cd_S19859C13);
    dp->~S19859C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C13(Test_S19859C13, "S19859C13", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S19859C13C1Ev();
extern void _ZN9S19859C13D2Ev();
Name_Map name_map_S19859C13[] = {
  NSPAIR(_ZN9S19859C13C1Ev),
  NSPAIR(_ZN9S19859C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C13[];
extern void _ZN9S19859C13D1Ev();
extern void _ZN9S19859C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19859C13D1Ev,_ZTv0_n12_N9S19859C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C13D1Ev,_ZThn8_N9S19859C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C13D0Ev,_ZTv0_n12_N9S19859C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C13D0Ev,_ZThn8_N9S19859C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C13[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C13[0]),
  (VTBL_ENTRY)&_ZN9S19859C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C13D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C13D1Ev,_ZTv0_n12_N9S19859C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C13D0Ev,_ZTv0_n12_N9S19859C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C13[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C13[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn8_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn8_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__9S19859C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
static  VTT_ENTRY vtt_S19859C13[] = {
  {&(_ZTV9S19859C13[3]),  3,10},
  {&(_tg__ZTV8S19859C7__9S19859C13[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__9S19859C13[3]),  3,5},
  {&(_ZTV9S19859C13[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19859C13[];
extern  VTBL_ENTRY _ZTV9S19859C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C13[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn8_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn8_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C13D0Ev,_ZTv0_n12_N9S19859C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C13D0Ev,_ZThn8_N9S19859C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C13D1Ev,_ZTv0_n12_N9S19859C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C13D1Ev,_ZThn8_N9S19859C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C13 = {  "S19859C13", // class name
  bases_S19859C13, 2,
  &(vtc_S19859C13[0]), // expected_vtbl_contents
  &(vtt_S19859C13[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19859C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19859C13),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C13),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C15  : virtual S19859C6 , virtual S19859C7 {
  virtual  ~S19859C15(); // _ZN9S19859C15D2Ev
  S19859C15(); // tgen
};
//SIG(-1 S19859C15) C1{ VBC2{ vd m Fs} VBC3{ VBC2} vd}


 S19859C15 ::~S19859C15(){ note_dtor("S19859C15", this);}
S19859C15 ::S19859C15(){ note_ctor("S19859C15", this);} // tgen

static void Test_S19859C15()
{
  extern Class_Descriptor cd_S19859C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19859C15, buf);
    S19859C15 *dp, &lv = *(dp=new (buf) S19859C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19859C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C15)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19859C15");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(8,4), "S19859C15");
    check_base_class_offset(lv, (S19859C7*), 0, "S19859C15");
    test_class_info(&lv, &cd_S19859C15);
    dp->~S19859C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C15(Test_S19859C15, "S19859C15", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19859C15C1Ev();
extern void _ZN9S19859C15D2Ev();
Name_Map name_map_S19859C15[] = {
  NSPAIR(_ZN9S19859C15C1Ev),
  NSPAIR(_ZN9S19859C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C15[];
extern void _ZN9S19859C15D1Ev();
extern void _ZN9S19859C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C15D1Ev,_ZThn4_N9S19859C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C15D0Ev,_ZThn4_N9S19859C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C15[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&_ZN9S19859C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C15D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C15[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C15[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__9S19859C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
static  VTT_ENTRY vtt_S19859C15[] = {
  {&(_ZTV9S19859C15[5]),  5,12},
  {&(_ZTV9S19859C15[10]),  10,12},
  {&(_ZTV9S19859C15[5]),  5,12},
  {&(_tg__ZTV8S19859C7__9S19859C15[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__9S19859C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C15[];
extern  VTBL_ENTRY _ZTV9S19859C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C15[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C15D0Ev,_ZThn4_N9S19859C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C15D1Ev,_ZThn4_N9S19859C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C15 = {  "S19859C15", // class name
  bases_S19859C15, 2,
  &(vtc_S19859C15[0]), // expected_vtbl_contents
  &(vtt_S19859C15[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19859C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19859C15),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C15),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C16  : virtual S19859C6 , virtual S19859C7 {
  ~S19859C16(); // tgen
  S19859C16(); // tgen
};
//SIG(-1 S19859C16) C1{ VBC2{ vd m Fs} VBC3{ VBC2}}


S19859C16 ::~S19859C16(){ note_dtor("S19859C16", this);} // tgen
S19859C16 ::S19859C16(){ note_ctor("S19859C16", this);} // tgen

static void Test_S19859C16()
{
  extern Class_Descriptor cd_S19859C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19859C16, buf);
    S19859C16 *dp, &lv = *(dp=new (buf) S19859C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19859C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C16)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19859C16");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(8,4), "S19859C16");
    check_base_class_offset(lv, (S19859C7*), 0, "S19859C16");
    test_class_info(&lv, &cd_S19859C16);
    dp->~S19859C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C16(Test_S19859C16, "S19859C16", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19859C16C1Ev();
extern void _ZN9S19859C16D1Ev();
Name_Map name_map_S19859C16[] = {
  NSPAIR(_ZN9S19859C16C1Ev),
  NSPAIR(_ZN9S19859C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
static Base_Class bases_S19859C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C16[];
extern void _ZN9S19859C16D1Ev();
extern void _ZN9S19859C16D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C16D1Ev,_ZThn4_N9S19859C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C16D0Ev,_ZThn4_N9S19859C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C16[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&_ZN9S19859C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C16D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C16[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C16[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__9S19859C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
static  VTT_ENTRY vtt_S19859C16[] = {
  {&(_ZTV9S19859C16[5]),  5,12},
  {&(_ZTV9S19859C16[10]),  10,12},
  {&(_ZTV9S19859C16[5]),  5,12},
  {&(_tg__ZTV8S19859C7__9S19859C16[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__9S19859C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C16[];
extern  VTBL_ENTRY _ZTV9S19859C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C16[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D0Ev,_ZThn4_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C7D1Ev,_ZThn4_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C16D0Ev,_ZThn4_N9S19859C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C16D1Ev,_ZThn4_N9S19859C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C16 = {  "S19859C16", // class name
  bases_S19859C16, 2,
  &(vtc_S19859C16[0]), // expected_vtbl_contents
  &(vtt_S19859C16[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19859C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19859C16),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C16),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C14  : S19859C7 , S19859C15 , S19859C16 , virtual S19859C5 , virtual S19859C11 {
  int s19859c14f0:6;
  virtual  ~S19859C14(); // _ZN9S19859C14D2Ev
  S19859C14(); // tgen
};
//SIG(-1 S19859C14) C1{ BC2{ VBC3{ vd m Fs}} BC4{ VBC3 VBC2 vd} BC5{ VBC3 VBC2} VBC6{ VBC3 vd} VBC7{ VBC2 vd} vd Fi:6}


 S19859C14 ::~S19859C14(){ note_dtor("S19859C14", this);}
S19859C14 ::S19859C14(){ note_ctor("S19859C14", this);} // tgen

static void Test_S19859C14()
{
  extern Class_Descriptor cd_S19859C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19859C14, buf);
    S19859C14 *dp, &lv = *(dp=new (buf) S19859C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19859C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C14)");
    /*is_ambiguous_... S19859C14::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(32,16), "S19859C14");
    check_base_class_offset(lv, (S19859C6*)(S19859C15*), ABISELECT(32,16), "S19859C14");
    /*is_ambiguous_... S19859C14::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(32,16), "S19859C14");
    check_base_class_offset(lv, (S19859C6*)(S19859C16*), ABISELECT(32,16), "S19859C14");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(32,16), "S19859C14");
    /*is_ambiguous_... S19859C14::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*), 0, "S19859C14");
    check_base_class_offset(lv, (S19859C7*)(S19859C15*), ABISELECT(8,4), "S19859C14");
    check_base_class_offset(lv, (S19859C7*)(S19859C16*), ABISELECT(8,4), "S19859C14");
    check_base_class_offset(lv, (S19859C7*)(S19859C11*), ABISELECT(8,4), "S19859C14");
    check_base_class_offset(lv, (S19859C15*), ABISELECT(8,4), "S19859C14");
    check_base_class_offset(lv, (S19859C16*), ABISELECT(16,8), "S19859C14");
    check_base_class_offset(lv, (S19859C5*), ABISELECT(48,24), "S19859C14");
    check_base_class_offset(lv, (S19859C11*), ABISELECT(56,28), "S19859C14");
    set_bf_and_test(lv, s19859c14f0, ABISELECT(24,12), 0, 6, 1, "S19859C14");
    set_bf_and_test(lv, s19859c14f0, ABISELECT(24,12), 0, 6, hide_sll(1LL<<5), "S19859C14");
    test_class_info(&lv, &cd_S19859C14);
    dp->~S19859C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C14(Test_S19859C14, "S19859C14", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19859C14C1Ev();
extern void _ZN9S19859C14D2Ev();
Name_Map name_map_S19859C14[] = {
  NSPAIR(_ZN9S19859C14C1Ev),
  NSPAIR(_ZN9S19859C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C15;
extern VTBL_ENTRY _ZTI9S19859C15[];
extern  VTBL_ENTRY _ZTV9S19859C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C15[];
extern Class_Descriptor cd_S19859C16;
extern VTBL_ENTRY _ZTI9S19859C16[];
extern  VTBL_ENTRY _ZTV9S19859C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C16[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C11;
extern VTBL_ENTRY _ZTI9S19859C11[];
extern  VTBL_ENTRY _ZTV9S19859C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C11[];
static Base_Class bases_S19859C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19859C15,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C16,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C5,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C11,    ABISELECT(56,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C14[];
extern void _ZN9S19859C14D1Ev();
extern void _ZN9S19859C14D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C14D1Ev,_ZThn4_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C14D0Ev,_ZThn4_N9S19859C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C14D1Ev,_ZThn8_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C14D0Ev,_ZThn8_N9S19859C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C14D1Ev,_ZTv0_n12_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S19859C14D1Ev,_ZThn16_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C14D0Ev,_ZTv0_n12_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S19859C14D0Ev,_ZThn16_N9S19859C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S19859C14D1Ev,_ZThn24_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S19859C14D0Ev,_ZThn24_N9S19859C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn56_N9S19859C14D1Ev,_ZThn28_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn56_N9S19859C14D0Ev,_ZThn28_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C14[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&_ZN9S19859C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C14D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C14D1Ev,_ZTv0_n12_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C14D0Ev,_ZTv0_n12_N9S19859C14D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-24,-12),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C14[];
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A__9S19859C14[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C7D1Ev,_ZThn16_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C7D0Ev,_ZThn16_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A__9S19859C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev)();
extern void _ZN9S19859C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev)();
extern void _ZN9S19859C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C15__9S19859C14[] = {
  0,
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S19859C15D1Ev,_ZThn12_N9S19859C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S19859C15D0Ev,_ZThn12_N9S19859C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C15__9S19859C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev)();
extern void _ZN9S19859C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev)();
extern void _ZN9S19859C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C16__9S19859C14[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C16D1Ev,_ZThn8_N9S19859C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C16D0Ev,_ZThn8_N9S19859C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C16__9S19859C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C16__9S19859C14[] = {
  ABISELECT(8,4),
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__9S19859C14[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A1__9S19859C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C14[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__9S19859C14[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void _ZN9S19859C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
extern void _ZN9S19859C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C11__9S19859C14[] = {
  ABISELECT(-48,-24),
  0,
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C11__9S19859C14[] = {
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C11__9S19859C14[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev),
};
static  VTT_ENTRY vtt_S19859C14[] = {
  {&(_ZTV9S19859C14[6]),  6,40},
  {&(_tg__ZTV8S19859C7__A__9S19859C14[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A__9S19859C14[3]),  3,5},
  {&(_tg__ZTV9S19859C15__9S19859C14[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C15__9S19859C14[3]),  3,5},
  {&(_tg__ZTV9S19859C15__9S19859C14[5]),  5,7},
  {&(_tg__ZTV9S19859C16__9S19859C14[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C16__9S19859C14[3]),  3,5},
  {&(_tg__ZTV8S19859C7__9S19859C16__9S19859C14[4]),  4,6},
  {&(_ZTV9S19859C14[25]),  25,40},
  {&(_ZTV9S19859C14[13]),  13,40},
  {&(_ZTV9S19859C14[13]),  13,40},
  {&(_ZTV9S19859C14[20]),  20,40},
  {&(_ZTV9S19859C14[31]),  31,40},
  {&(_ZTV9S19859C14[38]),  38,40},
  {&(_tg__ZTV8S19859C7__A1__9S19859C14[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A1__9S19859C14[3]),  3,5},
  {&(_tg__ZTV8S19859C5__9S19859C14[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__9S19859C14[3]),  3,5},
  {&(_tg__ZTV9S19859C11__9S19859C14[5]),  5,7},
  {&(_tg__ZTV8S19859C7__9S19859C11__9S19859C14[4]),  4,6},
  {&(_tg__ZTV8S19859C6__9S19859C11__9S19859C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C14[];
extern  VTBL_ENTRY _ZTV9S19859C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C14[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C16D0Ev,_ZThn8_N9S19859C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C16D1Ev,_ZThn8_N9S19859C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19859C15D0Ev,_ZThn12_N9S19859C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19859C15D1Ev,_ZThn12_N9S19859C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C7D0Ev,_ZThn16_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C7D1Ev,_ZThn16_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C14D0Ev,_ZTv0_n12_N9S19859C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C14D0Ev,_ZThn16_N9S19859C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C14D1Ev,_ZTv0_n12_N9S19859C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C14D1Ev,_ZThn16_N9S19859C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19859C14D0Ev,_ZThn28_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C14D0Ev,_ZThn24_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C14D0Ev,_ZThn8_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C14D0Ev,_ZThn4_N9S19859C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19859C14D1Ev,_ZThn28_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C14D1Ev,_ZThn24_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C14D1Ev,_ZThn8_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C14D1Ev,_ZThn4_N9S19859C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C14 = {  "S19859C14", // class name
  bases_S19859C14, 7,
  &(vtc_S19859C14[0]), // expected_vtbl_contents
  &(vtt_S19859C14[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19859C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19859C14),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C14),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C18  : S19859C6 , virtual S19859C5 {
  virtual  ~S19859C18(); // _ZN9S19859C18D2Ev
  S19859C18(); // tgen
};
//SIG(-1 S19859C18) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} vd}


 S19859C18 ::~S19859C18(){ note_dtor("S19859C18", this);}
S19859C18 ::S19859C18(){ note_ctor("S19859C18", this);} // tgen

static void Test_S19859C18()
{
  extern Class_Descriptor cd_S19859C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19859C18, buf);
    S19859C18 *dp, &lv = *(dp=new (buf) S19859C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19859C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C18)");
    /*is_ambiguous_... S19859C18::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S19859C18");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(24,12), "S19859C18");
    check_base_class_offset(lv, (S19859C5*), ABISELECT(16,8), "S19859C18");
    test_class_info(&lv, &cd_S19859C18);
    dp->~S19859C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C18(Test_S19859C18, "S19859C18", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19859C18C1Ev();
extern void _ZN9S19859C18D2Ev();
Name_Map name_map_S19859C18[] = {
  NSPAIR(_ZN9S19859C18C1Ev),
  NSPAIR(_ZN9S19859C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
static Base_Class bases_S19859C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19859C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C18[];
extern void _ZN9S19859C18D1Ev();
extern void _ZN9S19859C18D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C18D1Ev,_ZThn8_N9S19859C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C18D0Ev,_ZThn8_N9S19859C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev)();
extern void ABISELECT(_ZThn24_N9S19859C18D1Ev,_ZThn12_N9S19859C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev)();
extern void ABISELECT(_ZThn24_N9S19859C18D0Ev,_ZThn12_N9S19859C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C18[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&_ZN9S19859C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C18D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C18[];
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C18[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__9S19859C18[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
static  VTT_ENTRY vtt_S19859C18[] = {
  {&(_ZTV9S19859C18[4]),  4,17},
  {&(_ZTV9S19859C18[10]),  10,17},
  {&(_ZTV9S19859C18[15]),  15,17},
  {&(_tg__ZTV8S19859C5__9S19859C18[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__9S19859C18[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C18[];
extern  VTBL_ENTRY _ZTV9S19859C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C18[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19859C18D0Ev,_ZThn12_N9S19859C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19859C18D1Ev,_ZThn12_N9S19859C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C18D0Ev,_ZThn8_N9S19859C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C18D1Ev,_ZThn8_N9S19859C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C18 = {  "S19859C18", // class name
  bases_S19859C18, 3,
  &(vtc_S19859C18[0]), // expected_vtbl_contents
  &(vtt_S19859C18[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19859C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19859C18),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C18),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C19  : virtual S19859C5 {
  ~S19859C19(); // tgen
  S19859C19(); // tgen
};
//SIG(-1 S19859C19) C1{ VBC2{ VBC3{ vd m Fs} vd}}


S19859C19 ::~S19859C19(){ note_dtor("S19859C19", this);} // tgen
S19859C19 ::S19859C19(){ note_ctor("S19859C19", this);} // tgen

static void Test_S19859C19()
{
  extern Class_Descriptor cd_S19859C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19859C19, buf);
    S19859C19 *dp, &lv = *(dp=new (buf) S19859C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19859C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C19)");
    check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(8,4), "S19859C19");
    check_base_class_offset(lv, (S19859C5*), 0, "S19859C19");
    test_class_info(&lv, &cd_S19859C19);
    dp->~S19859C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C19(Test_S19859C19, "S19859C19", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19859C19C1Ev();
extern void _ZN9S19859C19D1Ev();
Name_Map name_map_S19859C19[] = {
  NSPAIR(_ZN9S19859C19C1Ev),
  NSPAIR(_ZN9S19859C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
static Base_Class bases_S19859C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19859C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C19[];
extern void _ZN9S19859C19D1Ev();
extern void _ZN9S19859C19D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C19D1Ev,_ZThn4_N9S19859C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C19D0Ev,_ZThn4_N9S19859C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C19[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C19[0]),
  (VTBL_ENTRY)&_ZN9S19859C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C19D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C19[];
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C19[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__9S19859C19[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
static  VTT_ENTRY vtt_S19859C19[] = {
  {&(_ZTV9S19859C19[5]),  5,12},
  {&(_ZTV9S19859C19[5]),  5,12},
  {&(_ZTV9S19859C19[10]),  10,12},
  {&(_tg__ZTV8S19859C5__9S19859C19[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__9S19859C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C19[];
extern  VTBL_ENTRY _ZTV9S19859C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C19[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D0Ev,_ZThn4_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C5D1Ev,_ZThn4_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C19D0Ev,_ZThn4_N9S19859C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C19D1Ev,_ZThn4_N9S19859C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C19 = {  "S19859C19", // class name
  bases_S19859C19, 2,
  &(vtc_S19859C19[0]), // expected_vtbl_contents
  &(vtt_S19859C19[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19859C19),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19859C19),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C19),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C17  : S19859C18 , S19859C8 , S19859C19 , S19859C4 , S19859C5 {
  __tsi64 s19859c17f0;
  virtual  ~S19859C17(); // _ZN9S19859C17D2Ev
  S19859C17(); // tgen
};
//SIG(-1 S19859C17) C1{ BC2{ BC3{ vd m Fs} VBC4{ VBC3 vd} vd} BC5{ VBC3 VBC4 BC6{ VBC3} vd Fi} BC7{ VBC4} BC8{ BC4 BC3 BC6 BC5 vd} BC4 vd FL}


 S19859C17 ::~S19859C17(){ note_dtor("S19859C17", this);}
S19859C17 ::S19859C17(){ note_ctor("S19859C17", this);} // tgen

static void Test_S19859C17()
{
  extern Class_Descriptor cd_S19859C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S19859C17, buf);
    S19859C17 *dp, &lv = *(dp=new (buf) S19859C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S19859C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C17)");
    /*is_ambiguous_... S19859C18::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C18*), 0, "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(104,56), "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*), ABISELECT(104,56), "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*), ABISELECT(104,56), "S19859C17");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*)(S19859C4*), ABISELECT(104,56), "S19859C17");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C4*), ABISELECT(104,56), "S19859C17");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C4*), ABISELECT(104,56), "S19859C17");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C4*), ABISELECT(104,56), "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(104,56), "S19859C17");
    check_base_class_offset(lv, (S19859C5*)(S19859C18*), ABISELECT(32,16), "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*), ABISELECT(32,16), "S19859C17");
    check_base_class_offset(lv, (S19859C5*)(S19859C19*), ABISELECT(32,16), "S19859C17");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C4*), ABISELECT(32,16), "S19859C17");
    check_base_class_offset(lv, (S19859C18*), 0, "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*), ABISELECT(16,8), "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C8*), ABISELECT(16,8), "S19859C17");
    check_base_class_offset(lv, (S19859C19*), ABISELECT(32,16), "S19859C17");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C4*), ABISELECT(40,20), "S19859C17");
    /*is_ambiguous_... S19859C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C4*), ABISELECT(48,24), "S19859C17");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C4*), ABISELECT(64,32), "S19859C17");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C4*), ABISELECT(72,36), "S19859C17");
    check_base_class_offset(lv, (S19859C8*)(S19859C4*), ABISELECT(72,36), "S19859C17");
    check_base_class_offset(lv, (S19859C4*), ABISELECT(40,20), "S19859C17");
    /*is_ambiguous_... S19859C17::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*), ABISELECT(88,44), "S19859C17");
    check_field_offset(lv, s19859c17f0, ABISELECT(96,48), "S19859C17.s19859c17f0");
    test_class_info(&lv, &cd_S19859C17);
    dp->~S19859C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C17(Test_S19859C17, "S19859C17", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN9S19859C17C1Ev();
extern void _ZN9S19859C17D2Ev();
Name_Map name_map_S19859C17[] = {
  NSPAIR(_ZN9S19859C17C1Ev),
  NSPAIR(_ZN9S19859C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C18;
extern VTBL_ENTRY _ZTI9S19859C18[];
extern  VTBL_ENTRY _ZTV9S19859C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C18[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C19;
extern VTBL_ENTRY _ZTI9S19859C19[];
extern  VTBL_ENTRY _ZTV9S19859C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C19[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C4;
extern VTBL_ENTRY _ZTI8S19859C4[];
extern  VTBL_ENTRY _ZTV8S19859C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C4[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
static Base_Class bases_S19859C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(104,56), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19859C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19859C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C19,    ABISELECT(32,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(48,24), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(64,32), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(72,36), //bcp->offset
    34, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C4,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C5,    ABISELECT(88,44), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19859C17[];
extern void _ZN9S19859C17D1Ev();
extern void _ZN9S19859C17D0Ev();
extern void ABISELECT(_ZThn16_N9S19859C17D1Ev,_ZThn8_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C17D0Ev,_ZThn8_N9S19859C17D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C17D1Ev,_ZTv0_n16_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19859C17D1Ev,_ZThn16_N9S19859C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C17D0Ev,_ZTv0_n16_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19859C17D0Ev,_ZThn16_N9S19859C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZThn40_N9S19859C17D1Ev,_ZThn20_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19859C17D0Ev,_ZThn20_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn48_N9S19859C17D1Ev,_ZThn24_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn48_N9S19859C17D0Ev,_ZThn24_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn64_N9S19859C17D1Ev,_ZThn32_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19859C17D0Ev,_ZThn32_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn72_N9S19859C17D1Ev,_ZThn36_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn72_N9S19859C17D0Ev,_ZThn36_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn88_N9S19859C17D1Ev,_ZThn44_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn88_N9S19859C17D0Ev,_ZThn44_N9S19859C17D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C17D1Ev,_ZTv0_n12_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn104_N9S19859C17D1Ev,_ZThn56_N9S19859C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C17D0Ev,_ZTv0_n12_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn104_N9S19859C17D0Ev,_ZThn56_N9S19859C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19859C17[] = {
  ABISELECT(104,56),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&_ZN9S19859C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C17D0Ev,
  ABISELECT(16,8),
  ABISELECT(88,48),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19859C17D1Ev,_ZThn8_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19859C17D0Ev,_ZThn8_N9S19859C17D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(72,40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C17D1Ev,_ZTv0_n16_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C17D0Ev,_ZTv0_n16_N9S19859C17D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(64,36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19859C17D1Ev,_ZThn20_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19859C17D0Ev,_ZThn20_N9S19859C17D0Ev),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S19859C17D1Ev,_ZThn24_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S19859C17D0Ev,_ZThn24_N9S19859C17D0Ev),
  ABISELECT(40,24),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19859C17D1Ev,_ZThn32_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19859C17D0Ev,_ZThn32_N9S19859C17D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(32,20),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19859C17D1Ev,_ZThn36_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19859C17D0Ev,_ZThn36_N9S19859C17D0Ev),
  ABISELECT(16,12),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N9S19859C17D1Ev,_ZThn44_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N9S19859C17D0Ev,_ZThn44_N9S19859C17D0Ev),
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C17D1Ev,_ZTv0_n12_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C17D0Ev,_ZTv0_n12_N9S19859C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S19859C17[];
extern void _ZN9S19859C18D1Ev();
extern void _ZN9S19859C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C18__9S19859C17[] = {
  ABISELECT(104,56),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&_ZN9S19859C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C18D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev)();
extern void ABISELECT(_ZThn32_N9S19859C18D1Ev,_ZThn16_N9S19859C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev)();
extern void ABISELECT(_ZThn32_N9S19859C18D0Ev,_ZThn16_N9S19859C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C18__9S19859C17[] = {
  ABISELECT(-32,-16),
  ABISELECT(72,40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev)();
extern void ABISELECT(_ZThn104_N9S19859C18D1Ev,_ZThn56_N9S19859C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev)();
extern void ABISELECT(_ZThn104_N9S19859C18D0Ev,_ZThn56_N9S19859C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19859C18__9S19859C17[] = {
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C8__9S19859C17[] = {
  ABISELECT(16,8),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C8__9S19859C17[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S19859C7D1Ev,_ZThn48_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn88_N8S19859C7D0Ev,_ZThn48_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C8__9S19859C17[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S19859C8D1Ev,_ZThn48_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S19859C8D0Ev,_ZThn48_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C8__9S19859C17[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8__9S19859C17[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C19D1Ev,_ZTv0_n16_N9S19859C19D1Ev)();
extern void _ZN9S19859C19D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C19D0Ev,_ZTv0_n16_N9S19859C19D0Ev)();
extern void _ZN9S19859C19D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C19__9S19859C17[] = {
  0,
  0,
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C19D1Ev,_ZTv0_n16_N9S19859C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C19D0Ev,_ZTv0_n16_N9S19859C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev)();
extern void ABISELECT(_ZThn72_N9S19859C19D1Ev,_ZThn40_N9S19859C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev)();
extern void ABISELECT(_ZThn72_N9S19859C19D0Ev,_ZThn40_N9S19859C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C19__9S19859C17[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19859C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev),
};
extern void _ZN8S19859C4D1Ev();
extern void _ZN8S19859C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C4__9S19859C17[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&_ZN8S19859C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C4D0Ev,
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C58S19859C4__A1__9S19859C17[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S19859C5D1Ev,_ZThn36_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S19859C5D0Ev,_ZThn36_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C58S19859C4__A1__9S19859C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C4__A1__9S19859C17[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S19859C7D1Ev,_ZThn24_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S19859C7D0Ev,_ZThn24_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C4__A1__9S19859C17[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C4__A1__9S19859C17[] = {
  ABISELECT(-40,-20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C4__A2__9S19859C17[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C7D1Ev,_ZThn20_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C7D0Ev,_ZThn20_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C4__A2__9S19859C17[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn20_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn20_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C4__A1__9S19859C17[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C4__A1__9S19859C17[] = {
  ABISELECT(40,20),
  ABISELECT(72,40),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S19859C4D1Ev,_ZThn36_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S19859C4D0Ev,_ZThn36_N8S19859C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C4__9S19859C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__8S19859C4__9S19859C17[] = {
  ABISELECT(40,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C4__9S19859C17[] = {
  ABISELECT(-40,-20),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C4__9S19859C17[] = {
  ABISELECT(8,4),
  ABISELECT(72,40),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A__9S19859C17[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C5D1Ev,_ZThn12_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C5D0Ev,_ZThn12_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__A__9S19859C17[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C17[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S19859C5D1Ev,_ZThn40_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn72_N8S19859C5D0Ev,_ZThn40_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__9S19859C17[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
static  VTT_ENTRY vtt_S19859C17[] = {
  {&(_ZTV9S19859C17[4]),  4,50},
  {&(_tg__ZTV9S19859C18__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C5__9S19859C18__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19859C18__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C8__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C8__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C8__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C8__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C8__9S19859C17[4]),  4,6},
  {&(_tg__ZTV9S19859C19__9S19859C17[5]),  5,7},
  {&(_tg__ZTV9S19859C19__9S19859C17[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C19__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C4__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C58S19859C4__A1__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C58S19859C4__A1__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C78S19859C4__A1__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C4__A1__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C4__A1__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C4__A2__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C4__A2__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C4__A1__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C4__A1__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S19859C4__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C7__8S19859C4__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C4__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A1__8S19859C4__9S19859C17[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__A__9S19859C17[3]),  3,5},
  {&(_ZTV9S19859C17[17]),  17,50},
  {&(_ZTV9S19859C17[48]),  48,50},
  {&(_ZTV9S19859C17[10]),  10,50},
  {&(_ZTV9S19859C17[17]),  17,50},
  {&(_ZTV9S19859C17[23]),  23,50},
  {&(_ZTV9S19859C17[32]),  32,50},
  {&(_ZTV9S19859C17[38]),  38,50},
  {&(_ZTV9S19859C17[43]),  43,50},
  {&(_tg__ZTV8S19859C5__9S19859C17[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__9S19859C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19859C17[];
extern  VTBL_ENTRY _ZTV9S19859C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C17[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C4D0Ev,_ZThn36_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C4D1Ev,_ZThn36_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19859C5D0Ev,_ZThn40_N8S19859C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C5D0Ev,_ZThn12_N8S19859C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C5D0Ev,_ZThn36_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19859C5D1Ev,_ZThn40_N8S19859C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C5D1Ev,_ZThn12_N8S19859C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19859C5D1Ev,_ZThn36_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19859C19D0Ev,_ZThn40_N9S19859C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19859C19D1Ev,_ZThn40_N9S19859C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C19D0Ev,_ZTv0_n16_N9S19859C19D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C19D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C19D1Ev,_ZTv0_n16_N9S19859C19D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C19D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D0Ev,_ZThn20_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19859C8D0Ev,_ZThn48_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C8D1Ev,_ZThn20_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19859C8D1Ev,_ZThn48_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C7D0Ev,_ZThn20_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19859C7D0Ev,_ZThn24_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19859C7D0Ev,_ZThn48_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C7D1Ev,_ZThn20_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19859C7D1Ev,_ZThn24_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19859C7D1Ev,_ZThn48_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19859C18D0Ev,_ZThn56_N9S19859C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19859C18D1Ev,_ZThn56_N9S19859C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C18D0Ev,_ZThn16_N9S19859C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C18D1Ev,_ZThn16_N9S19859C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C17D0Ev,_ZTv0_n12_N9S19859C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19859C17D0Ev,_ZThn56_N9S19859C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C17D1Ev,_ZTv0_n12_N9S19859C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19859C17D1Ev,_ZThn56_N9S19859C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C17D0Ev,_ZTv0_n16_N9S19859C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C17D0Ev,_ZThn16_N9S19859C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C17D1Ev,_ZTv0_n16_N9S19859C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C17D1Ev,_ZThn16_N9S19859C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C17 = {  "S19859C17", // class name
  bases_S19859C17, 14,
  &(vtc_S19859C17[0]), // expected_vtbl_contents
  &(vtt_S19859C17[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI9S19859C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19859C17),50, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19859C17),38, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19859C1  : virtual S2265C38 , virtual S19859C3 , virtual S19859C13 , S19859C14 , virtual S19859C17 {
  virtual  ~S19859C1(); // _ZN8S19859C1D2Ev
  S19859C1(); // tgen
};
//SIG(1 S19859C1) C1{ VBC2{ m} VBC3{ BC4{ BC5{ VBC6{ vd m Fs} vd} BC6 BC7{ VBC6} BC8{ VBC6 VBC5 BC7 vd Fi} vd} BC9{ BC6 VBC5 BC8 VBC7 vd Fi} VBC10{ BC11{ VBC7 vd} VBC12{ VBC9 BC7 vd} VBC8} v1} VBC13{ BC7 vd Fp} BC14{ BC7 BC15{ VBC6 VBC7 vd} BC16{ VBC6 VBC7} VBC5 VBC11 vd Fi:6} VBC17{ BC18{ BC6 VBC5 vd} BC8 BC19{ VBC5} BC4 BC5 vd FL} vd}


 S19859C1 ::~S19859C1(){ note_dtor("S19859C1", this);}
S19859C1 ::S19859C1(){ note_ctor("S19859C1", this);} // tgen

static void Test_S19859C1()
{
  extern Class_Descriptor cd_S19859C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,44)];
    init_test(&cd_S19859C1, buf);
    S19859C1 *dp, &lv = *(dp=new (buf) S19859C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,172), "sizeof(S19859C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19859C1)");
    check_base_class_offset(lv, (S2265C38*), 0, "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*)(S19859C4*)(S19859C3*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C4*)(S19859C3*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C4*)(S19859C3*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C4*)(S19859C3*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C9*)(S19859C3*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C9*)(S19859C3*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C9*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C12*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C13*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C14::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C14*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C15*)(S19859C14*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C16*)(S19859C14*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*)(S19859C4*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C4*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C8*)(S19859C4*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    check_base_class_offset(lv, (S19859C6*)(S19859C7*)(S19859C8*)(S19859C4*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C5*)(S19859C17*), ABISELECT(112,60), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C4*)(S19859C3*), ABISELECT(32,16), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C4*)(S19859C3*), ABISELECT(40,20), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C4*)(S19859C3*), ABISELECT(56,28), "S19859C1");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C4*)(S19859C3*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C9*)(S19859C3*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C9*)(S19859C3*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C9*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C9*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*), ABISELECT(248,132), "S19859C1");
    check_base_class_offset(lv, (S19859C5*)(S19859C14*), ABISELECT(248,132), "S19859C1");
    check_base_class_offset(lv, (S19859C5*)(S19859C18*)(S19859C17*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C17*), ABISELECT(248,132), "S19859C1");
    check_base_class_offset(lv, (S19859C5*)(S19859C19*)(S19859C17*), ABISELECT(248,132), "S19859C1");
    check_base_class_offset(lv, (S19859C5*)(S19859C8*)(S19859C4*)(S19859C17*), ABISELECT(248,132), "S19859C1");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C4*)(S19859C3*), ABISELECT(64,32), "S19859C1");
    check_base_class_offset(lv, (S19859C8*)(S19859C4*)(S19859C3*), ABISELECT(64,32), "S19859C1");
    check_base_class_offset(lv, (S19859C4*)(S19859C3*), ABISELECT(32,16), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C9*)(S19859C3*), ABISELECT(80,40), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C9*)(S19859C3*), ABISELECT(96,48), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C9*)(S19859C3*), ABISELECT(96,48), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C9*)(S19859C3*), ABISELECT(128,68), "S19859C1");
    check_base_class_offset(lv, (S19859C7*)(S19859C11*)(S19859C10*), ABISELECT(128,68), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C9*), ABISELECT(128,68), "S19859C1");
    check_base_class_offset(lv, (S19859C7*)(S19859C15*)(S19859C14*), ABISELECT(128,68), "S19859C1");
    check_base_class_offset(lv, (S19859C7*)(S19859C16*)(S19859C14*), ABISELECT(128,68), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C11 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C11*), ABISELECT(128,68), "S19859C1");
    /*is_ambiguous_... S19859C3::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C9*)(S19859C3*), ABISELECT(80,40), "S19859C1");
    check_base_class_offset(lv, (S19859C11*)(S19859C10*), ABISELECT(128,68), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C9*), ABISELECT(144,76), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C9*), ABISELECT(160,84), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C9 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C9*), ABISELECT(160,84), "S19859C1");
    check_base_class_offset(lv, (S19859C9*)(S19859C12*), ABISELECT(144,76), "S19859C1");
    /*is_ambiguous_... S19859C12::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C12*), ABISELECT(136,72), "S19859C1");
    check_base_class_offset(lv, (S19859C12*)(S19859C10*), ABISELECT(136,72), "S19859C1");
    /*is_ambiguous_... S19859C1::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*), ABISELECT(176,96), "S19859C1");
    /*is_ambiguous_... S19859C10::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C10*), ABISELECT(176,96), "S19859C1");
    check_base_class_offset(lv, (S19859C10*)(S19859C3*), ABISELECT(128,68), "S19859C1");
    check_base_class_offset(lv, (S19859C3*), ABISELECT(32,16), "S19859C1");
    check_base_class_offset(lv, (S19859C7*)(S19859C13*), ABISELECT(192,104), "S19859C1");
    check_base_class_offset(lv, (S19859C13*), ABISELECT(192,104), "S19859C1");
    /*is_ambiguous_... S19859C14::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C14*), 0, "S19859C1");
    check_base_class_offset(lv, (S19859C15*)(S19859C14*), ABISELECT(8,4), "S19859C1");
    check_base_class_offset(lv, (S19859C16*)(S19859C14*), ABISELECT(16,8), "S19859C1");
    check_base_class_offset(lv, (S19859C11*)(S19859C14*), ABISELECT(208,112), "S19859C1");
    check_base_class_offset(lv, (S19859C14*), 0, "S19859C1");
    /*is_ambiguous_... S19859C18::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C18*)(S19859C17*), ABISELECT(216,116), "S19859C1");
    check_base_class_offset(lv, (S19859C18*)(S19859C17*), ABISELECT(216,116), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C17*), ABISELECT(232,124), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C8 */ AMB_check_base_class_offset(lv, (S19859C8*)(S19859C17*), ABISELECT(232,124), "S19859C1");
    check_base_class_offset(lv, (S19859C19*)(S19859C17*), ABISELECT(248,132), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C4*)(S19859C17*), ABISELECT(256,136), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19859C4*)(S19859C17*), ABISELECT(264,140), "S19859C1");
    /*is_ambiguous_... S19859C4::S19859C7 */ AMB_check_base_class_offset(lv, (S19859C7*)(S19859C4*)(S19859C17*), ABISELECT(280,148), "S19859C1");
    check_base_class_offset(lv, (S19859C7*)(S19859C8*)(S19859C4*)(S19859C17*), ABISELECT(288,152), "S19859C1");
    check_base_class_offset(lv, (S19859C8*)(S19859C4*)(S19859C17*), ABISELECT(288,152), "S19859C1");
    check_base_class_offset(lv, (S19859C4*)(S19859C17*), ABISELECT(256,136), "S19859C1");
    /*is_ambiguous_... S19859C17::S19859C5 */ AMB_check_base_class_offset(lv, (S19859C5*)(S19859C17*), ABISELECT(304,160), "S19859C1");
    check_base_class_offset(lv, (S19859C17*), ABISELECT(216,116), "S19859C1");
    test_class_info(&lv, &cd_S19859C1);
    dp->~S19859C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19859C1(Test_S19859C1, "S19859C1", ABISELECT(320,172));

#else // __cplusplus

extern void _ZN8S19859C1C1Ev();
extern void _ZN8S19859C1D2Ev();
Name_Map name_map_S19859C1[] = {
  NSPAIR(_ZN8S19859C1C1Ev),
  NSPAIR(_ZN8S19859C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C4;
extern VTBL_ENTRY _ZTI8S19859C4[];
extern  VTBL_ENTRY _ZTV8S19859C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C4[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C9;
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
extern Class_Descriptor cd_S19859C11;
extern VTBL_ENTRY _ZTI9S19859C11[];
extern  VTBL_ENTRY _ZTV9S19859C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C11[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C9;
extern VTBL_ENTRY _ZTI8S19859C9[];
extern  VTBL_ENTRY _ZTV8S19859C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C9[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C12;
extern VTBL_ENTRY _ZTI9S19859C12[];
extern  VTBL_ENTRY _ZTV9S19859C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C12[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C10;
extern VTBL_ENTRY _ZTI9S19859C10[];
extern  VTBL_ENTRY _ZTV9S19859C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C10[];
extern Class_Descriptor cd_S19859C3;
extern VTBL_ENTRY _ZTI8S19859C3[];
extern  VTBL_ENTRY _ZTV8S19859C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C3[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C13;
extern VTBL_ENTRY _ZTI9S19859C13[];
extern  VTBL_ENTRY _ZTV9S19859C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C13[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C15;
extern VTBL_ENTRY _ZTI9S19859C15[];
extern  VTBL_ENTRY _ZTV9S19859C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C15[];
extern Class_Descriptor cd_S19859C16;
extern VTBL_ENTRY _ZTI9S19859C16[];
extern  VTBL_ENTRY _ZTV9S19859C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C16[];
extern Class_Descriptor cd_S19859C11;
extern VTBL_ENTRY _ZTI9S19859C11[];
extern  VTBL_ENTRY _ZTV9S19859C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C11[];
extern Class_Descriptor cd_S19859C14;
extern VTBL_ENTRY _ZTI9S19859C14[];
extern  VTBL_ENTRY _ZTV9S19859C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C14[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C18;
extern VTBL_ENTRY _ZTI9S19859C18[];
extern  VTBL_ENTRY _ZTV9S19859C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C18[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C19;
extern VTBL_ENTRY _ZTI9S19859C19[];
extern  VTBL_ENTRY _ZTV9S19859C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C19[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C7;
extern VTBL_ENTRY _ZTI8S19859C7[];
extern  VTBL_ENTRY _ZTV8S19859C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C7[];
extern Class_Descriptor cd_S19859C8;
extern VTBL_ENTRY _ZTI8S19859C8[];
extern  VTBL_ENTRY _ZTV8S19859C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C8[];
extern Class_Descriptor cd_S19859C4;
extern VTBL_ENTRY _ZTI8S19859C4[];
extern  VTBL_ENTRY _ZTV8S19859C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C4[];
extern Class_Descriptor cd_S19859C5;
extern VTBL_ENTRY _ZTI8S19859C5[];
extern  VTBL_ENTRY _ZTV8S19859C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C5[];
extern Class_Descriptor cd_S19859C17;
extern VTBL_ENTRY _ZTI9S19859C17[];
extern  VTBL_ENTRY _ZTV9S19859C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19859C17[];
static Base_Class bases_S19859C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    ABISELECT(112,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19859C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(40,20), //bcp->offset
    44, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(56,28), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19859C5,    ABISELECT(248,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(64,32), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19859C4,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(96,48), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19859C9,    ABISELECT(80,40), //bcp->offset
    59, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19859C11,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(144,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(160,84), //bcp->offset
    105, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19859C9,    ABISELECT(144,76), //bcp->offset
    97, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19859C12,    ABISELECT(136,72), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19859C7,    ABISELECT(176,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(176,96), //bcp->offset
    111, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19859C10,    ABISELECT(128,68), //bcp->offset
    77, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19859C3,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    ABISELECT(192,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19859C13,    ABISELECT(192,104), //bcp->offset
    118, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19859C15,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19859C16,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19859C11,    ABISELECT(208,112), //bcp->offset
    124, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    122, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19859C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19859C18,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(232,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    130, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(232,124), //bcp->offset
    138, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    129, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19859C19,    ABISELECT(248,132), //bcp->offset
    144, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    134, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19859C5,    ABISELECT(256,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(264,140), //bcp->offset
    157, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(280,148), //bcp->offset
    161, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    140, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19859C7,    ABISELECT(288,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    143, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S19859C8,    ABISELECT(288,152), //bcp->offset
    166, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    142, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19859C4,    ABISELECT(256,136), //bcp->offset
    151, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19859C5,    ABISELECT(304,160), //bcp->offset
    172, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    151, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S19859C17,    ABISELECT(216,116), //bcp->offset
    131, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19859C1[];
extern void _ZN8S19859C1D1Ev();
extern void _ZN8S19859C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19859C1D1Ev,_ZThn4_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19859C1D0Ev,_ZThn4_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C1D1Ev,_ZThn8_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C1D0Ev,_ZThn8_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19859C1D1Ev,_ZTv0_n40_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C1D1Ev,_ZThn16_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19859C1D0Ev,_ZTv0_n40_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C1D0Ev,_ZThn16_N8S19859C1D0Ev)() __attribute__((weak));
extern void _ZN8S19859C32v1Ev();
extern void ABISELECT(_ZTvn8_n80_N8S19859C1D1Ev,_ZTvn4_n40_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn8_n80_N8S19859C1D0Ev,_ZTvn4_n40_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn24_n80_N8S19859C1D1Ev,_ZTvn12_n40_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N8S19859C1D0Ev,_ZTvn12_n40_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn32_n80_N8S19859C1D1Ev,_ZTvn16_n40_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn32_n80_N8S19859C1D0Ev,_ZTvn16_n40_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn48_n80_N8S19859C1D1Ev,_ZTvn24_n40_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn48_n80_N8S19859C1D0Ev,_ZTvn24_n40_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn64_n80_N8S19859C1D1Ev,_ZTvn32_n40_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn64_n80_N8S19859C1D0Ev,_ZTvn32_n40_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C1D1Ev,_ZTv0_n12_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19859C1D1Ev,_ZThn60_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C1D0Ev,_ZTv0_n12_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19859C1D0Ev,_ZThn60_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19859C1D1Ev,_ZThn68_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19859C1D0Ev,_ZThn68_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19859C1D1Ev,_ZTv0_n28_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19859C1D1Ev,_ZThn72_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19859C1D0Ev,_ZTv0_n28_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19859C1D0Ev,_ZThn72_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19859C1D1Ev,_ZTv0_n24_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19859C1D1Ev,_ZThn76_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19859C1D0Ev,_ZTv0_n24_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19859C1D0Ev,_ZThn76_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S19859C1D1Ev,_ZTvn8_n24_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19859C1D0Ev,_ZTvn8_n24_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19859C1D1Ev,_ZTv0_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S19859C1D1Ev,_ZThn96_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19859C1D0Ev,_ZTv0_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S19859C1D0Ev,_ZThn96_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19859C1D1Ev,_ZThn104_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19859C1D0Ev,_ZThn104_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S19859C1D1Ev,_ZThn112_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S19859C1D0Ev,_ZThn112_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19859C1D1Ev,_ZTv0_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S19859C1D1Ev,_ZThn116_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19859C1D0Ev,_ZTv0_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S19859C1D0Ev,_ZThn116_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S19859C1D1Ev,_ZTvn8_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S19859C1D0Ev,_ZTvn8_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19859C1D1Ev,_ZThn132_N8S19859C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19859C1D0Ev,_ZThn132_N8S19859C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n40_N8S19859C1D1Ev,_ZTvn20_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S19859C1D0Ev,_ZTvn20_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn48_n40_N8S19859C1D1Ev,_ZTvn24_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn48_n40_N8S19859C1D0Ev,_ZTvn24_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S19859C1D1Ev,_ZTvn32_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn64_n40_N8S19859C1D0Ev,_ZTvn32_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn72_n40_N8S19859C1D1Ev,_ZTvn36_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn72_n40_N8S19859C1D0Ev,_ZTvn36_n20_N8S19859C1D0Ev)();
extern void ABISELECT(_ZTvn88_n40_N8S19859C1D1Ev,_ZTvn44_n20_N8S19859C1D1Ev)();
extern void ABISELECT(_ZTvn88_n40_N8S19859C1D0Ev,_ZTvn44_n20_N8S19859C1D0Ev)();
static  VTBL_ENTRY vtc_S19859C1[] = {
  ABISELECT(216,116),
  ABISELECT(192,104),
  ABISELECT(176,96),
  ABISELECT(144,76),
  ABISELECT(136,72),
  ABISELECT(128,68),
  ABISELECT(32,16),
  0,
  ABISELECT(208,112),
  ABISELECT(248,132),
  ABISELECT(128,68),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&_ZN8S19859C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C1D0Ev,
  ABISELECT(120,64),
  ABISELECT(-8,-4),
  ABISELECT(104,56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev),
  ABISELECT(112,60),
  ABISELECT(-16,-8),
  ABISELECT(96,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev),
  0,
  ABISELECT(-32,-16),
  ABISELECT(144,80),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(216,116),
  ABISELECT(80,44),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19859C1D1Ev,_ZTv0_n40_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19859C1D0Ev,_ZTv0_n40_N8S19859C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19859C32v1Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n80_N8S19859C1D1Ev,_ZTvn4_n40_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n80_N8S19859C1D0Ev,_ZTvn4_n40_N8S19859C1D0Ev),
  ABISELECT(56,32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N8S19859C1D1Ev,_ZTvn12_n40_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N8S19859C1D0Ev,_ZTvn12_n40_N8S19859C1D0Ev),
  ABISELECT(184,100),
  ABISELECT(48,28),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N8S19859C1D1Ev,_ZTvn16_n40_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n80_N8S19859C1D0Ev,_ZTvn16_n40_N8S19859C1D0Ev),
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(168,92),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N8S19859C1D1Ev,_ZTvn24_n40_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N8S19859C1D0Ev,_ZTvn24_n40_N8S19859C1D0Ev),
  ABISELECT(152,84),
  ABISELECT(16,12),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n80_N8S19859C1D1Ev,_ZTvn32_n40_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n80_N8S19859C1D0Ev,_ZTvn32_n40_N8S19859C1D0Ev),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C1D1Ev,_ZTv0_n12_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C1D0Ev,_ZTv0_n12_N8S19859C1D0Ev),
  ABISELECT(48,28),
  ABISELECT(120,64),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-68),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev),
  ABISELECT(-136,-72),
  ABISELECT(-8,-4),
  ABISELECT(112,60),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19859C1D1Ev,_ZTv0_n28_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19859C1D0Ev,_ZTv0_n28_N8S19859C1D0Ev),
  ABISELECT(-144,-76),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(104,56),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19859C1D1Ev,_ZTv0_n24_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19859C1D0Ev,_ZTv0_n24_N8S19859C1D0Ev),
  ABISELECT(88,48),
  ABISELECT(-48,-24),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19859C1D1Ev,_ZTvn8_n24_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19859C1D0Ev,_ZTvn8_n24_N8S19859C1D0Ev),
  ABISELECT(-176,-96),
  ABISELECT(72,36),
  ABISELECT(-64,-36),
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C1D1Ev,_ZTv0_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C1D0Ev,_ZTv0_n20_N8S19859C1D0Ev),
  ABISELECT(-192,-104),
  ABISELECT(-80,-44),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev),
  ABISELECT(-80,-44),
  ABISELECT(-208,-112),
  ABISELECT(-96,-52),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev),
  ABISELECT(-216,-116),
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C1D1Ev,_ZTv0_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C1D0Ev,_ZTv0_n20_N8S19859C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(-120,-64),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19859C1D1Ev,_ZTvn8_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S19859C1D0Ev,_ZTvn8_n20_N8S19859C1D0Ev),
  0,
  ABISELECT(-248,-132),
  ABISELECT(-136,-72),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-144,-76),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19859C1D1Ev,_ZTvn20_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S19859C1D0Ev,_ZTvn20_n20_N8S19859C1D0Ev),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n40_N8S19859C1D1Ev,_ZTvn24_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n40_N8S19859C1D0Ev,_ZTvn24_n20_N8S19859C1D0Ev),
  ABISELECT(-168,-88),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S19859C1D1Ev,_ZTvn32_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n40_N8S19859C1D0Ev,_ZTvn32_n20_N8S19859C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-176,-92),
  ABISELECT(-288,-152),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n40_N8S19859C1D1Ev,_ZTvn36_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn72_n40_N8S19859C1D0Ev,_ZTvn36_n20_N8S19859C1D0Ev),
  ABISELECT(-192,-100),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI8S19859C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n40_N8S19859C1D1Ev,_ZTvn44_n20_N8S19859C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n40_N8S19859C1D0Ev,_ZTvn44_n20_N8S19859C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19859C1[];
extern void _ZN9S19859C14D1Ev();
extern void _ZN9S19859C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C14__8S19859C1[] = {
  ABISELECT(208,112),
  ABISELECT(248,132),
  ABISELECT(128,68),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&_ZN9S19859C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C14D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C79S19859C14__A8__8S19859C1[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn112_N8S19859C7D1Ev,_ZThn60_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn112_N8S19859C7D0Ev,_ZThn60_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C79S19859C14__A8__8S19859C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev)();
extern void _ZN9S19859C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev)();
extern void _ZN9S19859C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C159S19859C14__8S19859C1[] = {
  ABISELECT(120,64),
  0,
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S19859C15D1Ev,_ZThn56_N9S19859C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev)();
extern void ABISELECT(_ZThn104_N9S19859C15D0Ev,_ZThn56_N9S19859C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C159S19859C14__8S19859C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev)();
extern void ABISELECT(_ZThn120_N9S19859C15D1Ev,_ZThn64_N9S19859C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev)();
extern void ABISELECT(_ZThn120_N9S19859C15D0Ev,_ZThn64_N9S19859C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C159S19859C14__8S19859C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-16,-8),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI9S19859C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev)();
extern void _ZN9S19859C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev)();
extern void _ZN9S19859C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C169S19859C14__8S19859C1[] = {
  ABISELECT(112,60),
  0,
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19859C16D1Ev,_ZThn52_N9S19859C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19859C16D0Ev,_ZThn52_N9S19859C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C169S19859C14__8S19859C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S19859C16D1Ev,_ZThn60_N9S19859C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S19859C16D0Ev,_ZThn60_N9S19859C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C169S19859C14__8S19859C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-16,-8),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19859C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C14D1Ev,_ZTv0_n12_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S19859C14D1Ev,_ZThn60_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19859C14D0Ev,_ZTv0_n12_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S19859C14D0Ev,_ZThn60_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C14__8S19859C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C14D1Ev,_ZTv0_n12_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C14D0Ev,_ZTv0_n12_N9S19859C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C14D1Ev,_ZThn4_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C14D0Ev,_ZThn4_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C15__9S19859C14__8S19859C1[] = {
  ABISELECT(120,64),
  ABISELECT(-8,-4),
  ABISELECT(104,56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S19859C14D1Ev,_ZThn68_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S19859C14D0Ev,_ZThn68_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__9S19859C14__8S19859C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-16,-8),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C14D1Ev,_ZThn8_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C14D0Ev,_ZThn8_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C16__9S19859C14__8S19859C1[] = {
  ABISELECT(112,60),
  ABISELECT(-16,-8),
  ABISELECT(96,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn248_N9S19859C14D1Ev,_ZThn132_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn248_N9S19859C14D0Ev,_ZThn132_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C14__8S19859C1[] = {
  ABISELECT(-248,-132),
  ABISELECT(-136,-72),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S19859C14D1Ev,_ZThn112_N9S19859C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S19859C14D0Ev,_ZThn112_N9S19859C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C11__9S19859C14__8S19859C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-208,-112),
  ABISELECT(-96,-52),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI9S19859C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev),
};
extern void _ZN8S19859C3D1Ev();
extern void _ZN8S19859C3D0Ev();
extern void _ZN8S19859C32v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C3__8S19859C1[] = {
  ABISELECT(144,80),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(96,52),
  ABISELECT(96,52),
  ABISELECT(216,116),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&_ZN8S19859C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19859C32v1Ev,
};
extern void _ZN8S19859C4D1Ev();
extern void _ZN8S19859C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(216,116),
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&_ZN8S19859C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C4D0Ev,
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C58S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZThn80_N8S19859C5D1Ev,_ZThn44_N8S19859C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
extern void ABISELECT(_ZThn80_N8S19859C5D0Ev,_ZThn44_N8S19859C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C58S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19859C7D1Ev,_ZThn32_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19859C7D0Ev,_ZThn32_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(184,100),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C48S19859C3__A1__8S19859C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C7D1Ev,_ZThn28_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C7D0Ev,_ZThn28_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C48S19859C3__A1__8S19859C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C8D1Ev,_ZThn28_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C8D0Ev,_ZThn28_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn184_N8S19859C8D1Ev,_ZThn100_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn184_N8S19859C8D0Ev,_ZThn100_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(-184,-100),
  ABISELECT(-136,-72),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S19859C4D1Ev,_ZThn44_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S19859C4D0Ev,_ZThn44_N8S19859C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__8S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(56,32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(184,100),
  ABISELECT(48,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn216_N8S19859C4D1Ev,_ZThn116_N8S19859C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev)();
extern void ABISELECT(_ZThn216_N8S19859C4D0Ev,_ZThn116_N8S19859C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C48S19859C3__8S19859C1[] = {
  ABISELECT(-216,-116),
  ABISELECT(-136,-72),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev),
};
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C98S19859C3__8S19859C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(168,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C98S19859C3__A1__8S19859C1[] = {
  ABISELECT(152,84),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C98S19859C3__A2__8S19859C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C98S19859C3__A2__8S19859C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C98S19859C3__A1__8S19859C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn152_N8S19859C8D1Ev,_ZThn84_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn152_N8S19859C8D0Ev,_ZThn84_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C98S19859C3__A1__8S19859C1[] = {
  ABISELECT(-152,-84),
  ABISELECT(-136,-72),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn168_N8S19859C9D1Ev,_ZThn92_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn168_N8S19859C9D0Ev,_ZThn92_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C98S19859C3__8S19859C1[] = {
  ABISELECT(-168,-92),
  ABISELECT(-136,-72),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19859C98S19859C3__8S19859C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C98S19859C3__8S19859C1[] = {
  ABISELECT(152,84),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C9D1Ev,_ZThn28_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S19859C9D0Ev,_ZThn28_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C98S19859C3__8S19859C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C3D1Ev,_ZTv0_n12_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19859C3D1Ev,_ZThn44_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19859C3D0Ev,_ZTv0_n12_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19859C3D0Ev,_ZThn44_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C3__8S19859C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C3D1Ev,_ZTv0_n12_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C3D0Ev,_ZTv0_n12_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19859C3D1Ev,_ZThn12_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C3D0Ev,_ZThn12_N8S19859C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C4__8S19859C3__8S19859C1[] = {
  ABISELECT(56,32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C3D1Ev,_ZThn12_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C3D0Ev,_ZThn12_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZThn32_N8S19859C3D1Ev,_ZThn16_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C3D0Ev,_ZThn16_N8S19859C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C4__8S19859C3__8S19859C1[] = {
  ABISELECT(184,100),
  ABISELECT(48,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C3D1Ev,_ZThn16_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C3D0Ev,_ZThn16_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn216_N8S19859C3D1Ev,_ZThn116_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn216_N8S19859C3D0Ev,_ZThn116_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C3__8S19859C1[] = {
  ABISELECT(-216,-116),
  ABISELECT(-136,-72),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZThn48_N8S19859C3D1Ev,_ZThn24_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19859C3D0Ev,_ZThn24_N8S19859C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C9__A__8S19859C3__8S19859C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(168,92),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19859C3D1Ev,_ZThn24_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19859C3D0Ev,_ZThn24_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZThn64_N8S19859C3D1Ev,_ZThn32_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19859C3D0Ev,_ZThn32_N8S19859C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__A1__8S19859C3__8S19859C1[] = {
  ABISELECT(152,84),
  ABISELECT(16,12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19859C3D1Ev,_ZThn32_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19859C3D0Ev,_ZThn32_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S19859C3D1Ev,_ZThn52_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S19859C3D0Ev,_ZThn52_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C10__8S19859C3__8S19859C1[] = {
  ABISELECT(48,28),
  ABISELECT(120,64),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  ABISELECT(-96,-52),
  ABISELECT(-16,-8),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S19859C3D1Ev,_ZTv0_n28_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S19859C3D1Ev,_ZThn56_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19859C3D0Ev,_ZTv0_n28_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S19859C3D0Ev,_ZThn56_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C12__8S19859C3__8S19859C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-8,-4),
  ABISELECT(112,60),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19859C3D1Ev,_ZTv0_n28_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19859C3D0Ev,_ZTv0_n28_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19859C3D1Ev,_ZTv0_n24_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn112_N8S19859C3D1Ev,_ZThn60_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19859C3D0Ev,_ZTv0_n24_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn112_N8S19859C3D0Ev,_ZThn60_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C9__A1__8S19859C3__8S19859C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(104,56),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19859C3D1Ev,_ZTv0_n24_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19859C3D0Ev,_ZTv0_n24_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S19859C3D1Ev,_ZTvn8_n24_N8S19859C3D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19859C3D0Ev,_ZTvn8_n24_N8S19859C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__A2__8S19859C3__8S19859C1[] = {
  ABISELECT(88,48),
  ABISELECT(-48,-24),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19859C3D1Ev,_ZTvn8_n24_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19859C3D0Ev,_ZTvn8_n24_N8S19859C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19859C3D1Ev,_ZTv0_n20_N8S19859C3D1Ev)();
extern void ABISELECT(_ZThn144_N8S19859C3D1Ev,_ZThn80_N8S19859C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19859C3D0Ev,_ZTv0_n20_N8S19859C3D0Ev)();
extern void ABISELECT(_ZThn144_N8S19859C3D0Ev,_ZThn80_N8S19859C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C8__A3__8S19859C3__8S19859C1[] = {
  ABISELECT(-144,-80),
  ABISELECT(72,36),
  ABISELECT(-64,-36),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19859C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C3D1Ev,_ZTv0_n20_N8S19859C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19859C3D0Ev,_ZTv0_n20_N8S19859C3D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C1[] = {
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C5__A1__8S19859C1[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A3__8S19859C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C7__A3__8S19859C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev)();
extern void _ZN9S19859C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev)();
extern void _ZN9S19859C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C10__8S19859C1[] = {
  ABISELECT(48,28),
  ABISELECT(120,64),
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void _ZN9S19859C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
extern void _ZN9S19859C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C119S19859C10__8S19859C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C119S19859C10__8S19859C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C10__8S19859C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C10D1Ev,_ZTv0_n12_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C10D0Ev,_ZTv0_n12_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C10D1Ev,_ZThn4_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C10D0Ev,_ZThn4_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C12__9S19859C10__8S19859C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,60),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C10D1Ev,_ZThn8_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19859C10D0Ev,_ZThn8_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C10__8S19859C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(104,56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn120_N9S19859C10D1Ev,_ZThn64_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn120_N9S19859C10D0Ev,_ZThn64_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C10__8S19859C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-136,-72),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N9S19859C10D1Ev,_ZTvn8_n24_N9S19859C10D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C10D0Ev,_ZTvn8_n24_N9S19859C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C10__8S19859C1[] = {
  ABISELECT(88,48),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C10D1Ev,_ZTvn8_n24_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C10D0Ev,_ZTvn8_n24_N9S19859C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev)();
extern void ABISELECT(_ZThn48_N9S19859C10D1Ev,_ZThn28_N9S19859C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev)();
extern void ABISELECT(_ZThn48_N9S19859C10D0Ev,_ZThn28_N9S19859C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C8__A1__9S19859C10__8S19859C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(72,36),
  ABISELECT(-64,-36),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19859C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev),
};
extern void _ZN9S19859C12D1Ev();
extern void _ZN9S19859C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C12__8S19859C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(112,60),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&_ZN9S19859C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C12D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C79S19859C12__A5__8S19859C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C79S19859C12__A5__8S19859C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C9__9S19859C12__8S19859C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(104,56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZThn112_N9S19859C12D1Ev,_ZThn60_N9S19859C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
extern void ABISELECT(_ZThn112_N9S19859C12D0Ev,_ZThn60_N9S19859C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C12__8S19859C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19859C12__8S19859C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D1Ev,_ZTv0_n12_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C12D0Ev,_ZTv0_n12_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__9S19859C12__8S19859C1[] = {
  ABISELECT(88,48),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D1Ev,_ZTvn8_n24_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N9S19859C12D0Ev,_ZTvn8_n24_N9S19859C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__9S19859C12__8S19859C1[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19859C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev),
};
extern void _ZN8S19859C9D1Ev();
extern void _ZN8S19859C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C9__A1__8S19859C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&_ZN8S19859C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C9D0Ev,
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C9__A2__8S19859C1[] = {
  ABISELECT(88,48),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C9__A4__8S19859C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A4__8S19859C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C9__A2__8S19859C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S19859C8D1Ev,_ZThn48_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S19859C8D0Ev,_ZThn48_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C9__A2__8S19859C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-136,-72),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn104_N8S19859C9D1Ev,_ZThn56_N8S19859C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
extern void ABISELECT(_ZThn104_N8S19859C9D0Ev,_ZThn56_N8S19859C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C9__A1__8S19859C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-136,-72),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19859C9__A1__8S19859C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C9__A1__8S19859C1[] = {
  ABISELECT(88,48),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D1Ev,_ZThn8_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19859C9D0Ev,_ZThn8_N8S19859C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__A1__8S19859C9__A1__8S19859C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19859C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C8__A3__8S19859C1[] = {
  ABISELECT(72,36),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C8__A6__8S19859C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C8__A6__8S19859C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C8__A3__8S19859C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn72_N8S19859C8D1Ev,_ZThn36_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn72_N8S19859C8D0Ev,_ZThn36_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C8__A3__8S19859C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-136,-72),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void _ZN9S19859C13D1Ev();
extern void _ZN9S19859C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C13__8S19859C1[] = {
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C13[0]),
  (VTBL_ENTRY)&_ZN9S19859C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C13D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C79S19859C13__A7__8S19859C1[] = {
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C79S19859C13__A7__8S19859C1[] = {
  ABISELECT(80,44),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C13D1Ev,_ZTv0_n12_N9S19859C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C13D0Ev,_ZTv0_n12_N9S19859C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C13__8S19859C1[] = {
  ABISELECT(80,44),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI9S19859C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C13D1Ev,_ZTv0_n12_N9S19859C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C13D0Ev,_ZTv0_n12_N9S19859C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void _ZN9S19859C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
extern void _ZN9S19859C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C11__A1__8S19859C1[] = {
  ABISELECT(-80,-44),
  0,
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__9S19859C11__A1__8S19859C1[] = {
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C11__A1__8S19859C1[] = {
  ABISELECT(96,52),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S19859C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D1Ev,_ZTv0_n12_N9S19859C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C11D0Ev,_ZTv0_n12_N9S19859C11D0Ev),
};
extern void _ZN9S19859C17D1Ev();
extern void _ZN9S19859C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C17__8S19859C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&_ZN9S19859C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C17D0Ev,
};
extern void _ZN9S19859C18D1Ev();
extern void _ZN9S19859C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19859C189S19859C17__8S19859C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&_ZN9S19859C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19859C18D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev)();
extern void ABISELECT(_ZThn32_N9S19859C18D1Ev,_ZThn16_N9S19859C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev)();
extern void ABISELECT(_ZThn32_N9S19859C18D0Ev,_ZThn16_N9S19859C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__9S19859C189S19859C17__8S19859C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-136,-72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19859C189S19859C17__8S19859C1[] = {
  ABISELECT(104,56),
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI9S19859C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C18D1Ev,_ZTv0_n12_N9S19859C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C18D0Ev,_ZTv0_n12_N9S19859C18D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C89S19859C17__A4__8S19859C1[] = {
  ABISELECT(16,8),
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C89S19859C17__A9__8S19859C1[] = {
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C89S19859C17__A9__8S19859C1[] = {
  ABISELECT(120,64),
  ABISELECT(120,64),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C89S19859C17__A4__8S19859C1[] = {
  ABISELECT(120,64),
  ABISELECT(120,64),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C89S19859C17__A4__8S19859C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-136,-72),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C19D1Ev,_ZTv0_n16_N9S19859C19D1Ev)();
extern void _ZN9S19859C19D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C19D0Ev,_ZTv0_n16_N9S19859C19D0Ev)();
extern void _ZN9S19859C19D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C199S19859C17__8S19859C1[] = {
  0,
  0,
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19859C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C19D1Ev,_ZTv0_n16_N9S19859C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C19D0Ev,_ZTv0_n16_N9S19859C19D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S19859C199S19859C17__8S19859C1[] = {
  ABISELECT(136,72),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI9S19859C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C19D1Ev,_ZTv0_n12_N9S19859C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C19D0Ev,_ZTv0_n12_N9S19859C19D0Ev),
};
extern void _ZN8S19859C4D1Ev();
extern void _ZN8S19859C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C49S19859C17__A1__8S19859C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-144,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&_ZN8S19859C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C4D0Ev,
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C58S19859C49S19859C17__A2__8S19859C1[] = {
  ABISELECT(-144,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C58S19859C49S19859C17__A2__8S19859C1[] = {
  ABISELECT(144,76),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C49S19859C17__A10__8S19859C1[] = {
  ABISELECT(-168,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C49S19859C17__A10__8S19859C1[] = {
  ABISELECT(168,88),
  ABISELECT(168,88),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void _ZN8S19859C8D1Ev();
extern void _ZN8S19859C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C49S19859C17__A5__8S19859C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-176,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&_ZN8S19859C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C8D0Ev,
};
extern void _ZN8S19859C7D1Ev();
extern void _ZN8S19859C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C88S19859C49S19859C17__A11__8S19859C1[] = {
  ABISELECT(-176,-92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&_ZN8S19859C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C78S19859C88S19859C49S19859C17__A11__8S19859C1[] = {
  ABISELECT(176,92),
  ABISELECT(176,92),
  (VTBL_ENTRY)&(_ZTI8S19859C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C88S19859C49S19859C17__A5__8S19859C1[] = {
  ABISELECT(176,92),
  ABISELECT(176,92),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__8S19859C88S19859C49S19859C17__A5__8S19859C1[] = {
  ABISELECT(40,20),
  ABISELECT(-136,-72),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19859C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C49S19859C17__A1__8S19859C1[] = {
  ABISELECT(144,76),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C7__8S19859C49S19859C17__A1__8S19859C1[] = {
  ABISELECT(-168,-88),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D1Ev,_ZThn12_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19859C4D0Ev,_ZThn12_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__8S19859C49S19859C17__A1__8S19859C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-176,-92),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D1Ev,_ZThn16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S19859C4D0Ev,_ZThn16_N8S19859C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A1__8S19859C49S19859C17__A1__8S19859C1[] = {
  ABISELECT(8,4),
  ABISELECT(-136,-72),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19859C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev),
};
extern void _ZN8S19859C5D1Ev();
extern void _ZN8S19859C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19859C59S19859C17__A3__8S19859C1[] = {
  ABISELECT(-192,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&_ZN8S19859C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19859C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19859C59S19859C17__A3__8S19859C1[] = {
  ABISELECT(192,100),
  ABISELECT(192,100),
  (VTBL_ENTRY)&(_ZTI8S19859C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19859C17D1Ev,_ZTv0_n16_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S19859C17D1Ev,_ZThn16_N9S19859C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19859C17D0Ev,_ZTv0_n16_N9S19859C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S19859C17D0Ev,_ZThn16_N9S19859C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19859C19__9S19859C17__8S19859C1[] = {
  0,
  ABISELECT(-32,-16),
  ABISELECT(-136,-72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C17D1Ev,_ZTv0_n16_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19859C17D0Ev,_ZTv0_n16_N9S19859C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19859C17D1Ev,_ZTv0_n12_N9S19859C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19859C17D0Ev,_ZTv0_n12_N9S19859C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19859C17__8S19859C1[] = {
  ABISELECT(104,56),
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C17D1Ev,_ZTv0_n12_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19859C17D0Ev,_ZTv0_n12_N9S19859C17D0Ev),
};
extern void ABISELECT(_ZThn16_N9S19859C17D1Ev,_ZThn8_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19859C17D0Ev,_ZThn8_N9S19859C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C8__9S19859C17__8S19859C1[] = {
  ABISELECT(16,8),
  ABISELECT(-120,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19859C17D1Ev,_ZThn8_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19859C17D0Ev,_ZThn8_N9S19859C17D0Ev),
};
extern void ABISELECT(_ZThn40_N9S19859C17D1Ev,_ZThn20_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19859C17D0Ev,_ZThn20_N9S19859C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C4__9S19859C17__8S19859C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-144,-76),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19859C17D1Ev,_ZThn20_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N9S19859C17D0Ev,_ZThn20_N9S19859C17D0Ev),
};
extern void ABISELECT(_ZThn64_N9S19859C17D1Ev,_ZThn32_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn64_N9S19859C17D0Ev,_ZThn32_N9S19859C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C78S19859C4__A1__9S19859C17__8S19859C1[] = {
  ABISELECT(-168,-88),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19859C17D1Ev,_ZThn32_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19859C17D0Ev,_ZThn32_N9S19859C17D0Ev),
};
extern void ABISELECT(_ZThn72_N9S19859C17D1Ev,_ZThn36_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn72_N9S19859C17D0Ev,_ZThn36_N9S19859C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C88S19859C4__A1__9S19859C17__8S19859C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-176,-92),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19859C17D1Ev,_ZThn36_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N9S19859C17D0Ev,_ZThn36_N9S19859C17D0Ev),
};
extern void ABISELECT(_ZThn88_N9S19859C17D1Ev,_ZThn44_N9S19859C17D1Ev)();
extern void ABISELECT(_ZThn88_N9S19859C17D0Ev,_ZThn44_N9S19859C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C5__A__9S19859C17__8S19859C1[] = {
  ABISELECT(-192,-100),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S19859C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N9S19859C17D1Ev,_ZThn44_N9S19859C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N9S19859C17D0Ev,_ZThn44_N9S19859C17D0Ev),
};
static  VTT_ENTRY vtt_S19859C1[] = {
  {&(_ZTV8S19859C1[14]),  14,177},
  {&(_tg__ZTV9S19859C14__8S19859C1[6]),  6,8},
  {&(_tg__ZTV8S19859C79S19859C14__A8__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C79S19859C14__A8__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C159S19859C14__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C159S19859C14__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C7__9S19859C159S19859C14__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C169S19859C14__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C169S19859C14__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C7__9S19859C169S19859C14__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__9S19859C14__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C15__9S19859C14__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C7__A1__9S19859C14__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C16__9S19859C14__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C5__9S19859C14__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C11__9S19859C14__8S19859C1[5]),  5,7},
  {&(_ZTV8S19859C1[41]),  41,177},
  {&(_ZTV8S19859C1[75]),  75,177},
  {&(_ZTV8S19859C1[46]),  46,177},
  {&(_ZTV8S19859C1[51]),  51,177},
  {&(_ZTV8S19859C1[57]),  57,177},
  {&(_ZTV8S19859C1[149]),  149,177},
  {&(_ZTV8S19859C1[64]),  64,177},
  {&(_ZTV8S19859C1[70]),  70,177},
  {&(_ZTV8S19859C1[86]),  86,177},
  {&(_ZTV8S19859C1[86]),  86,177},
  {&(_ZTV8S19859C1[95]),  95,177},
  {&(_ZTV8S19859C1[103]),  103,177},
  {&(_ZTV8S19859C1[109]),  109,177},
  {&(_ZTV8S19859C1[116]),  116,177},
  {&(_ZTV8S19859C1[122]),  122,177},
  {&(_ZTV8S19859C1[21]),  21,177},
  {&(_ZTV8S19859C1[28]),  28,177},
  {&(_ZTV8S19859C1[129]),  129,177},
  {&(_ZTV8S19859C1[136]),  136,177},
  {&(_ZTV8S19859C1[142]),  142,177},
  {&(_ZTV8S19859C1[149]),  149,177},
  {&(_ZTV8S19859C1[155]),  155,177},
  {&(_ZTV8S19859C1[159]),  159,177},
  {&(_ZTV8S19859C1[164]),  164,177},
  {&(_ZTV8S19859C1[170]),  170,177},
  {&(_ZTV8S19859C1[175]),  175,177},
  {&(_tg__ZTV8S19859C3__8S19859C1[9]),  9,12},
  {&(_tg__ZTV8S19859C48S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C58S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C58S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C78S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C48S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C48S19859C3__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C48S19859C3__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C48S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C7__8S19859C48S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C48S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A1__8S19859C48S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C98S19859C3__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C98S19859C3__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C98S19859C3__A2__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C98S19859C3__A2__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C98S19859C3__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C98S19859C3__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__8S19859C98S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19859C98S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C98S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__8S19859C98S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C78S19859C4__8S19859C3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C4__8S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A1__8S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C9__A__8S19859C3__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C9__A1__8S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C10__8S19859C3__8S19859C1[9]),  9,11},
  {&(_tg__ZTV9S19859C10__8S19859C3__8S19859C1[9]),  9,11},
  {&(_tg__ZTV9S19859C12__8S19859C3__8S19859C1[7]),  7,9},
  {&(_tg__ZTV8S19859C9__A1__8S19859C3__8S19859C1[6]),  6,8},
  {&(_tg__ZTV8S19859C88S19859C9__A2__8S19859C3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C8__A3__8S19859C3__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C5__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C5__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C7__A3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C7__A3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C10__8S19859C1[9]),  9,11},
  {&(_tg__ZTV9S19859C119S19859C10__8S19859C1[5]),  5,7},
  {&(_tg__ZTV9S19859C119S19859C10__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C119S19859C10__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C10__8S19859C1[9]),  9,11},
  {&(_tg__ZTV8S19859C6__9S19859C10__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C12__9S19859C10__8S19859C1[7]),  7,9},
  {&(_tg__ZTV8S19859C9__9S19859C10__8S19859C1[6]),  6,8},
  {&(_tg__ZTV8S19859C5__9S19859C10__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C10__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C8__A1__9S19859C10__8S19859C1[5]),  5,7},
  {&(_tg__ZTV9S19859C12__8S19859C1[6]),  6,8},
  {&(_tg__ZTV8S19859C79S19859C12__A5__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C79S19859C12__A5__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C9__9S19859C12__8S19859C1[6]),  6,8},
  {&(_tg__ZTV8S19859C5__9S19859C12__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19859C12__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C9__9S19859C12__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__9S19859C12__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C9__A1__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C88S19859C9__A2__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C9__A4__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C9__A4__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C9__A2__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C9__A2__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__8S19859C9__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19859C9__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C9__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C7__A1__8S19859C9__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C8__A3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C8__A6__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C8__A6__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C8__A3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C8__A3__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C13__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C79S19859C13__A7__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C79S19859C13__A7__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__9S19859C13__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C11__A1__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C7__9S19859C11__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__9S19859C11__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C17__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C189S19859C17__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__9S19859C189S19859C17__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19859C189S19859C17__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C89S19859C17__A4__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C89S19859C17__A9__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C89S19859C17__A9__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C89S19859C17__A4__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C89S19859C17__A4__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C199S19859C17__8S19859C1[5]),  5,7},
  {&(_tg__ZTV9S19859C199S19859C17__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S19859C199S19859C17__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C49S19859C17__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C58S19859C49S19859C17__A2__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C58S19859C49S19859C17__A2__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C78S19859C49S19859C17__A10__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C49S19859C17__A10__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C49S19859C17__A5__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C88S19859C49S19859C17__A11__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C78S19859C88S19859C49S19859C17__A11__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C88S19859C49S19859C17__A5__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C5__8S19859C88S19859C49S19859C17__A5__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S19859C49S19859C17__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C7__8S19859C49S19859C17__A1__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C8__8S19859C49S19859C17__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A1__8S19859C49S19859C17__A1__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C59S19859C17__A3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19859C59S19859C17__A3__8S19859C1[3]),  3,5},
  {&(_tg__ZTV9S19859C19__9S19859C17__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__A1__9S19859C17__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C8__9S19859C17__8S19859C1[4]),  4,6},
  {&(_tg__ZTV9S19859C19__9S19859C17__8S19859C1[5]),  5,7},
  {&(_tg__ZTV8S19859C4__9S19859C17__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C78S19859C4__A1__9S19859C17__8S19859C1[3]),  3,5},
  {&(_tg__ZTV8S19859C88S19859C4__A1__9S19859C17__8S19859C1[4]),  4,6},
  {&(_tg__ZTV8S19859C5__A__9S19859C17__8S19859C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19859C1[];
extern  VTBL_ENTRY _ZTV8S19859C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19859C1[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C17D0Ev,_ZTv0_n16_N9S19859C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C17D0Ev,_ZThn16_N9S19859C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C17D1Ev,_ZTv0_n16_N9S19859C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C17D1Ev,_ZThn16_N9S19859C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C19D0Ev,_ZTv0_n16_N9S19859C19D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C19D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C19D1Ev,_ZTv0_n16_N9S19859C19D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C19D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C18D0Ev,_ZTv0_n16_N9S19859C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C18D0Ev,_ZThn16_N9S19859C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C18D1Ev,_ZTv0_n16_N9S19859C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S19859C18D1Ev,_ZThn16_N9S19859C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C12D0Ev,_ZTv0_n16_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19859C12D0Ev,_ZThn60_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C12D1Ev,_ZTv0_n16_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19859C12D1Ev,_ZThn60_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D0Ev,_ZTv0_n24_N9S19859C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D0Ev,_ZThn4_N9S19859C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C12D1Ev,_ZTv0_n24_N9S19859C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C12D1Ev,_ZThn4_N9S19859C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19859C10D0Ev,_ZTv0_n20_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C10D0Ev,_ZThn28_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19859C10D1Ev,_ZTv0_n20_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19859C10D1Ev,_ZThn28_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C10D0Ev,_ZTv0_n24_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C10D0Ev,_ZThn8_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19859C10D1Ev,_ZTv0_n24_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C10D1Ev,_ZThn8_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19859C10D0Ev,_ZTv0_n28_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C10D0Ev,_ZThn4_N9S19859C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19859C10D1Ev,_ZTv0_n28_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C10D1Ev,_ZThn4_N9S19859C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D0Ev,_ZTv0_n16_N9S19859C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D0Ev,
  (VTBL_ENTRY)_ZN9S19859C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C11D1Ev,_ZTv0_n16_N9S19859C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S19859C11D1Ev,
  (VTBL_ENTRY)_ZN9S19859C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C10D0Ev,_ZTv0_n16_N9S19859C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19859C10D0Ev,_ZThn64_N9S19859C10D0Ev),
  (VTBL_ENTRY)_ZN9S19859C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C10D1Ev,_ZTv0_n16_N9S19859C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19859C10D1Ev,_ZThn64_N9S19859C10D1Ev),
  (VTBL_ENTRY)_ZN9S19859C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19859C3D0Ev,_ZTv0_n20_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19859C3D0Ev,_ZThn80_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19859C3D1Ev,_ZTv0_n20_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19859C3D1Ev,_ZThn80_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19859C3D0Ev,_ZTv0_n24_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C3D0Ev,_ZThn60_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19859C3D1Ev,_ZTv0_n24_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C3D1Ev,_ZThn60_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19859C3D0Ev,_ZTv0_n28_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19859C3D0Ev,_ZThn56_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19859C3D1Ev,_ZTv0_n28_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19859C3D1Ev,_ZThn56_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C3D0Ev,_ZTv0_n16_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19859C3D0Ev,_ZThn52_N8S19859C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19859C3D0Ev,_ZThn116_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C3D1Ev,_ZTv0_n16_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19859C3D1Ev,_ZThn52_N8S19859C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19859C3D1Ev,_ZThn116_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C3D0Ev,_ZTv0_n12_N8S19859C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C3D0Ev,_ZThn44_N8S19859C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C3D1Ev,_ZTv0_n12_N8S19859C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C3D1Ev,_ZThn44_N8S19859C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D0Ev,_ZTv0_n12_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D0Ev,_ZThn20_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C9D1Ev,_ZTv0_n12_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C9D1Ev,_ZThn20_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D0Ev,_ZTv0_n16_N8S19859C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19859C9D0Ev,_ZThn56_N8S19859C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C9D0Ev,_ZThn28_N8S19859C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19859C9D0Ev,_ZThn92_N8S19859C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C9D1Ev,_ZTv0_n16_N8S19859C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19859C9D1Ev,_ZThn56_N8S19859C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C9D1Ev,_ZThn28_N8S19859C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19859C9D1Ev,_ZThn92_N8S19859C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C4D0Ev,_ZTv0_n16_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19859C4D0Ev,_ZThn116_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C4D1Ev,_ZTv0_n16_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19859C4D1Ev,_ZThn116_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D0Ev,_ZTv0_n12_N8S19859C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C4D0Ev,_ZThn44_N8S19859C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C4D1Ev,_ZTv0_n12_N8S19859C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C4D1Ev,_ZThn44_N8S19859C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D0Ev,_ZTv0_n16_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn8_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19859C8D0Ev,_ZThn36_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19859C8D0Ev,_ZThn48_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19859C8D0Ev,_ZThn84_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19859C8D0Ev,_ZThn100_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C8D1Ev,_ZTv0_n16_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn8_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19859C8D1Ev,_ZThn36_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19859C8D1Ev,_ZThn48_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S19859C8D1Ev,_ZThn84_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19859C8D1Ev,_ZThn100_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D0Ev,_ZTv0_n12_N8S19859C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D0Ev,_ZThn12_N8S19859C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C8D0Ev,_ZThn28_N8S19859C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C8D1Ev,_ZTv0_n12_N8S19859C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C8D1Ev,_ZThn12_N8S19859C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C8D1Ev,_ZThn28_N8S19859C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D0Ev,_ZTv0_n12_N8S19859C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C5D0Ev,_ZThn44_N8S19859C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C5D1Ev,_ZTv0_n12_N8S19859C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19859C5D1Ev,_ZThn44_N8S19859C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C14D0Ev,_ZTv0_n16_N9S19859C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S19859C14D0Ev,_ZThn112_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19859C14D0Ev,_ZThn132_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C14D0Ev,_ZThn8_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19859C14D0Ev,_ZThn68_N9S19859C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C14D0Ev,_ZThn4_N9S19859C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C14D1Ev,_ZTv0_n16_N9S19859C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S19859C14D1Ev,_ZThn112_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19859C14D1Ev,_ZThn132_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19859C14D1Ev,_ZThn8_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S19859C14D1Ev,_ZThn68_N9S19859C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19859C14D1Ev,_ZThn4_N9S19859C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C14D0Ev,_ZTv0_n12_N9S19859C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19859C14D0Ev,_ZThn60_N9S19859C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C14D1Ev,_ZTv0_n12_N9S19859C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19859C14D1Ev,_ZThn60_N9S19859C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C16D0Ev,_ZTv0_n12_N9S19859C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19859C16D0Ev,_ZThn52_N9S19859C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C16D1Ev,_ZTv0_n12_N9S19859C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19859C16D1Ev,_ZThn52_N9S19859C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C16D0Ev,_ZTv0_n16_N9S19859C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19859C16D0Ev,_ZThn60_N9S19859C16D0Ev),
  (VTBL_ENTRY)_ZN9S19859C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C16D1Ev,_ZTv0_n16_N9S19859C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19859C16D1Ev,_ZThn60_N9S19859C16D1Ev),
  (VTBL_ENTRY)_ZN9S19859C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C15D0Ev,_ZTv0_n12_N9S19859C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19859C15D0Ev,_ZThn56_N9S19859C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19859C15D1Ev,_ZTv0_n12_N9S19859C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19859C15D1Ev,_ZThn56_N9S19859C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C15D0Ev,_ZTv0_n16_N9S19859C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19859C15D0Ev,_ZThn64_N9S19859C15D0Ev),
  (VTBL_ENTRY)_ZN9S19859C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19859C15D1Ev,_ZTv0_n16_N9S19859C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19859C15D1Ev,_ZThn64_N9S19859C15D1Ev),
  (VTBL_ENTRY)_ZN9S19859C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D0Ev,_ZTv0_n12_N8S19859C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D0Ev,_ZThn12_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C7D0Ev,_ZThn28_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C7D0Ev,_ZThn32_N8S19859C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C7D0Ev,_ZThn60_N8S19859C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C7D1Ev,_ZTv0_n12_N8S19859C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C7D1Ev,_ZThn12_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19859C7D1Ev,_ZThn28_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19859C7D1Ev,_ZThn32_N8S19859C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C7D1Ev,_ZThn60_N8S19859C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19859C1D0Ev,_ZTv0_n20_N8S19859C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19859C1D0Ev,_ZThn116_N8S19859C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19859C1D0Ev,_ZThn96_N8S19859C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19859C1D1Ev,_ZTv0_n20_N8S19859C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19859C1D1Ev,_ZThn116_N8S19859C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S19859C1D1Ev,_ZThn96_N8S19859C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19859C1D0Ev,_ZTv0_n24_N8S19859C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19859C1D0Ev,_ZThn76_N8S19859C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19859C1D1Ev,_ZTv0_n24_N8S19859C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19859C1D1Ev,_ZThn76_N8S19859C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19859C1D0Ev,_ZTv0_n28_N8S19859C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19859C1D0Ev,_ZThn72_N8S19859C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19859C1D1Ev,_ZTv0_n28_N8S19859C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19859C1D1Ev,_ZThn72_N8S19859C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C1D0Ev,_ZTv0_n12_N8S19859C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C1D0Ev,_ZThn60_N8S19859C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19859C1D1Ev,_ZTv0_n12_N8S19859C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19859C1D1Ev,_ZThn60_N8S19859C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19859C1D0Ev,_ZTv0_n40_N8S19859C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C1D0Ev,_ZThn16_N8S19859C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19859C1D1Ev,_ZTv0_n40_N8S19859C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19859C1D1Ev,_ZThn16_N8S19859C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C1D0Ev,_ZTv0_n16_N8S19859C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19859C1D0Ev,_ZThn132_N8S19859C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19859C1D0Ev,_ZThn112_N8S19859C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19859C1D0Ev,_ZThn104_N8S19859C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19859C1D0Ev,_ZThn68_N8S19859C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C1D0Ev,_ZThn8_N8S19859C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C1D0Ev,_ZThn4_N8S19859C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19859C1D1Ev,_ZTv0_n16_N8S19859C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19859C1D1Ev,_ZThn132_N8S19859C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S19859C1D1Ev,_ZThn112_N8S19859C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19859C1D1Ev,_ZThn104_N8S19859C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19859C1D1Ev,_ZThn68_N8S19859C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19859C1D1Ev,_ZThn8_N8S19859C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19859C1D1Ev,_ZThn4_N8S19859C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19859C1 = {  "S19859C1", // class name
  bases_S19859C1, 45,
  &(vtc_S19859C1[0]), // expected_vtbl_contents
  &(vtt_S19859C1[0]), // expected_vtt_contents
  ABISELECT(320,172), // object size
  NSPAIRA(_ZTI8S19859C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19859C1),177, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19859C1),160, //virtual table table var
  44, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C3_nt  {
  int s20634c3f0[5];
  void  mf20634c3(); // _ZN11S20634C3_nt9mf20634c3Ev
};
//SIG(-1 S20634C3_nt) C1{ m Fi[5]}


void  S20634C3_nt ::mf20634c3(){}

//skip512 S20634C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S20634C3_nt[];
VTBL_ENTRY *P__ZTI11S20634C3_nt = _ZTI11S20634C3_nt; 
Class_Descriptor cd_S20634C3_nt = {  "S20634C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  20, // object size
  NSPAIRA(_ZTI11S20634C3_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C2  : virtual S20634C3_nt {
  void *s20634c2f0;
  ~S20634C2(); // tgen
  S20634C2(); // tgen
};
//SIG(-1 S20634C2) C1{ VBC2{ m Fi[5]} Fp}


S20634C2 ::~S20634C2(){ note_dtor("S20634C2", this);} // tgen
S20634C2 ::S20634C2(){ note_ctor("S20634C2", this);} // tgen

static void Test_S20634C2()
{
  extern Class_Descriptor cd_S20634C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S20634C2, buf);
    S20634C2 *dp, &lv = *(dp=new (buf) S20634C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S20634C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C2)");
    check_base_class_offset(lv, (S20634C3_nt*), ABISELECT(16,8), "S20634C2");
    check_field_offset(lv, s20634c2f0, ABISELECT(8,4), "S20634C2.s20634c2f0");
    test_class_info(&lv, &cd_S20634C2);
    dp->~S20634C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C2(Test_S20634C2, "S20634C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S20634C2C1Ev();
extern void _ZN8S20634C2D1Ev();
Name_Map name_map_S20634C2[] = {
  NSPAIR(_ZN8S20634C2C1Ev),
  NSPAIR(_ZN8S20634C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
static Base_Class bases_S20634C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20634C2[];
static  VTBL_ENTRY vtc_S20634C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C2[0]),
};
extern VTBL_ENTRY _ZTV8S20634C2[];
static  VTT_ENTRY vtt_S20634C2[] = {
  {&(_ZTV8S20634C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20634C2[];
extern  VTBL_ENTRY _ZTV8S20634C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C2[];
Class_Descriptor cd_S20634C2 = {  "S20634C2", // class name
  bases_S20634C2, 1,
  &(vtc_S20634C2[0]), // expected_vtbl_contents
  &(vtt_S20634C2[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S20634C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20634C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20634C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C6  : S5217C60_nt {
  void *s20634c6f0[2];
};
//SIG(-1 S20634C6) C1{ BC2{ m Fp} Fp[2]}



static void Test_S20634C6()
{
  extern Class_Descriptor cd_S20634C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20634C6, buf);
    S20634C6 &lv = *(new (buf) S20634C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20634C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C6)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S20634C6");
    check_field_offset(lv, s20634c6f0, ABISELECT(8,4), "S20634C6.s20634c6f0");
    test_class_info(&lv, &cd_S20634C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C6(Test_S20634C6, "S20634C6", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S20634C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20634C6[];
Class_Descriptor cd_S20634C6 = {  "S20634C6", // class name
  bases_S20634C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20634C6),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C8  : virtual S5217C60_nt , virtual S20634C6 {
  virtual  ~S20634C8(); // _ZN8S20634C8D2Ev
  S20634C8(); // tgen
};
//SIG(-1 S20634C8) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S20634C8 ::~S20634C8(){ note_dtor("S20634C8", this);}
S20634C8 ::S20634C8(){ note_ctor("S20634C8", this);} // tgen

static void Test_S20634C8()
{
  extern Class_Descriptor cd_S20634C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20634C8, buf);
    S20634C8 *dp, &lv = *(dp=new (buf) S20634C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20634C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C8)");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20634C8");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(16,8), "S20634C8");
    check_base_class_offset(lv, (S20634C6*), ABISELECT(16,8), "S20634C8");
    test_class_info(&lv, &cd_S20634C8);
    dp->~S20634C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C8(Test_S20634C8, "S20634C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20634C8C1Ev();
extern void _ZN8S20634C8D2Ev();
Name_Map name_map_S20634C8[] = {
  NSPAIR(_ZN8S20634C8C1Ev),
  NSPAIR(_ZN8S20634C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
static Base_Class bases_S20634C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20634C8[];
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY vtc_S20634C8[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern VTBL_ENTRY _ZTV8S20634C8[];
static  VTT_ENTRY vtt_S20634C8[] = {
  {&(_ZTV8S20634C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
Class_Descriptor cd_S20634C8 = {  "S20634C8", // class name
  bases_S20634C8, 3,
  &(vtc_S20634C8[0]), // expected_vtbl_contents
  &(vtt_S20634C8[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20634C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20634C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20634C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C5  : virtual S20634C6 , virtual S5217C60_nt , virtual S20634C8 , virtual S2265C38 {
  int s20634c5f0[9];
  virtual  ~S20634C5(); // _ZN8S20634C5D2Ev
  S20634C5(); // tgen
};
//SIG(-1 S20634C5) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S20634C5 ::~S20634C5(){ note_dtor("S20634C5", this);}
S20634C5 ::S20634C5(){ note_ctor("S20634C5", this);} // tgen

static void Test_S20634C5()
{
  extern Class_Descriptor cd_S20634C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S20634C5, buf);
    S20634C5 *dp, &lv = *(dp=new (buf) S20634C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S20634C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C5)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(48,40), "S20634C5");
    check_base_class_offset(lv, (S20634C6*), ABISELECT(48,40), "S20634C5");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(48,40), "S20634C5");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S20634C5");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(72,52), "S20634C5");
    check_base_class_offset(lv, (S20634C8*), 0, "S20634C5");
    check_base_class_offset(lv, (S2265C38*), 0, "S20634C5");
    check_field_offset(lv, s20634c5f0, ABISELECT(8,4), "S20634C5.s20634c5f0");
    test_class_info(&lv, &cd_S20634C5);
    dp->~S20634C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C5(Test_S20634C5, "S20634C5", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S20634C5C1Ev();
extern void _ZN8S20634C5D2Ev();
Name_Map name_map_S20634C5[] = {
  NSPAIR(_ZN8S20634C5C1Ev),
  NSPAIR(_ZN8S20634C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20634C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20634C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20634C5[];
extern void _ZN8S20634C5D1Ev();
extern void _ZN8S20634C5D0Ev();
static  VTBL_ENTRY vtc_S20634C5[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&_ZN8S20634C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S20634C5[];
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C5[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
static  VTT_ENTRY vtt_S20634C5[] = {
  {&(_ZTV8S20634C5[7]),  7,9},
  {&(_ZTV8S20634C5[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
Class_Descriptor cd_S20634C5 = {  "S20634C5", // class name
  bases_S20634C5, 5,
  &(vtc_S20634C5[0]), // expected_vtbl_contents
  &(vtt_S20634C5[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S20634C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20634C5),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20634C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C12  : S5217C60_nt , S20634C6 {
};
//SIG(-1 S20634C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S20634C12()
{
  extern Class_Descriptor cd_S20634C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20634C12, buf);
    S20634C12 &lv = *(new (buf) S20634C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20634C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C12)");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S20634C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(8,4), "S20634C12");
    check_base_class_offset(lv, (S20634C6*), ABISELECT(8,4), "S20634C12");
    test_class_info(&lv, &cd_S20634C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C12(Test_S20634C12, "S20634C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
static Base_Class bases_S20634C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C12[];
Class_Descriptor cd_S20634C12 = {  "S20634C12", // class name
  bases_S20634C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20634C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C11  : virtual S5217C60_nt , S2265C38 , virtual S20634C12 , virtual S20634C8 {
  ~S20634C11(); // tgen
  S20634C11(); // tgen
};
//SIG(-1 S20634C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S20634C11 ::~S20634C11(){ note_dtor("S20634C11", this);} // tgen
S20634C11 ::S20634C11(){ note_ctor("S20634C11", this);} // tgen

static void Test_S20634C11()
{
  extern Class_Descriptor cd_S20634C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20634C11, buf);
    S20634C11 *dp, &lv = *(dp=new (buf) S20634C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20634C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C11)");
    /*is_ambiguous_... S20634C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20634C11");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(8,4), "S20634C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S20634C11");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(16,8), "S20634C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(24,12), "S20634C11");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(24,12), "S20634C11");
    check_base_class_offset(lv, (S20634C12*), ABISELECT(16,8), "S20634C11");
    /*is_ambiguous_... S20634C11::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(48,24), "S20634C11");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(48,24), "S20634C11");
    check_base_class_offset(lv, (S20634C8*), 0, "S20634C11");
    test_class_info(&lv, &cd_S20634C11);
    dp->~S20634C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C11(Test_S20634C11, "S20634C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20634C11C1Ev();
extern void _ZN9S20634C11D1Ev();
Name_Map name_map_S20634C11[] = {
  NSPAIR(_ZN9S20634C11C1Ev),
  NSPAIR(_ZN9S20634C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
static Base_Class bases_S20634C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20634C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C11[];
extern void _ZN9S20634C11D1Ev();
extern void _ZN9S20634C11D0Ev();
static  VTBL_ENTRY vtc_S20634C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&_ZN9S20634C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S20634C11[];
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
static  VTT_ENTRY vtt_S20634C11[] = {
  {&(_ZTV9S20634C11[7]),  7,9},
  {&(_ZTV9S20634C11[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
Class_Descriptor cd_S20634C11 = {  "S20634C11", // class name
  bases_S20634C11, 9,
  &(vtc_S20634C11[0]), // expected_vtbl_contents
  &(vtt_S20634C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20634C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20634C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C10  : virtual S20634C11 {
  ::S20634C8 s20634c10f0;
  ~S20634C10(); // tgen
  S20634C10(); // tgen
};
//SIG(-1 S20634C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S20634C10 ::~S20634C10(){ note_dtor("S20634C10", this);} // tgen
S20634C10 ::S20634C10(){ note_ctor("S20634C10", this);} // tgen

static void Test_S20634C10()
{
  extern Class_Descriptor cd_S20634C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20634C10, buf);
    S20634C10 *dp, &lv = *(dp=new (buf) S20634C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20634C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C10)");
    /*is_ambiguous_... S20634C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(48,24), "S20634C10");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(48,24), "S20634C10");
    check_base_class_offset(lv, (S2265C38*)(S20634C11*), 0, "S20634C10");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(56,28), "S20634C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(64,32), "S20634C10");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(64,32), "S20634C10");
    check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(56,28), "S20634C10");
    /*is_ambiguous_... S20634C10::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(88,44), "S20634C10");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(88,44), "S20634C10");
    check_base_class_offset(lv, (S20634C8*)(S20634C11*), 0, "S20634C10");
    check_base_class_offset(lv, (S20634C11*), 0, "S20634C10");
    check_field_offset(lv, s20634c10f0, ABISELECT(8,4), "S20634C10.s20634c10f0");
    test_class_info(&lv, &cd_S20634C10);
    dp->~S20634C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C10(Test_S20634C10, "S20634C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S20634C10C1Ev();
extern void _ZN9S20634C10D1Ev();
Name_Map name_map_S20634C10[] = {
  NSPAIR(_ZN9S20634C10C1Ev),
  NSPAIR(_ZN9S20634C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
static Base_Class bases_S20634C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20634C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20634C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C10[];
extern void _ZN9S20634C10D1Ev();
extern void _ZN9S20634C10D0Ev();
static  VTBL_ENTRY vtc_S20634C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&_ZN9S20634C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S20634C10[];
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__9S20634C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
static  VTT_ENTRY vtt_S20634C10[] = {
  {&(_ZTV9S20634C10[8]),  8,10},
  {&(_ZTV9S20634C10[8]),  8,10},
  {&(_ZTV9S20634C10[8]),  8,10},
  {&(_tg__ZTV9S20634C11__9S20634C10[7]),  7,9},
  {&(_tg__ZTV9S20634C11__9S20634C10[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20634C10[];
extern  VTBL_ENTRY _ZTV9S20634C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C10[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C10 = {  "S20634C10", // class name
  bases_S20634C10, 10,
  &(vtc_S20634C10[0]), // expected_vtbl_contents
  &(vtt_S20634C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S20634C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20634C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C13  : S2265C38 , virtual S20634C6 , virtual S20634C8 , virtual S20634C12 , virtual S20634C5 {
  __tsi64 s20634c13f0;
  virtual  ~S20634C13(); // _ZN9S20634C13D2Ev
  S20634C13(); // tgen
};
//SIG(-1 S20634C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S20634C13 ::~S20634C13(){ note_dtor("S20634C13", this);}
S20634C13 ::S20634C13(){ note_ctor("S20634C13", this);} // tgen

static void Test_S20634C13()
{
  extern Class_Descriptor cd_S20634C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S20634C13, buf);
    S20634C13 *dp, &lv = *(dp=new (buf) S20634C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S20634C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C13)");
    /*is_ambiguous_... S20634C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20634C13");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(16,12), "S20634C13");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*), ABISELECT(16,12), "S20634C13");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(16,12), "S20634C13");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(16,12), "S20634C13");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(40,24), "S20634C13");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(40,24), "S20634C13");
    check_base_class_offset(lv, (S20634C8*), 0, "S20634C13");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), 0, "S20634C13");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(48,28), "S20634C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(56,32), "S20634C13");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(56,32), "S20634C13");
    check_base_class_offset(lv, (S20634C12*), ABISELECT(48,28), "S20634C13");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(124,84), "S20634C13");
    check_base_class_offset(lv, (S20634C5*), ABISELECT(80,44), "S20634C13");
    check_field_offset(lv, s20634c13f0, ABISELECT(8,4), "S20634C13.s20634c13f0");
    test_class_info(&lv, &cd_S20634C13);
    dp->~S20634C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C13(Test_S20634C13, "S20634C13", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN9S20634C13C1Ev();
extern void _ZN9S20634C13D2Ev();
Name_Map name_map_S20634C13[] = {
  NSPAIR(_ZN9S20634C13C1Ev),
  NSPAIR(_ZN9S20634C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
static Base_Class bases_S20634C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20634C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C13[];
extern void _ZN9S20634C13D1Ev();
extern void _ZN9S20634C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S20634C13D1Ev,_ZThn44_N9S20634C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S20634C13D0Ev,_ZThn44_N9S20634C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C13[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&_ZN9S20634C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20634C13[];
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C13[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C5__9S20634C13[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
static  VTT_ENTRY vtt_S20634C13[] = {
  {&(_ZTV9S20634C13[9]),  9,20},
  {&(_ZTV9S20634C13[9]),  9,20},
  {&(_ZTV9S20634C13[18]),  18,20},
  {&(_tg__ZTV8S20634C8__9S20634C13[4]),  4,6},
  {&(_tg__ZTV8S20634C5__9S20634C13[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C5__9S20634C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20634C13[];
extern  VTBL_ENTRY _ZTV9S20634C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C13[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20634C13D0Ev,_ZThn44_N9S20634C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20634C13D1Ev,_ZThn44_N9S20634C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C13 = {  "S20634C13", // class name
  bases_S20634C13, 11,
  &(vtc_S20634C13[0]), // expected_vtbl_contents
  &(vtt_S20634C13[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI9S20634C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20634C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C17  : virtual S20634C5 , S2265C38 , virtual S2265C28 {
  void *s20634c17f0;
  ~S20634C17(); // tgen
  S20634C17(); // tgen
};
//SIG(-1 S20634C17) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S20634C17 ::~S20634C17(){ note_dtor("S20634C17", this);} // tgen
S20634C17 ::S20634C17(){ note_ctor("S20634C17", this);} // tgen

static void Test_S20634C17()
{
  extern Class_Descriptor cd_S20634C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S20634C17, buf);
    S20634C17 *dp, &lv = *(dp=new (buf) S20634C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S20634C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C17)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(64,48), "S20634C17");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(64,48), "S20634C17");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(64,48), "S20634C17");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(88,60), "S20634C17");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(88,60), "S20634C17");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), 0, "S20634C17");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(96,64), "S20634C17");
    check_base_class_offset(lv, (S20634C5*), ABISELECT(16,8), "S20634C17");
    /*is_ambiguous_... S20634C17::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20634C17");
    check_base_class_offset(lv, (S2265C28*), 0, "S20634C17");
    check_field_offset(lv, s20634c17f0, ABISELECT(8,4), "S20634C17.s20634c17f0");
    test_class_info(&lv, &cd_S20634C17);
    dp->~S20634C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C17(Test_S20634C17, "S20634C17", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN9S20634C17C1Ev();
extern void _ZN9S20634C17D1Ev();
Name_Map name_map_S20634C17[] = {
  NSPAIR(_ZN9S20634C17C1Ev),
  NSPAIR(_ZN9S20634C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20634C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20634C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C17[];
extern void _ZN9S20634C17D1Ev();
extern void _ZN9S20634C17D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C17[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&_ZN9S20634C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C17D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20634C17[];
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C5__9S20634C17[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C17[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
static  VTT_ENTRY vtt_S20634C17[] = {
  {&(_ZTV9S20634C17[9]),  9,20},
  {&(_ZTV9S20634C17[18]),  18,20},
  {&(_ZTV9S20634C17[9]),  9,20},
  {&(_tg__ZTV8S20634C5__9S20634C17[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C5__9S20634C17[5]),  5,7},
  {&(_tg__ZTV8S20634C8__9S20634C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C17 = {  "S20634C17", // class name
  bases_S20634C17, 8,
  &(vtc_S20634C17[0]), // expected_vtbl_contents
  &(vtt_S20634C17[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI9S20634C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20634C17),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C17),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C19  : S20634C12 , S20634C6 , virtual S2265C38 {
  virtual  ~S20634C19(); // _ZN9S20634C19D2Ev
  S20634C19(); // tgen
};
//SIG(-1 S20634C19) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S20634C19 ::~S20634C19(){ note_dtor("S20634C19", this);}
S20634C19 ::S20634C19(){ note_ctor("S20634C19", this);} // tgen

static void Test_S20634C19()
{
  extern Class_Descriptor cd_S20634C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20634C19, buf);
    S20634C19 *dp, &lv = *(dp=new (buf) S20634C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20634C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C19)");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(8,4), "S20634C19");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(16,8), "S20634C19");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(16,8), "S20634C19");
    check_base_class_offset(lv, (S20634C12*), ABISELECT(8,4), "S20634C19");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(40,20), "S20634C19");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*), ABISELECT(40,20), "S20634C19");
    check_base_class_offset(lv, (S2265C38*), 0, "S20634C19");
    test_class_info(&lv, &cd_S20634C19);
    dp->~S20634C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C19(Test_S20634C19, "S20634C19", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20634C19C1Ev();
extern void _ZN9S20634C19D2Ev();
Name_Map name_map_S20634C19[] = {
  NSPAIR(_ZN9S20634C19C1Ev),
  NSPAIR(_ZN9S20634C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20634C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C19[];
extern void _ZN9S20634C19D1Ev();
extern void _ZN9S20634C19D0Ev();
static  VTBL_ENTRY vtc_S20634C19[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C19[0]),
  (VTBL_ENTRY)&_ZN9S20634C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C19D0Ev,
};
extern VTBL_ENTRY _ZTV9S20634C19[];
static  VTT_ENTRY vtt_S20634C19[] = {
  {&(_ZTV9S20634C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20634C19[];
extern  VTBL_ENTRY _ZTV9S20634C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C19[];
Class_Descriptor cd_S20634C19 = {  "S20634C19", // class name
  bases_S20634C19, 7,
  &(vtc_S20634C19[0]), // expected_vtbl_contents
  &(vtt_S20634C19[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20634C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20634C19),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C19),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C16  : virtual S20634C17 , virtual S20634C10 , virtual S20634C13 , virtual S20634C19 , S20634C11 {
  virtual  ~S20634C16(); // _ZN9S20634C16D2Ev
  S20634C16(); // tgen
};
//SIG(-1 S20634C16) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd FL} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S20634C16 ::~S20634C16(){ note_dtor("S20634C16", this);}
S20634C16 ::S20634C16(){ note_ctor("S20634C16", this);} // tgen

static void Test_S20634C16()
{
  extern Class_Descriptor cd_S20634C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S20634C16, buf);
    S20634C16 *dp, &lv = *(dp=new (buf) S20634C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S20634C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C16)");
    /*is_ambiguous_... S20634C16::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(72,52), "S20634C16");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(72,52), "S20634C16");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(72,52), "S20634C16");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C13*), ABISELECT(72,52), "S20634C16");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(96,64), "S20634C16");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(96,64), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(96,64), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(96,64), "S20634C16");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), ABISELECT(8,4), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*), ABISELECT(8,4), "S20634C16");
    check_base_class_offset(lv, (S20634C8*)(S20634C13*), ABISELECT(8,4), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*), ABISELECT(8,4), "S20634C16");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(104,68), "S20634C16");
    check_base_class_offset(lv, (S2265C38*)(S20634C19*), ABISELECT(104,68), "S20634C16");
    check_base_class_offset(lv, (S20634C5*)(S20634C17*), ABISELECT(24,12), "S20634C16");
    check_base_class_offset(lv, (S20634C5*)(S20634C13*), ABISELECT(24,12), "S20634C16");
    /*is_ambiguous_... S20634C17::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*), ABISELECT(8,4), "S20634C16");
    check_base_class_offset(lv, (S2265C28*)(S20634C17*), 0, "S20634C16");
    check_base_class_offset(lv, (S20634C17*), ABISELECT(8,4), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*), ABISELECT(112,72), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(160,96), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(168,100), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C12 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(168,100), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(160,96), "S20634C16");
    check_base_class_offset(lv, (S20634C12*)(S20634C13*), ABISELECT(160,96), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(160,96), "S20634C16");
    check_base_class_offset(lv, (S20634C11*)(S20634C10*), ABISELECT(112,72), "S20634C16");
    check_base_class_offset(lv, (S20634C10*), ABISELECT(112,72), "S20634C16");
    /*is_ambiguous_... S20634C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C13*), ABISELECT(192,112), "S20634C16");
    check_base_class_offset(lv, (S20634C13*), ABISELECT(192,112), "S20634C16");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*)(S20634C19*), ABISELECT(216,128), "S20634C16");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(224,132), "S20634C16");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(224,132), "S20634C16");
    check_base_class_offset(lv, (S20634C12*)(S20634C19*), ABISELECT(216,128), "S20634C16");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C19*), ABISELECT(248,144), "S20634C16");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C19*), ABISELECT(248,144), "S20634C16");
    check_base_class_offset(lv, (S20634C19*), ABISELECT(208,124), "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*), 0, "S20634C16");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C11*), 0, "S20634C16");
    test_class_info(&lv, &cd_S20634C16);
    dp->~S20634C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C16(Test_S20634C16, "S20634C16", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN9S20634C16C1Ev();
extern void _ZN9S20634C16D2Ev();
Name_Map name_map_S20634C16[] = {
  NSPAIR(_ZN9S20634C16C1Ev),
  NSPAIR(_ZN9S20634C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C10;
extern VTBL_ENTRY _ZTI9S20634C10[];
extern  VTBL_ENTRY _ZTV9S20634C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C13;
extern VTBL_ENTRY _ZTI9S20634C13[];
extern  VTBL_ENTRY _ZTV9S20634C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C19;
extern VTBL_ENTRY _ZTI9S20634C19[];
extern  VTBL_ENTRY _ZTV9S20634C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
static Base_Class bases_S20634C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20634C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20634C17,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20634C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20634C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20634C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20634C19,    ABISELECT(208,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20634C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C16[];
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void _ZN9S20634C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void _ZN9S20634C16D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20634C16D1Ev,_ZThn72_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20634C16D0Ev,_ZThn72_N9S20634C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20634C16D1Ev,_ZThn112_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20634C16D0Ev,_ZThn112_N9S20634C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C16D1Ev,_ZThn124_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C16D0Ev,_ZThn124_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C16[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20634C16[];
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__A__9S20634C16[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C11D1Ev,_ZThn4_N9S20634C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C11D0Ev,_ZThn4_N9S20634C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11__A__9S20634C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17__9S20634C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C5__9S20634C16[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C16[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void _ZN9S20634C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
extern void _ZN9S20634C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C16[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C10__9S20634C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__9S20634C16[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11__9S20634C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void _ZN9S20634C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
extern void _ZN9S20634C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C16[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C13__9S20634C16[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C13__9S20634C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void _ZN9S20634C19D1Ev();
extern void _ZN9S20634C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C16[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C19[0]),
  (VTBL_ENTRY)&_ZN9S20634C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C19D0Ev,
};
static  VTT_ENTRY vtt_S20634C16[] = {
  {&(_ZTV9S20634C16[15]),  15,64},
  {&(_tg__ZTV9S20634C11__A__9S20634C16[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11__A__9S20634C16[5]),  5,7},
  {&(_ZTV9S20634C16[26]),  26,64},
  {&(_ZTV9S20634C16[35]),  35,64},
  {&(_ZTV9S20634C16[26]),  26,64},
  {&(_ZTV9S20634C16[45]),  45,64},
  {&(_ZTV9S20634C16[45]),  45,64},
  {&(_ZTV9S20634C16[56]),  56,64},
  {&(_ZTV9S20634C16[62]),  62,64},
  {&(_tg__ZTV9S20634C17__9S20634C16[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C17__9S20634C16[7]),  7,9},
  {&(_tg__ZTV9S20634C17__9S20634C16[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C16[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C5__9S20634C16[5]),  5,7},
  {&(_tg__ZTV8S20634C8__9S20634C16[4]),  4,6},
  {&(_tg__ZTV9S20634C10__9S20634C16[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C16[8]),  8,10},
  {&(_tg__ZTV8S20634C8__9S20634C10__9S20634C16[5]),  5,7},
  {&(_tg__ZTV9S20634C11__9S20634C16[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11__9S20634C16[5]),  5,7},
  {&(_tg__ZTV9S20634C13__9S20634C16[9]),  9,11},
  {&(_tg__ZTV8S20634C8__9S20634C13__9S20634C16[5]),  5,7},
  {&(_tg__ZTV8S20634C5__9S20634C13__9S20634C16[7]),  7,9},
  {&(_tg__ZTV9S20634C19__9S20634C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20634C16[];
extern  VTBL_ENTRY _ZTV9S20634C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C16[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C11D0Ev,_ZThn4_N9S20634C11D0Ev),
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C11D1Ev,_ZThn4_N9S20634C11D1Ev),
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C16D0Ev,_ZThn124_N9S20634C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C16D1Ev,_ZThn124_N9S20634C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20634C16D0Ev,_ZThn112_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20634C16D0Ev,_ZThn72_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev),
  (VTBL_ENTRY)_ZN9S20634C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20634C16D1Ev,_ZThn112_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20634C16D1Ev,_ZThn72_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev),
  (VTBL_ENTRY)_ZN9S20634C16D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C16 = {  "S20634C16", // class name
  bases_S20634C16, 27,
  &(vtc_S20634C16[0]), // expected_vtbl_contents
  &(vtt_S20634C16[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI9S20634C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20634C16),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C16),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C15  : virtual S20634C16 , S2265C28 , S20634C17 {
  ~S20634C15(); // tgen
  S20634C15(); // tgen
};
//SIG(-1 S20634C15) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd FL} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} BC9 BC3}


S20634C15 ::~S20634C15(){ note_dtor("S20634C15", this);} // tgen
S20634C15 ::S20634C15(){ note_ctor("S20634C15", this);} // tgen

static void Test_S20634C15()
{
  extern Class_Descriptor cd_S20634C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20634C15, buf);
    S20634C15 *dp, &lv = *(dp=new (buf) S20634C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20634C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C15)");
    /*is_ambiguous_... S20634C15::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(88,60), "S20634C15");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(88,60), "S20634C15");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(88,60), "S20634C15");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C13*), ABISELECT(88,60), "S20634C15");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(112,72), "S20634C15");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(112,72), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(112,72), "S20634C15");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*)(S20634C16*), ABISELECT(112,72), "S20634C15");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), ABISELECT(24,12), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*), ABISELECT(24,12), "S20634C15");
    check_base_class_offset(lv, (S20634C8*)(S20634C13*), ABISELECT(24,12), "S20634C15");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*)(S20634C16*), ABISELECT(24,12), "S20634C15");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(120,76), "S20634C15");
    check_base_class_offset(lv, (S2265C38*)(S20634C19*), ABISELECT(120,76), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*), ABISELECT(40,20), "S20634C15");
    check_base_class_offset(lv, (S20634C5*)(S20634C13*), ABISELECT(40,20), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*), ABISELECT(40,20), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*), ABISELECT(24,12), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*), ABISELECT(120,76), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*), ABISELECT(120,76), "S20634C15");
    check_base_class_offset(lv, (S20634C17*)(S20634C16*), ABISELECT(24,12), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*), ABISELECT(128,80), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(176,104), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(184,108), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C12 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(184,108), "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(176,104), "S20634C15");
    check_base_class_offset(lv, (S20634C12*)(S20634C13*), ABISELECT(176,104), "S20634C15");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*)(S20634C16*), ABISELECT(176,104), "S20634C15");
    check_base_class_offset(lv, (S20634C11*)(S20634C10*), ABISELECT(128,80), "S20634C15");
    check_base_class_offset(lv, (S20634C10*)(S20634C16*), ABISELECT(128,80), "S20634C15");
    /*is_ambiguous_... S20634C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C13*), ABISELECT(208,120), "S20634C15");
    check_base_class_offset(lv, (S20634C13*)(S20634C16*), ABISELECT(208,120), "S20634C15");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*)(S20634C19*), ABISELECT(232,136), "S20634C15");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(240,140), "S20634C15");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(240,140), "S20634C15");
    check_base_class_offset(lv, (S20634C12*)(S20634C19*), ABISELECT(232,136), "S20634C15");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C19*), ABISELECT(264,152), "S20634C15");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C19*), ABISELECT(264,152), "S20634C15");
    check_base_class_offset(lv, (S20634C19*)(S20634C16*), ABISELECT(224,132), "S20634C15");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*)(S20634C16*), ABISELECT(16,8), "S20634C15");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C11*)(S20634C16*), ABISELECT(16,8), "S20634C15");
    check_base_class_offset(lv, (S20634C16*), ABISELECT(16,8), "S20634C15");
    /*is_ambiguous_... S20634C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*), 0, "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*), 0, "S20634C15");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C17*), 0, "S20634C15");
    test_class_info(&lv, &cd_S20634C15);
    dp->~S20634C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C15(Test_S20634C15, "S20634C15", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN9S20634C15C1Ev();
extern void _ZN9S20634C15D1Ev();
Name_Map name_map_S20634C15[] = {
  NSPAIR(_ZN9S20634C15C1Ev),
  NSPAIR(_ZN9S20634C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C10;
extern VTBL_ENTRY _ZTI9S20634C10[];
extern  VTBL_ENTRY _ZTV9S20634C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C13;
extern VTBL_ENTRY _ZTI9S20634C13[];
extern  VTBL_ENTRY _ZTV9S20634C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C19;
extern VTBL_ENTRY _ZTI9S20634C19[];
extern  VTBL_ENTRY _ZTV9S20634C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C16;
extern VTBL_ENTRY _ZTI9S20634C16[];
extern  VTBL_ENTRY _ZTV9S20634C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
static Base_Class bases_S20634C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20634C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(40,20), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20634C17,    ABISELECT(24,12), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20634C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20634C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20634C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20634C19,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20634C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20634C16,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20634C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C15[];
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void _ZN9S20634C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void _ZN9S20634C15D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C15D1Ev,_ZThn8_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C15D0Ev,_ZThn8_N9S20634C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C15D1Ev,_ZThn12_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C15D0Ev,_ZThn12_N9S20634C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S20634C15D1Ev,_ZThn20_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S20634C15D0Ev,_ZThn20_N9S20634C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20634C15D1Ev,_ZThn80_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20634C15D0Ev,_ZThn80_N9S20634C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C15D1Ev,_ZThn120_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C15D0Ev,_ZThn120_N9S20634C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn132_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn132_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C15[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(72,52),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20634C15[];
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__A__9S20634C15[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S20634C17D1Ev,_ZThn20_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S20634C17D0Ev,_ZThn20_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17__A__9S20634C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C17D1Ev,_ZThn12_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C17D0Ev,_ZThn12_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C17__A__9S20634C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void _ZN9S20634C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void _ZN9S20634C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C15[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C119S20634C16__A1__9S20634C15[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C11D1Ev,_ZThn4_N9S20634C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C11D0Ev,_ZThn4_N9S20634C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C119S20634C16__A1__9S20634C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C16__9S20634C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C16__9S20634C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20634C16D1Ev,_ZThn72_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20634C16D0Ev,_ZThn72_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C16__9S20634C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20634C16D1Ev,_ZThn112_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20634C16D0Ev,_ZThn112_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C16__9S20634C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C16D1Ev,_ZThn124_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C16D0Ev,_ZThn124_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C16__9S20634C15[] = {
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17__9S20634C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C5__9S20634C15[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C15[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void _ZN9S20634C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
extern void _ZN9S20634C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C10__9S20634C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__9S20634C15[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11__9S20634C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void _ZN9S20634C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
extern void _ZN9S20634C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C13__9S20634C15[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C13__9S20634C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void _ZN9S20634C19D1Ev();
extern void _ZN9S20634C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C15[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C19[0]),
  (VTBL_ENTRY)&_ZN9S20634C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C19D0Ev,
};
static  VTT_ENTRY vtt_S20634C15[] = {
  {&(_ZTV9S20634C15[16]),  16,82},
  {&(_tg__ZTV9S20634C17__A__9S20634C15[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C17__A__9S20634C15[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C17__A__9S20634C15[5]),  5,7},
  {&(_ZTV9S20634C15[33]),  33,82},
  {&(_ZTV9S20634C15[44]),  44,82},
  {&(_ZTV9S20634C15[53]),  53,82},
  {&(_ZTV9S20634C15[44]),  44,82},
  {&(_ZTV9S20634C15[63]),  63,82},
  {&(_ZTV9S20634C15[63]),  63,82},
  {&(_ZTV9S20634C15[74]),  74,82},
  {&(_ZTV9S20634C15[80]),  80,82},
  {&(_tg__ZTV9S20634C16__9S20634C15[15]),  15,17},
  {&(_tg__ZTV9S20634C119S20634C16__A1__9S20634C15[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C119S20634C16__A1__9S20634C15[5]),  5,7},
  {&(_tg__ZTV9S20634C17__9S20634C16__9S20634C15[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C16__9S20634C15[7]),  7,9},
  {&(_tg__ZTV9S20634C17__9S20634C16__9S20634C15[9]),  9,11},
  {&(_tg__ZTV9S20634C10__9S20634C16__9S20634C15[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C16__9S20634C15[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C16__9S20634C15[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C16__9S20634C15[4]),  4,6},
  {&(_tg__ZTV9S20634C17__9S20634C15[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C17__9S20634C15[7]),  7,9},
  {&(_tg__ZTV9S20634C17__9S20634C15[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C15[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C5__9S20634C15[5]),  5,7},
  {&(_tg__ZTV8S20634C8__9S20634C15[4]),  4,6},
  {&(_tg__ZTV9S20634C10__9S20634C15[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C15[8]),  8,10},
  {&(_tg__ZTV8S20634C8__9S20634C10__9S20634C15[5]),  5,7},
  {&(_tg__ZTV9S20634C11__9S20634C15[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11__9S20634C15[5]),  5,7},
  {&(_tg__ZTV9S20634C13__9S20634C15[9]),  9,11},
  {&(_tg__ZTV8S20634C8__9S20634C13__9S20634C15[5]),  5,7},
  {&(_tg__ZTV8S20634C5__9S20634C13__9S20634C15[7]),  7,9},
  {&(_tg__ZTV9S20634C19__9S20634C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20634C15[];
extern  VTBL_ENTRY _ZTV9S20634C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C15[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C16D0Ev,_ZThn124_N9S20634C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C16D1Ev,_ZThn124_N9S20634C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C11D0Ev,_ZThn4_N9S20634C11D0Ev),
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C11D1Ev,_ZThn4_N9S20634C11D1Ev),
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20634C16D0Ev,_ZThn112_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20634C16D0Ev,_ZThn72_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev),
  (VTBL_ENTRY)_ZN9S20634C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20634C16D1Ev,_ZThn112_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20634C16D1Ev,_ZThn72_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev),
  (VTBL_ENTRY)_ZN9S20634C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C17D0Ev,_ZThn12_N9S20634C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20634C17D0Ev,_ZThn20_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C17D1Ev,_ZThn12_N9S20634C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20634C17D1Ev,_ZThn20_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn132_N9S20634C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn132_N9S20634C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C15D0Ev,_ZThn120_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20634C15D0Ev,_ZThn80_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20634C15D0Ev,_ZThn20_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C15D0Ev,_ZThn12_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C15D0Ev,_ZThn8_N9S20634C15D0Ev),
  (VTBL_ENTRY)_ZN9S20634C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C15D1Ev,_ZThn120_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20634C15D1Ev,_ZThn80_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20634C15D1Ev,_ZThn20_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C15D1Ev,_ZThn12_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C15D1Ev,_ZThn8_N9S20634C15D1Ev),
  (VTBL_ENTRY)_ZN9S20634C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C15 = {  "S20634C15", // class name
  bases_S20634C15, 31,
  &(vtc_S20634C15[0]), // expected_vtbl_contents
  &(vtt_S20634C15[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI9S20634C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20634C15),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C15),37, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C14  : virtual S5217C60_nt , S20634C15 {
  ~S20634C14(); // tgen
  S20634C14(); // tgen
};
//SIG(-1 S20634C14) C1{ VBC2{ m Fp} BC3{ VBC4{ VBC5{ VBC6{ VBC7{ BC2 Fp[2]} VBC2 VBC8{ VBC2 VBC7 vd} VBC9{ m} vd Fi[9]} BC9 VBC10{ m} Fp} VBC11{ VBC12{ VBC2 BC9 VBC13{ BC2 BC7} VBC8} FC8} VBC14{ BC9 VBC7 VBC8 VBC13 VBC6 vd FL} VBC15{ BC13 BC7 VBC9 vd} BC12 vd} BC10 BC5}}


S20634C14 ::~S20634C14(){ note_dtor("S20634C14", this);} // tgen
S20634C14 ::S20634C14(){ note_ctor("S20634C14", this);} // tgen

static void Test_S20634C14()
{
  extern Class_Descriptor cd_S20634C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20634C14, buf);
    S20634C14 *dp, &lv = *(dp=new (buf) S20634C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20634C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C14)");
    /*is_ambiguous_... S20634C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S20634C14");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(16,8), "S20634C14");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(16,8), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(16,8), "S20634C14");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*)(S20634C16*), ABISELECT(16,8), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(96,64), "S20634C14");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(96,64), "S20634C14");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(96,64), "S20634C14");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C13*), ABISELECT(96,64), "S20634C14");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), ABISELECT(32,16), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*), ABISELECT(32,16), "S20634C14");
    check_base_class_offset(lv, (S20634C8*)(S20634C13*), ABISELECT(32,16), "S20634C14");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*)(S20634C16*), ABISELECT(32,16), "S20634C14");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(120,76), "S20634C14");
    check_base_class_offset(lv, (S2265C38*)(S20634C19*), ABISELECT(120,76), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*), ABISELECT(48,24), "S20634C14");
    check_base_class_offset(lv, (S20634C5*)(S20634C13*), ABISELECT(48,24), "S20634C14");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*)(S20634C15*), ABISELECT(48,24), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*), ABISELECT(32,16), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*), ABISELECT(120,76), "S20634C14");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*)(S20634C15*), ABISELECT(120,76), "S20634C14");
    check_base_class_offset(lv, (S20634C17*)(S20634C16*), ABISELECT(32,16), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*), ABISELECT(128,80), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(176,104), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(184,108), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C12 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(184,108), "S20634C14");
    /*is_ambiguous_... S20634C14::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(176,104), "S20634C14");
    check_base_class_offset(lv, (S20634C12*)(S20634C13*), ABISELECT(176,104), "S20634C14");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*)(S20634C16*), ABISELECT(176,104), "S20634C14");
    check_base_class_offset(lv, (S20634C11*)(S20634C10*), ABISELECT(128,80), "S20634C14");
    check_base_class_offset(lv, (S20634C10*)(S20634C16*), ABISELECT(128,80), "S20634C14");
    /*is_ambiguous_... S20634C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C13*), ABISELECT(208,120), "S20634C14");
    check_base_class_offset(lv, (S20634C13*)(S20634C16*), ABISELECT(208,120), "S20634C14");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*)(S20634C19*), ABISELECT(232,136), "S20634C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(240,140), "S20634C14");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(240,140), "S20634C14");
    check_base_class_offset(lv, (S20634C12*)(S20634C19*), ABISELECT(232,136), "S20634C14");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C19*), ABISELECT(264,152), "S20634C14");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C19*), ABISELECT(264,152), "S20634C14");
    check_base_class_offset(lv, (S20634C19*)(S20634C16*), ABISELECT(224,132), "S20634C14");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*)(S20634C16*), ABISELECT(24,12), "S20634C14");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C11*)(S20634C16*), ABISELECT(24,12), "S20634C14");
    check_base_class_offset(lv, (S20634C16*)(S20634C15*), ABISELECT(24,12), "S20634C14");
    /*is_ambiguous_... S20634C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C15*), 0, "S20634C14");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*)(S20634C15*), 0, "S20634C14");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C17*)(S20634C15*), 0, "S20634C14");
    check_base_class_offset(lv, (S20634C15*), 0, "S20634C14");
    test_class_info(&lv, &cd_S20634C14);
    dp->~S20634C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C14(Test_S20634C14, "S20634C14", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN9S20634C14C1Ev();
extern void _ZN9S20634C14D1Ev();
Name_Map name_map_S20634C14[] = {
  NSPAIR(_ZN9S20634C14C1Ev),
  NSPAIR(_ZN9S20634C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C10;
extern VTBL_ENTRY _ZTI9S20634C10[];
extern  VTBL_ENTRY _ZTV9S20634C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C13;
extern VTBL_ENTRY _ZTI9S20634C13[];
extern  VTBL_ENTRY _ZTV9S20634C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C19;
extern VTBL_ENTRY _ZTI9S20634C19[];
extern  VTBL_ENTRY _ZTV9S20634C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C16;
extern VTBL_ENTRY _ZTI9S20634C16[];
extern  VTBL_ENTRY _ZTV9S20634C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S20634C15;
extern VTBL_ENTRY _ZTI9S20634C15[];
extern  VTBL_ENTRY _ZTV9S20634C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C15[];
static Base_Class bases_S20634C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20634C8,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20634C17,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20634C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20634C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20634C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20634C19,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20634C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20634C16,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20634C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20634C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20634C14[];
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void _ZN9S20634C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void _ZN9S20634C14D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C14D1Ev,_ZThn12_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C14D0Ev,_ZThn12_N9S20634C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20634C14D1Ev,_ZThn16_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S20634C14D0Ev,_ZThn16_N9S20634C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S20634C14D1Ev,_ZThn24_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S20634C14D0Ev,_ZThn24_N9S20634C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20634C14D1Ev,_ZThn80_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S20634C14D0Ev,_ZThn80_N9S20634C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C14D1Ev,_ZThn120_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C14D0Ev,_ZThn120_N9S20634C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C14D1Ev,_ZThn132_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C14D0Ev,_ZThn132_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C14[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20634C14[];
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void _ZN9S20634C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void _ZN9S20634C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C15__9S20634C14[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C179S20634C15__A1__9S20634C14[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn48_N9S20634C17D1Ev,_ZThn24_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn48_N9S20634C17D0Ev,_ZThn24_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C179S20634C15__A1__9S20634C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S20634C17D1Ev,_ZThn16_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S20634C17D0Ev,_ZThn16_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C179S20634C15__A1__9S20634C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C15D1Ev,_ZThn12_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C15D0Ev,_ZThn12_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C15__9S20634C14[] = {
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S20634C15D1Ev,_ZThn16_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S20634C15D0Ev,_ZThn16_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C15__9S20634C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S20634C15D1Ev,_ZThn24_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S20634C15D0Ev,_ZThn24_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C15__9S20634C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20634C15D1Ev,_ZThn80_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20634C15D0Ev,_ZThn80_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C15__9S20634C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C15D1Ev,_ZThn120_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C15D0Ev,_ZThn120_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C15__9S20634C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn132_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn132_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C15__9S20634C14[] = {
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void _ZN9S20634C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void _ZN9S20634C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C14[] = {
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C119S20634C16__A1__9S20634C14[] = {
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C11D1Ev,_ZThn4_N9S20634C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C11D0Ev,_ZThn4_N9S20634C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C119S20634C16__A1__9S20634C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C16__9S20634C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C16__9S20634C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn104_N9S20634C16D1Ev,_ZThn68_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn104_N9S20634C16D0Ev,_ZThn68_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C16__9S20634C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S20634C16D1Ev,_ZThn108_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S20634C16D0Ev,_ZThn108_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C16__9S20634C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-184,-108),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn200_N9S20634C16D1Ev,_ZThn120_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn200_N9S20634C16D0Ev,_ZThn120_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C16__9S20634C14[] = {
  ABISELECT(-200,-120),
  ABISELECT(-104,-56),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17__9S20634C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C5__9S20634C14[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C14[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void _ZN9S20634C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
extern void _ZN9S20634C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C10__9S20634C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__9S20634C14[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11__9S20634C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void _ZN9S20634C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
extern void _ZN9S20634C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C13__9S20634C14[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C13__9S20634C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void _ZN9S20634C19D1Ev();
extern void _ZN9S20634C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C14[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C19[0]),
  (VTBL_ENTRY)&_ZN9S20634C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C19D0Ev,
};
static  VTT_ENTRY vtt_S20634C14[] = {
  {&(_ZTV9S20634C14[16]),  16,82},
  {&(_tg__ZTV9S20634C15__9S20634C14[16]),  16,18},
  {&(_tg__ZTV9S20634C179S20634C15__A1__9S20634C14[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C179S20634C15__A1__9S20634C14[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C179S20634C15__A1__9S20634C14[5]),  5,7},
  {&(_tg__ZTV9S20634C16__9S20634C15__9S20634C14[15]),  15,17},
  {&(_tg__ZTV9S20634C17__9S20634C15__9S20634C14[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C15__9S20634C14[7]),  7,9},
  {&(_tg__ZTV9S20634C17__9S20634C15__9S20634C14[9]),  9,11},
  {&(_tg__ZTV9S20634C10__9S20634C15__9S20634C14[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C15__9S20634C14[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C15__9S20634C14[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C15__9S20634C14[4]),  4,6},
  {&(_ZTV9S20634C14[33]),  33,82},
  {&(_ZTV9S20634C14[44]),  44,82},
  {&(_ZTV9S20634C14[53]),  53,82},
  {&(_ZTV9S20634C14[44]),  44,82},
  {&(_ZTV9S20634C14[63]),  63,82},
  {&(_ZTV9S20634C14[63]),  63,82},
  {&(_ZTV9S20634C14[74]),  74,82},
  {&(_ZTV9S20634C14[80]),  80,82},
  {&(_tg__ZTV9S20634C16__9S20634C14[15]),  15,17},
  {&(_tg__ZTV9S20634C119S20634C16__A1__9S20634C14[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C119S20634C16__A1__9S20634C14[5]),  5,7},
  {&(_tg__ZTV9S20634C17__9S20634C16__9S20634C14[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C16__9S20634C14[7]),  7,9},
  {&(_tg__ZTV9S20634C17__9S20634C16__9S20634C14[9]),  9,11},
  {&(_tg__ZTV9S20634C10__9S20634C16__9S20634C14[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C16__9S20634C14[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C16__9S20634C14[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C16__9S20634C14[4]),  4,6},
  {&(_tg__ZTV9S20634C17__9S20634C14[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C17__9S20634C14[7]),  7,9},
  {&(_tg__ZTV9S20634C17__9S20634C14[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C14[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C5__9S20634C14[5]),  5,7},
  {&(_tg__ZTV8S20634C8__9S20634C14[4]),  4,6},
  {&(_tg__ZTV9S20634C10__9S20634C14[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C14[8]),  8,10},
  {&(_tg__ZTV8S20634C8__9S20634C10__9S20634C14[5]),  5,7},
  {&(_tg__ZTV9S20634C11__9S20634C14[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11__9S20634C14[5]),  5,7},
  {&(_tg__ZTV9S20634C13__9S20634C14[9]),  9,11},
  {&(_tg__ZTV8S20634C8__9S20634C13__9S20634C14[5]),  5,7},
  {&(_tg__ZTV8S20634C5__9S20634C13__9S20634C14[7]),  7,9},
  {&(_tg__ZTV9S20634C19__9S20634C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20634C14[];
extern  VTBL_ENTRY _ZTV9S20634C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C14[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20634C16D0Ev,_ZThn120_N9S20634C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20634C16D1Ev,_ZThn120_N9S20634C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C11D0Ev,_ZThn4_N9S20634C11D0Ev),
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C11D1Ev,_ZThn4_N9S20634C11D1Ev),
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20634C16D0Ev,_ZThn108_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20634C16D0Ev,_ZThn68_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev),
  (VTBL_ENTRY)_ZN9S20634C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20634C16D1Ev,_ZThn108_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20634C16D1Ev,_ZThn68_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev),
  (VTBL_ENTRY)_ZN9S20634C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn132_N9S20634C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn132_N9S20634C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20634C17D0Ev,_ZThn16_N9S20634C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20634C17D0Ev,_ZThn24_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20634C17D1Ev,_ZThn16_N9S20634C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20634C17D1Ev,_ZThn24_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C15D0Ev,_ZThn120_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20634C15D0Ev,_ZThn80_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20634C15D0Ev,_ZThn24_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20634C15D0Ev,_ZThn16_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C15D0Ev,_ZThn12_N9S20634C15D0Ev),
  (VTBL_ENTRY)_ZN9S20634C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C15D1Ev,_ZThn120_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20634C15D1Ev,_ZThn80_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20634C15D1Ev,_ZThn24_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20634C15D1Ev,_ZThn16_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C15D1Ev,_ZThn12_N9S20634C15D1Ev),
  (VTBL_ENTRY)_ZN9S20634C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C14D0Ev,_ZThn132_N9S20634C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C14D1Ev,_ZThn132_N9S20634C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C14D0Ev,_ZThn120_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20634C14D0Ev,_ZThn80_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20634C14D0Ev,_ZThn24_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20634C14D0Ev,_ZThn16_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C14D0Ev,_ZThn12_N9S20634C14D0Ev),
  (VTBL_ENTRY)_ZN9S20634C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C14D1Ev,_ZThn120_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20634C14D1Ev,_ZThn80_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20634C14D1Ev,_ZThn24_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20634C14D1Ev,_ZThn16_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C14D1Ev,_ZThn12_N9S20634C14D1Ev),
  (VTBL_ENTRY)_ZN9S20634C14D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C14 = {  "S20634C14", // class name
  bases_S20634C14, 32,
  &(vtc_S20634C14[0]), // expected_vtbl_contents
  &(vtt_S20634C14[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI9S20634C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20634C14),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20634C14),46, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C4  : virtual S20634C5 , virtual S20634C10 , virtual S20634C13 , S20634C14 {
  virtual  ~S20634C4(); // _ZN8S20634C4D2Ev
  S20634C4(); // tgen
};
//SIG(-1 S20634C4) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} VBC7{ VBC8{ VBC4 BC6 VBC9{ BC4 BC3} VBC5} FC5} VBC10{ BC6 VBC3 VBC5 VBC9 VBC2 vd FL} BC11{ VBC4 BC12{ VBC13{ VBC14{ VBC2 BC6 VBC15{ m} Fp} VBC7 VBC10 VBC16{ BC9 BC3 VBC6 vd} BC8 vd} BC15 BC14}} vd}


 S20634C4 ::~S20634C4(){ note_dtor("S20634C4", this);}
S20634C4 ::S20634C4(){ note_ctor("S20634C4", this);} // tgen

static void Test_S20634C4()
{
  extern Class_Descriptor cd_S20634C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20634C4, buf);
    S20634C4 *dp, &lv = *(dp=new (buf) S20634C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20634C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C4)");
    /*is_ambiguous_... S20634C4::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(64,48), "S20634C4");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(64,48), "S20634C4");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(64,48), "S20634C4");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C13*), ABISELECT(64,48), "S20634C4");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(88,60), "S20634C4");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(88,60), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(88,60), "S20634C4");
    /*is_ambiguous_... S20634C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C14*), ABISELECT(88,60), "S20634C4");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*)(S20634C16*), ABISELECT(88,60), "S20634C4");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), ABISELECT(16,8), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*), ABISELECT(16,8), "S20634C4");
    check_base_class_offset(lv, (S20634C8*)(S20634C13*), ABISELECT(16,8), "S20634C4");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*)(S20634C16*), ABISELECT(16,8), "S20634C4");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(96,64), "S20634C4");
    check_base_class_offset(lv, (S2265C38*)(S20634C19*), ABISELECT(96,64), "S20634C4");
    check_base_class_offset(lv, (S20634C5*), ABISELECT(16,8), "S20634C4");
    check_base_class_offset(lv, (S20634C5*)(S20634C13*), ABISELECT(16,8), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*), ABISELECT(16,8), "S20634C4");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*)(S20634C15*)(S20634C14*), ABISELECT(16,8), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*), ABISELECT(104,68), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(152,92), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(160,96), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C12 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(160,96), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(152,92), "S20634C4");
    check_base_class_offset(lv, (S20634C12*)(S20634C13*), ABISELECT(152,92), "S20634C4");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*)(S20634C16*), ABISELECT(152,92), "S20634C4");
    check_base_class_offset(lv, (S20634C11*)(S20634C10*), ABISELECT(104,68), "S20634C4");
    check_base_class_offset(lv, (S20634C10*), ABISELECT(104,68), "S20634C4");
    check_base_class_offset(lv, (S20634C10*)(S20634C16*), ABISELECT(104,68), "S20634C4");
    /*is_ambiguous_... S20634C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C13*), ABISELECT(184,108), "S20634C4");
    check_base_class_offset(lv, (S20634C13*), ABISELECT(184,108), "S20634C4");
    check_base_class_offset(lv, (S20634C13*)(S20634C16*), ABISELECT(184,108), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*), ABISELECT(208,124), "S20634C4");
    /*is_ambiguous_... S20634C4::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*), ABISELECT(224,132), "S20634C4");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*)(S20634C15*)(S20634C14*), ABISELECT(224,132), "S20634C4");
    check_base_class_offset(lv, (S20634C17*)(S20634C16*), ABISELECT(208,124), "S20634C4");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*)(S20634C19*), ABISELECT(232,136), "S20634C4");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(240,140), "S20634C4");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(240,140), "S20634C4");
    check_base_class_offset(lv, (S20634C12*)(S20634C19*), ABISELECT(232,136), "S20634C4");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C19*), ABISELECT(264,152), "S20634C4");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C19*), ABISELECT(264,152), "S20634C4");
    check_base_class_offset(lv, (S20634C19*)(S20634C16*), ABISELECT(224,132), "S20634C4");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*)(S20634C16*), ABISELECT(200,120), "S20634C4");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C11*)(S20634C16*), ABISELECT(200,120), "S20634C4");
    check_base_class_offset(lv, (S20634C16*)(S20634C15*)(S20634C14*), ABISELECT(200,120), "S20634C4");
    /*is_ambiguous_... S20634C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C15*)(S20634C14*), 0, "S20634C4");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*)(S20634C15*)(S20634C14*), 0, "S20634C4");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C17*)(S20634C15*)(S20634C14*), 0, "S20634C4");
    check_base_class_offset(lv, (S20634C15*)(S20634C14*), 0, "S20634C4");
    check_base_class_offset(lv, (S20634C14*), 0, "S20634C4");
    test_class_info(&lv, &cd_S20634C4);
    dp->~S20634C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C4(Test_S20634C4, "S20634C4", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN8S20634C4C1Ev();
extern void _ZN8S20634C4D2Ev();
Name_Map name_map_S20634C4[] = {
  NSPAIR(_ZN8S20634C4C1Ev),
  NSPAIR(_ZN8S20634C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C10;
extern VTBL_ENTRY _ZTI9S20634C10[];
extern  VTBL_ENTRY _ZTV9S20634C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C13;
extern VTBL_ENTRY _ZTI9S20634C13[];
extern  VTBL_ENTRY _ZTV9S20634C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C13[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C19;
extern VTBL_ENTRY _ZTI9S20634C19[];
extern  VTBL_ENTRY _ZTV9S20634C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C16;
extern VTBL_ENTRY _ZTI9S20634C16[];
extern  VTBL_ENTRY _ZTV9S20634C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S20634C15;
extern VTBL_ENTRY _ZTI9S20634C15[];
extern  VTBL_ENTRY _ZTV9S20634C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C15[];
extern Class_Descriptor cd_S20634C14;
extern VTBL_ENTRY _ZTI9S20634C14[];
extern  VTBL_ENTRY _ZTV9S20634C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C14[];
static Base_Class bases_S20634C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20634C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20634C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20634C10,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20634C13,    ABISELECT(184,108), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(208,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20634C17,    ABISELECT(208,124), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20634C19,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20634C11,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20634C16,    ABISELECT(200,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20634C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20634C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20634C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20634C4[];
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void _ZN8S20634C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void _ZN8S20634C4D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20634C4D1Ev,_ZThn8_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20634C4D0Ev,_ZThn8_N8S20634C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20634C4D1Ev,_ZThn68_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20634C4D0Ev,_ZThn68_N8S20634C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn184_N8S20634C4D1Ev,_ZThn108_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn184_N8S20634C4D0Ev,_ZThn108_N8S20634C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20634C4D1Ev,_ZThn120_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20634C4D0Ev,_ZThn120_N8S20634C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn208_N8S20634C4D1Ev,_ZThn124_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn208_N8S20634C4D0Ev,_ZThn124_N8S20634C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20634C4D1Ev,_ZTv0_n16_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20634C4D1Ev,_ZThn132_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20634C4D0Ev,_ZTv0_n16_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20634C4D0Ev,_ZThn132_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C4[] = {
  ABISELECT(224,132),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,124),
  ABISELECT(200,120),
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-200,-120),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-208,-124),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-128,-68),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20634C4D1Ev,_ZTv0_n16_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20634C4D0Ev,_ZTv0_n16_N8S20634C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20634C4[];
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void _ZN9S20634C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void _ZN9S20634C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C14__8S20634C4[] = {
  ABISELECT(224,132),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,124),
  ABISELECT(200,120),
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void _ZN9S20634C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void _ZN9S20634C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C159S20634C14__8S20634C4[] = {
  ABISELECT(224,132),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,124),
  ABISELECT(200,120),
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C179S20634C159S20634C14__A1__8S20634C4[] = {
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C179S20634C159S20634C14__A1__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn200_N9S20634C15D1Ev,_ZThn120_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn200_N9S20634C15D0Ev,_ZThn120_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C159S20634C14__8S20634C4[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-200,-120),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C15D1Ev,_ZThn124_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C15D0Ev,_ZThn124_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C159S20634C14__8S20634C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-208,-124),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C15D1Ev,_ZThn8_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C15D0Ev,_ZThn8_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C159S20634C14__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S20634C15D1Ev,_ZThn68_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn104_N9S20634C15D0Ev,_ZThn68_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C159S20634C14__8S20634C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn184_N9S20634C15D1Ev,_ZThn108_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn184_N9S20634C15D0Ev,_ZThn108_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C159S20634C14__8S20634C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn132_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn132_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C159S20634C14__8S20634C4[] = {
  ABISELECT(-224,-132),
  ABISELECT(-128,-68),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn200_N9S20634C14D1Ev,_ZThn120_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn200_N9S20634C14D0Ev,_ZThn120_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C14__8S20634C4[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-200,-120),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20634C14D1Ev,_ZThn124_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20634C14D0Ev,_ZThn124_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C14__8S20634C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-208,-124),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20634C14D1Ev,_ZThn8_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20634C14D0Ev,_ZThn8_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C14__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20634C14D1Ev,_ZThn68_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn104_N9S20634C14D0Ev,_ZThn68_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C14__8S20634C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn184_N9S20634C14D1Ev,_ZThn108_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn184_N9S20634C14D0Ev,_ZThn108_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C14__8S20634C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C14D1Ev,_ZThn132_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C14D0Ev,_ZThn132_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C14__8S20634C4[] = {
  ABISELECT(-224,-132),
  ABISELECT(-128,-68),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void _ZN9S20634C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
extern void _ZN9S20634C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__8S20634C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C10__8S20634C4[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__8S20634C4[] = {
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11__8S20634C4[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void _ZN9S20634C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
extern void _ZN9S20634C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__8S20634C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C13__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void _ZN9S20634C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void _ZN9S20634C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__8S20634C4[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C119S20634C16__A1__8S20634C4[] = {
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C119S20634C16__A1__8S20634C4[] = {
  ABISELECT(184,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C16__8S20634C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-8,-4),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C16__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(184,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C16__8S20634C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(96,52),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C16__8S20634C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(16,12),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C16__8S20634C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-128,-68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__8S20634C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  0,
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17__8S20634C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(192,116),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(192,116),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void _ZN9S20634C19D1Ev();
extern void _ZN9S20634C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20634C19__8S20634C4[] = {
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C19[0]),
  (VTBL_ENTRY)&_ZN9S20634C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C19D0Ev,
};
static  VTT_ENTRY vtt_S20634C4[] = {
  {&(_ZTV8S20634C4[16]),  16,82},
  {&(_tg__ZTV9S20634C14__8S20634C4[16]),  16,18},
  {&(_tg__ZTV9S20634C159S20634C14__8S20634C4[16]),  16,18},
  {&(_tg__ZTV9S20634C179S20634C159S20634C14__A1__8S20634C4[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C179S20634C159S20634C14__A1__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C179S20634C159S20634C14__A1__8S20634C4[7]),  7,9},
  {&(_tg__ZTV9S20634C16__9S20634C159S20634C14__8S20634C4[15]),  15,17},
  {&(_tg__ZTV9S20634C17__9S20634C159S20634C14__8S20634C4[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C159S20634C14__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C159S20634C14__8S20634C4[7]),  7,9},
  {&(_tg__ZTV9S20634C10__9S20634C159S20634C14__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C159S20634C14__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C159S20634C14__8S20634C4[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C159S20634C14__8S20634C4[4]),  4,6},
  {&(_tg__ZTV9S20634C16__9S20634C14__8S20634C4[15]),  15,17},
  {&(_tg__ZTV9S20634C17__9S20634C14__8S20634C4[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C14__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C14__8S20634C4[7]),  7,9},
  {&(_tg__ZTV9S20634C10__9S20634C14__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C14__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C14__8S20634C4[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C14__8S20634C4[4]),  4,6},
  {&(_ZTV8S20634C4[25]),  25,82},
  {&(_ZTV8S20634C4[25]),  25,82},
  {&(_ZTV8S20634C4[35]),  35,82},
  {&(_ZTV8S20634C4[35]),  35,82},
  {&(_ZTV8S20634C4[46]),  46,82},
  {&(_ZTV8S20634C4[63]),  63,82},
  {&(_ZTV8S20634C4[74]),  74,82},
  {&(_ZTV8S20634C4[80]),  80,82},
  {&(_tg__ZTV8S20634C5__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C4[4]),  4,6},
  {&(_tg__ZTV9S20634C10__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C10__8S20634C4[8]),  8,10},
  {&(_tg__ZTV8S20634C8__9S20634C10__8S20634C4[5]),  5,7},
  {&(_tg__ZTV9S20634C11__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11__8S20634C4[5]),  5,7},
  {&(_tg__ZTV9S20634C13__8S20634C4[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C13__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C13__8S20634C4[7]),  7,9},
  {&(_tg__ZTV9S20634C16__8S20634C4[15]),  15,17},
  {&(_tg__ZTV9S20634C119S20634C16__A1__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C119S20634C16__A1__8S20634C4[5]),  5,7},
  {&(_tg__ZTV9S20634C17__9S20634C16__8S20634C4[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C16__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C16__8S20634C4[7]),  7,9},
  {&(_tg__ZTV9S20634C10__9S20634C16__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C16__8S20634C4[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C16__8S20634C4[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C16__8S20634C4[4]),  4,6},
  {&(_tg__ZTV9S20634C17__8S20634C4[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C17__8S20634C4[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C17__8S20634C4[7]),  7,9},
  {&(_tg__ZTV9S20634C19__8S20634C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20634C4[];
extern  VTBL_ENTRY _ZTV8S20634C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C4[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev),
  (VTBL_ENTRY)_ZN9S20634C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev),
  (VTBL_ENTRY)_ZN9S20634C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C14D0Ev,_ZThn132_N9S20634C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C14D1Ev,_ZThn132_N9S20634C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn132_N9S20634C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn132_N9S20634C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D0Ev,_ZThn8_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C17D1Ev,_ZThn8_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20634C15D0Ev,_ZThn108_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20634C15D0Ev,_ZThn68_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C15D0Ev,_ZThn8_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C15D0Ev,_ZThn124_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20634C15D0Ev,_ZThn120_N9S20634C15D0Ev),
  (VTBL_ENTRY)_ZN9S20634C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20634C15D1Ev,_ZThn108_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20634C15D1Ev,_ZThn68_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C15D1Ev,_ZThn8_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C15D1Ev,_ZThn124_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20634C15D1Ev,_ZThn120_N9S20634C15D1Ev),
  (VTBL_ENTRY)_ZN9S20634C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20634C14D0Ev,_ZThn108_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20634C14D0Ev,_ZThn68_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C14D0Ev,_ZThn8_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C14D0Ev,_ZThn124_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20634C14D0Ev,_ZThn120_N9S20634C14D0Ev),
  (VTBL_ENTRY)_ZN9S20634C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20634C14D1Ev,_ZThn108_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20634C14D1Ev,_ZThn68_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20634C14D1Ev,_ZThn8_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20634C14D1Ev,_ZThn124_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20634C14D1Ev,_ZThn120_N9S20634C14D1Ev),
  (VTBL_ENTRY)_ZN9S20634C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20634C4D0Ev,_ZTv0_n16_N8S20634C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20634C4D0Ev,_ZThn132_N8S20634C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20634C4D1Ev,_ZTv0_n16_N8S20634C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20634C4D1Ev,_ZThn132_N8S20634C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20634C4D0Ev,_ZThn124_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20634C4D0Ev,_ZThn120_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20634C4D0Ev,_ZThn108_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20634C4D0Ev,_ZThn68_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20634C4D0Ev,_ZThn8_N8S20634C4D0Ev),
  (VTBL_ENTRY)_ZN8S20634C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20634C4D1Ev,_ZThn124_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20634C4D1Ev,_ZThn120_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20634C4D1Ev,_ZThn108_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20634C4D1Ev,_ZThn68_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20634C4D1Ev,_ZThn8_N8S20634C4D1Ev),
  (VTBL_ENTRY)_ZN8S20634C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C4 = {  "S20634C4", // class name
  bases_S20634C4, 33,
  &(vtc_S20634C4[0]), // expected_vtbl_contents
  &(vtt_S20634C4[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI8S20634C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20634C4),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20634C4),55, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20634C1  : virtual S20634C2 , S20634C4 {
  virtual  ~S20634C1(); // _ZN8S20634C1D2Ev
  S20634C1(); // tgen
};
//SIG(1 S20634C1) C1{ VBC2{ VBC3{ m Fi[5]} Fp} BC4{ VBC5{ VBC6{ BC7{ m Fp} Fp[2]} VBC7 VBC8{ VBC7 VBC6 vd} VBC9{ m} vd Fi[9]} VBC10{ VBC11{ VBC7 BC9 VBC12{ BC7 BC6} VBC8} FC8} VBC13{ BC9 VBC6 VBC8 VBC12 VBC5 vd FL} BC14{ VBC7 BC15{ VBC16{ VBC17{ VBC5 BC9 VBC18{ m} Fp} VBC10 VBC13 VBC19{ BC12 BC6 VBC9 vd} BC11 vd} BC18 BC17}} vd} vd}


 S20634C1 ::~S20634C1(){ note_dtor("S20634C1", this);}
S20634C1 ::S20634C1(){ note_ctor("S20634C1", this);} // tgen

static void Test_S20634C1()
{
  extern Class_Descriptor cd_S20634C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,49)];
    init_test(&cd_S20634C1, buf);
    S20634C1 *dp, &lv = *(dp=new (buf) S20634C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,192), "sizeof(S20634C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20634C1)");
    check_base_class_offset(lv, (S20634C3_nt*)(S20634C2*), ABISELECT(32,16), "S20634C1");
    check_base_class_offset(lv, (S20634C2*), ABISELECT(16,8), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*), ABISELECT(104,76), "S20634C1");
    check_base_class_offset(lv, (S20634C6*)(S20634C5*), ABISELECT(104,76), "S20634C1");
    check_base_class_offset(lv, (S20634C6*)(S20634C8*), ABISELECT(104,76), "S20634C1");
    /*is_ambiguous_... S20634C13::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C13*), ABISELECT(104,76), "S20634C1");
    /*is_ambiguous_... S20634C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C5*), ABISELECT(128,88), "S20634C1");
    /*is_ambiguous_... S20634C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C8*), ABISELECT(128,88), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*), ABISELECT(128,88), "S20634C1");
    /*is_ambiguous_... S20634C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C14*)(S20634C4*), ABISELECT(128,88), "S20634C1");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C11*)(S20634C16*), ABISELECT(128,88), "S20634C1");
    check_base_class_offset(lv, (S20634C8*)(S20634C5*), ABISELECT(56,36), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*), ABISELECT(56,36), "S20634C1");
    check_base_class_offset(lv, (S20634C8*)(S20634C13*), ABISELECT(56,36), "S20634C1");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C8*)(S20634C11*)(S20634C16*), ABISELECT(56,36), "S20634C1");
    check_base_class_offset(lv, (S2265C38*)(S20634C5*), ABISELECT(136,92), "S20634C1");
    check_base_class_offset(lv, (S2265C38*)(S20634C19*), ABISELECT(136,92), "S20634C1");
    check_base_class_offset(lv, (S20634C5*)(S20634C4*), ABISELECT(56,36), "S20634C1");
    check_base_class_offset(lv, (S20634C5*)(S20634C13*), ABISELECT(56,36), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*), ABISELECT(56,36), "S20634C1");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C5*)(S20634C17*)(S20634C15*)(S20634C14*)(S20634C4*), ABISELECT(56,36), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*), ABISELECT(144,96), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*), ABISELECT(192,120), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*), ABISELECT(200,124), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C12 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C12*), ABISELECT(200,124), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*), ABISELECT(192,120), "S20634C1");
    check_base_class_offset(lv, (S20634C12*)(S20634C13*), ABISELECT(192,120), "S20634C1");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C12*)(S20634C11*)(S20634C16*), ABISELECT(192,120), "S20634C1");
    check_base_class_offset(lv, (S20634C11*)(S20634C10*), ABISELECT(144,96), "S20634C1");
    check_base_class_offset(lv, (S20634C10*)(S20634C4*), ABISELECT(144,96), "S20634C1");
    check_base_class_offset(lv, (S20634C10*)(S20634C16*), ABISELECT(144,96), "S20634C1");
    /*is_ambiguous_... S20634C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C13*), ABISELECT(224,136), "S20634C1");
    check_base_class_offset(lv, (S20634C13*)(S20634C4*), ABISELECT(224,136), "S20634C1");
    check_base_class_offset(lv, (S20634C13*)(S20634C16*), ABISELECT(224,136), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*), ABISELECT(248,152), "S20634C1");
    /*is_ambiguous_... S20634C1::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*), ABISELECT(264,160), "S20634C1");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C17*)(S20634C15*)(S20634C14*)(S20634C4*), ABISELECT(264,160), "S20634C1");
    check_base_class_offset(lv, (S20634C17*)(S20634C16*), ABISELECT(248,152), "S20634C1");
    /*is_ambiguous_... S20634C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C12*)(S20634C19*), ABISELECT(272,164), "S20634C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(280,168), "S20634C1");
    check_base_class_offset(lv, (S20634C6*)(S20634C12*)(S20634C19*), ABISELECT(280,168), "S20634C1");
    check_base_class_offset(lv, (S20634C12*)(S20634C19*), ABISELECT(272,164), "S20634C1");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20634C6*)(S20634C19*), ABISELECT(304,180), "S20634C1");
    /*is_ambiguous_... S20634C19::S20634C6 */ AMB_check_base_class_offset(lv, (S20634C6*)(S20634C19*), ABISELECT(304,180), "S20634C1");
    check_base_class_offset(lv, (S20634C19*)(S20634C16*), ABISELECT(264,160), "S20634C1");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C11*)(S20634C16*), ABISELECT(240,148), "S20634C1");
    /*is_ambiguous_... S20634C16::S20634C11 */ AMB_check_base_class_offset(lv, (S20634C11*)(S20634C16*), ABISELECT(240,148), "S20634C1");
    check_base_class_offset(lv, (S20634C16*)(S20634C15*)(S20634C14*)(S20634C4*), ABISELECT(240,148), "S20634C1");
    /*is_ambiguous_... S20634C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20634C15*)(S20634C14*)(S20634C4*), 0, "S20634C1");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20634C17*)(S20634C15*)(S20634C14*)(S20634C4*), 0, "S20634C1");
    /*is_ambiguous_... S20634C15::S20634C17 */ AMB_check_base_class_offset(lv, (S20634C17*)(S20634C15*)(S20634C14*)(S20634C4*), 0, "S20634C1");
    check_base_class_offset(lv, (S20634C15*)(S20634C14*)(S20634C4*), 0, "S20634C1");
    check_base_class_offset(lv, (S20634C14*)(S20634C4*), 0, "S20634C1");
    check_base_class_offset(lv, (S20634C4*), 0, "S20634C1");
    test_class_info(&lv, &cd_S20634C1);
    dp->~S20634C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20634C1(Test_S20634C1, "S20634C1", ABISELECT(328,192));

#else // __cplusplus

extern void _ZN8S20634C1C1Ev();
extern void _ZN8S20634C1D2Ev();
Name_Map name_map_S20634C1[] = {
  NSPAIR(_ZN8S20634C1C1Ev),
  NSPAIR(_ZN8S20634C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S20634C2;
extern VTBL_ENTRY _ZTI8S20634C2[];
extern  VTBL_ENTRY _ZTV8S20634C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C8;
extern VTBL_ENTRY _ZTI8S20634C8[];
extern  VTBL_ENTRY _ZTV8S20634C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C5;
extern VTBL_ENTRY _ZTI8S20634C5[];
extern  VTBL_ENTRY _ZTV8S20634C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C10;
extern VTBL_ENTRY _ZTI9S20634C10[];
extern  VTBL_ENTRY _ZTV9S20634C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C13;
extern VTBL_ENTRY _ZTI9S20634C13[];
extern  VTBL_ENTRY _ZTV9S20634C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C13[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C12;
extern VTBL_ENTRY _ZTI9S20634C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20634C6;
extern VTBL_ENTRY _ZTI8S20634C6[];
extern Class_Descriptor cd_S20634C19;
extern VTBL_ENTRY _ZTI9S20634C19[];
extern  VTBL_ENTRY _ZTV9S20634C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C11;
extern VTBL_ENTRY _ZTI9S20634C11[];
extern  VTBL_ENTRY _ZTV9S20634C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C11[];
extern Class_Descriptor cd_S20634C16;
extern VTBL_ENTRY _ZTI9S20634C16[];
extern  VTBL_ENTRY _ZTV9S20634C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20634C17;
extern VTBL_ENTRY _ZTI9S20634C17[];
extern  VTBL_ENTRY _ZTV9S20634C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C17[];
extern Class_Descriptor cd_S20634C15;
extern VTBL_ENTRY _ZTI9S20634C15[];
extern  VTBL_ENTRY _ZTV9S20634C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C15[];
extern Class_Descriptor cd_S20634C14;
extern VTBL_ENTRY _ZTI9S20634C14[];
extern  VTBL_ENTRY _ZTV9S20634C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20634C14[];
extern Class_Descriptor cd_S20634C4;
extern VTBL_ENTRY _ZTI8S20634C4[];
extern  VTBL_ENTRY _ZTV8S20634C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C4[];
static Base_Class bases_S20634C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20634C2,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20634C8,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20634C5,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20634C11,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20634C10,    ABISELECT(144,96), //bcp->offset
    32, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20634C13,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(248,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(264,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20634C17,    ABISELECT(248,152), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(272,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(280,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(280,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20634C12,    ABISELECT(272,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20634C6,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20634C19,    ABISELECT(264,160), //bcp->offset
    81, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20634C11,    ABISELECT(240,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20634C16,    ABISELECT(240,148), //bcp->offset
    53, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20634C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20634C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20634C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20634C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20634C1[];
extern void ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev)();
extern void _ZN8S20634C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev)();
extern void _ZN8S20634C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S20634C1D1Ev,_ZThn36_N8S20634C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S20634C1D0Ev,_ZThn36_N8S20634C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20634C1D1Ev,_ZThn96_N8S20634C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20634C1D0Ev,_ZThn96_N8S20634C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20634C1D1Ev,_ZThn136_N8S20634C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20634C1D0Ev,_ZThn136_N8S20634C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20634C1D1Ev,_ZThn148_N8S20634C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20634C1D0Ev,_ZThn148_N8S20634C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S20634C1D1Ev,_ZThn152_N8S20634C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S20634C1D0Ev,_ZThn152_N8S20634C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20634C1D1Ev,_ZTv0_n16_N8S20634C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S20634C1D1Ev,_ZThn160_N8S20634C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20634C1D0Ev,_ZTv0_n16_N8S20634C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S20634C1D0Ev,_ZThn160_N8S20634C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20634C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(264,160),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,152),
  ABISELECT(240,148),
  ABISELECT(264,160),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev),
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-240,-148),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-248,-152),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev),
  ABISELECT(-264,-160),
  ABISELECT(-128,-68),
  ABISELECT(-264,-160),
  (VTBL_ENTRY)&(_ZTI8S20634C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20634C1D1Ev,_ZTv0_n16_N8S20634C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20634C1D0Ev,_ZTv0_n16_N8S20634C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20634C1[];
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void _ZN8S20634C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void _ZN8S20634C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C4__8S20634C1[] = {
  ABISELECT(264,160),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,152),
  ABISELECT(240,148),
  ABISELECT(264,160),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void _ZN9S20634C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void _ZN9S20634C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(264,160),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,152),
  ABISELECT(240,148),
  ABISELECT(264,160),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void _ZN9S20634C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void _ZN9S20634C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C159S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(264,160),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,152),
  ABISELECT(240,148),
  ABISELECT(264,160),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C179S20634C159S20634C148S20634C4__A1__8S20634C1[] = {
  ABISELECT(264,160),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZThn56_N9S20634C17D1Ev,_ZThn36_N9S20634C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void ABISELECT(_ZThn56_N9S20634C17D0Ev,_ZThn36_N9S20634C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C179S20634C159S20634C148S20634C4__A1__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S20634C15D1Ev,_ZThn148_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S20634C15D0Ev,_ZThn148_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C159S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-240,-148),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn248_N9S20634C15D1Ev,_ZThn152_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn248_N9S20634C15D0Ev,_ZThn152_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C159S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-248,-152),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn56_N9S20634C15D1Ev,_ZThn36_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn56_N9S20634C15D0Ev,_ZThn36_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C159S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn144_N9S20634C15D1Ev,_ZThn96_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn144_N9S20634C15D0Ev,_ZThn96_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C159S20634C148S20634C4__8S20634C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn136_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn136_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C159S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev)();
extern void ABISELECT(_ZThn264_N9S20634C15D1Ev,_ZThn160_N9S20634C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev)();
extern void ABISELECT(_ZThn264_N9S20634C15D0Ev,_ZThn160_N9S20634C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C159S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(-264,-160),
  ABISELECT(-128,-68),
  ABISELECT(-264,-160),
  (VTBL_ENTRY)&(_ZTI9S20634C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn240_N9S20634C14D1Ev,_ZThn148_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn240_N9S20634C14D0Ev,_ZThn148_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__9S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-240,-148),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn248_N9S20634C14D1Ev,_ZThn152_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn248_N9S20634C14D0Ev,_ZThn152_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-248,-152),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn56_N9S20634C14D1Ev,_ZThn36_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn56_N9S20634C14D0Ev,_ZThn36_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S20634C14D1Ev,_ZThn96_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S20634C14D0Ev,_ZThn96_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C148S20634C4__8S20634C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20634C14D1Ev,_ZThn136_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20634C14D0Ev,_ZThn136_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev)();
extern void ABISELECT(_ZThn264_N9S20634C14D1Ev,_ZThn160_N9S20634C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev)();
extern void ABISELECT(_ZThn264_N9S20634C14D0Ev,_ZThn160_N9S20634C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C148S20634C4__8S20634C1[] = {
  ABISELECT(-264,-160),
  ABISELECT(-128,-68),
  ABISELECT(-264,-160),
  (VTBL_ENTRY)&(_ZTI9S20634C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S20634C4D1Ev,_ZThn36_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S20634C4D0Ev,_ZThn36_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__8S20634C4__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn144_N8S20634C4D1Ev,_ZThn96_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn144_N8S20634C4D0Ev,_ZThn96_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__8S20634C4__8S20634C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20634C4D1Ev,_ZThn136_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20634C4D0Ev,_ZThn136_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__8S20634C4__8S20634C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S20634C4D1Ev,_ZThn148_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S20634C4D0Ev,_ZThn148_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__8S20634C4__8S20634C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-240,-148),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-240,-148),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn248_N8S20634C4D1Ev,_ZThn152_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn248_N8S20634C4D0Ev,_ZThn152_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__8S20634C4__8S20634C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-248,-152),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20634C4D1Ev,_ZTv0_n16_N8S20634C4D1Ev)();
extern void ABISELECT(_ZThn264_N8S20634C4D1Ev,_ZThn160_N8S20634C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20634C4D0Ev,_ZTv0_n16_N8S20634C4D0Ev)();
extern void ABISELECT(_ZThn264_N8S20634C4D0Ev,_ZThn160_N8S20634C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__8S20634C4__8S20634C1[] = {
  ABISELECT(-264,-160),
  ABISELECT(-128,-68),
  ABISELECT(-264,-160),
  (VTBL_ENTRY)&(_ZTI8S20634C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20634C4D1Ev,_ZTv0_n16_N8S20634C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20634C4D0Ev,_ZTv0_n16_N8S20634C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20634C2__8S20634C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev)();
extern void _ZN8S20634C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev)();
extern void _ZN8S20634C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20634C5__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev),
};
extern void _ZN8S20634C8D1Ev();
extern void _ZN8S20634C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20634C8__8S20634C1[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20634C8[0]),
  (VTBL_ENTRY)&_ZN8S20634C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20634C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void _ZN9S20634C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
extern void _ZN9S20634C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C10__8S20634C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C10__8S20634C1[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20634C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C11__8S20634C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C11__8S20634C1[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void _ZN9S20634C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
extern void _ZN9S20634C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C13__8S20634C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C13__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20634C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void _ZN9S20634C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void _ZN9S20634C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C16__8S20634C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void _ZN9S20634C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
extern void _ZN9S20634C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C119S20634C16__A1__8S20634C1[] = {
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C8__9S20634C119S20634C16__A1__8S20634C1[] = {
  ABISELECT(184,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S20634C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__9S20634C16__8S20634C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-8,-4),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C16__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(184,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20634C10__9S20634C16__8S20634C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(96,52),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20634C13__9S20634C16__8S20634C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(16,12),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C19__9S20634C16__8S20634C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-128,-68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20634C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void _ZN9S20634C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
extern void _ZN9S20634C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20634C17__8S20634C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  0,
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20634C5__9S20634C17__8S20634C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(192,116),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(192,116),
  (VTBL_ENTRY)&(_ZTI9S20634C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev),
};
extern void _ZN9S20634C19D1Ev();
extern void _ZN9S20634C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20634C19__8S20634C1[] = {
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20634C19[0]),
  (VTBL_ENTRY)&_ZN9S20634C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20634C19D0Ev,
};
static  VTT_ENTRY vtt_S20634C1[] = {
  {&(_ZTV8S20634C1[18]),  18,87},
  {&(_tg__ZTV8S20634C4__8S20634C1[16]),  16,18},
  {&(_tg__ZTV9S20634C148S20634C4__8S20634C1[16]),  16,18},
  {&(_tg__ZTV9S20634C159S20634C148S20634C4__8S20634C1[16]),  16,18},
  {&(_tg__ZTV9S20634C179S20634C159S20634C148S20634C4__A1__8S20634C1[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C179S20634C159S20634C148S20634C4__A1__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C179S20634C159S20634C148S20634C4__A1__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C16__9S20634C159S20634C148S20634C4__8S20634C1[15]),  15,17},
  {&(_tg__ZTV9S20634C17__9S20634C159S20634C148S20634C4__8S20634C1[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C159S20634C148S20634C4__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C159S20634C148S20634C4__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C10__9S20634C159S20634C148S20634C4__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C159S20634C148S20634C4__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C159S20634C148S20634C4__8S20634C1[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C159S20634C148S20634C4__8S20634C1[4]),  4,6},
  {&(_tg__ZTV9S20634C16__9S20634C148S20634C4__8S20634C1[15]),  15,17},
  {&(_tg__ZTV9S20634C17__9S20634C148S20634C4__8S20634C1[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C148S20634C4__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C148S20634C4__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C10__9S20634C148S20634C4__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C148S20634C4__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C148S20634C4__8S20634C1[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C148S20634C4__8S20634C1[4]),  4,6},
  {&(_tg__ZTV8S20634C5__8S20634C4__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__8S20634C4__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C10__8S20634C4__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C10__8S20634C4__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C13__8S20634C4__8S20634C1[9]),  9,11},
  {&(_tg__ZTV9S20634C16__8S20634C4__8S20634C1[15]),  15,17},
  {&(_tg__ZTV9S20634C17__8S20634C4__8S20634C1[9]),  9,11},
  {&(_tg__ZTV9S20634C19__8S20634C4__8S20634C1[4]),  4,6},
  {&(_ZTV8S20634C1[23]),  23,87},
  {&(_ZTV8S20634C1[30]),  30,87},
  {&(_ZTV8S20634C1[30]),  30,87},
  {&(_ZTV8S20634C1[40]),  40,87},
  {&(_ZTV8S20634C1[40]),  40,87},
  {&(_ZTV8S20634C1[51]),  51,87},
  {&(_ZTV8S20634C1[68]),  68,87},
  {&(_ZTV8S20634C1[79]),  79,87},
  {&(_ZTV8S20634C1[85]),  85,87},
  {&(_tg__ZTV8S20634C2__8S20634C1[3]),  3,3},
  {&(_tg__ZTV8S20634C5__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C8__8S20634C1[4]),  4,6},
  {&(_tg__ZTV9S20634C10__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C10__8S20634C1[8]),  8,10},
  {&(_tg__ZTV8S20634C8__9S20634C10__8S20634C1[5]),  5,7},
  {&(_tg__ZTV9S20634C11__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C11__8S20634C1[5]),  5,7},
  {&(_tg__ZTV9S20634C13__8S20634C1[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C13__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C13__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C16__8S20634C1[15]),  15,17},
  {&(_tg__ZTV9S20634C119S20634C16__A1__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C8__9S20634C119S20634C16__A1__8S20634C1[5]),  5,7},
  {&(_tg__ZTV9S20634C17__9S20634C16__8S20634C1[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C16__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C16__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C10__9S20634C16__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C10__9S20634C16__8S20634C1[8]),  8,10},
  {&(_tg__ZTV9S20634C13__9S20634C16__8S20634C1[9]),  9,11},
  {&(_tg__ZTV9S20634C19__9S20634C16__8S20634C1[4]),  4,6},
  {&(_tg__ZTV9S20634C17__8S20634C1[9]),  9,11},
  {&(_tg__ZTV8S20634C5__9S20634C17__8S20634C1[7]),  7,9},
  {&(_tg__ZTV8S20634C5__9S20634C17__8S20634C1[7]),  7,9},
  {&(_tg__ZTV9S20634C19__8S20634C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20634C1[];
extern  VTBL_ENTRY _ZTV8S20634C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20634C1[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D0Ev,_ZTv0_n16_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D0Ev,_ZThn12_N9S20634C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C16D1Ev,_ZTv0_n16_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20634C16D1Ev,_ZThn12_N9S20634C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D0Ev,_ZTv0_n20_N9S20634C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D0Ev,_ZThn4_N9S20634C16D0Ev),
  (VTBL_ENTRY)_ZN9S20634C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C16D1Ev,_ZTv0_n20_N9S20634C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20634C16D1Ev,_ZThn4_N9S20634C16D1Ev),
  (VTBL_ENTRY)_ZN9S20634C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D0Ev,_ZTv0_n20_N9S20634C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C13D1Ev,_ZTv0_n20_N9S20634C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D0Ev,_ZTv0_n20_N9S20634C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  (VTBL_ENTRY)_ZN9S20634C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C11D1Ev,_ZTv0_n20_N9S20634C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  (VTBL_ENTRY)_ZN9S20634C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D0Ev,_ZTv0_n20_N9S20634C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C10D1Ev,_ZTv0_n20_N9S20634C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D0Ev,_ZTv0_n20_N8S20634C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C5D1Ev,_ZTv0_n20_N8S20634C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20634C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20634C4D0Ev,_ZTv0_n16_N8S20634C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20634C4D0Ev,_ZThn160_N8S20634C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20634C4D1Ev,_ZTv0_n16_N8S20634C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20634C4D1Ev,_ZThn160_N8S20634C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C14D0Ev,_ZTv0_n16_N9S20634C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20634C14D0Ev,_ZThn160_N9S20634C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C14D1Ev,_ZTv0_n16_N9S20634C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20634C14D1Ev,_ZThn160_N9S20634C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D0Ev,_ZTv0_n16_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20634C15D0Ev,_ZThn160_N9S20634C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20634C15D1Ev,_ZTv0_n16_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20634C15D1Ev,_ZThn160_N9S20634C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D0Ev,_ZTv0_n20_N9S20634C17D0Ev), // 
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20634C17D0Ev,_ZThn36_N9S20634C17D0Ev),
  (VTBL_ENTRY)_ZN9S20634C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C17D1Ev,_ZTv0_n20_N9S20634C17D1Ev), // 
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20634C17D1Ev,_ZThn36_N9S20634C17D1Ev),
  (VTBL_ENTRY)_ZN9S20634C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D0Ev,_ZTv0_n20_N9S20634C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D0Ev,_ZThn136_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20634C15D0Ev,_ZThn96_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20634C15D0Ev,_ZThn36_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20634C15D0Ev,_ZThn152_N9S20634C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20634C15D0Ev,_ZThn148_N9S20634C15D0Ev),
  (VTBL_ENTRY)_ZN9S20634C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C15D1Ev,_ZTv0_n20_N9S20634C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C15D1Ev,_ZThn136_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20634C15D1Ev,_ZThn96_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20634C15D1Ev,_ZThn36_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20634C15D1Ev,_ZThn152_N9S20634C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20634C15D1Ev,_ZThn148_N9S20634C15D1Ev),
  (VTBL_ENTRY)_ZN9S20634C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C14D0Ev,_ZTv0_n20_N9S20634C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C14D0Ev,_ZThn136_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20634C14D0Ev,_ZThn96_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20634C14D0Ev,_ZThn36_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20634C14D0Ev,_ZThn152_N9S20634C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20634C14D0Ev,_ZThn148_N9S20634C14D0Ev),
  (VTBL_ENTRY)_ZN9S20634C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20634C14D1Ev,_ZTv0_n20_N9S20634C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20634C14D1Ev,_ZThn136_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20634C14D1Ev,_ZThn96_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20634C14D1Ev,_ZThn36_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20634C14D1Ev,_ZThn152_N9S20634C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20634C14D1Ev,_ZThn148_N9S20634C14D1Ev),
  (VTBL_ENTRY)_ZN9S20634C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C4D0Ev,_ZTv0_n20_N8S20634C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20634C4D0Ev,_ZThn152_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20634C4D0Ev,_ZThn148_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20634C4D0Ev,_ZThn136_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20634C4D0Ev,_ZThn96_N8S20634C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20634C4D0Ev,_ZThn36_N8S20634C4D0Ev),
  (VTBL_ENTRY)_ZN8S20634C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C4D1Ev,_ZTv0_n20_N8S20634C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20634C4D1Ev,_ZThn152_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20634C4D1Ev,_ZThn148_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20634C4D1Ev,_ZThn136_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20634C4D1Ev,_ZThn96_N8S20634C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20634C4D1Ev,_ZThn36_N8S20634C4D1Ev),
  (VTBL_ENTRY)_ZN8S20634C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20634C1D0Ev,_ZTv0_n16_N8S20634C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20634C1D0Ev,_ZThn160_N8S20634C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20634C1D1Ev,_ZTv0_n16_N8S20634C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20634C1D1Ev,_ZThn160_N8S20634C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C1D0Ev,_ZTv0_n20_N8S20634C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20634C1D0Ev,_ZThn152_N8S20634C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20634C1D0Ev,_ZThn148_N8S20634C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20634C1D0Ev,_ZThn136_N8S20634C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20634C1D0Ev,_ZThn96_N8S20634C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20634C1D0Ev,_ZThn36_N8S20634C1D0Ev),
  (VTBL_ENTRY)_ZN8S20634C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20634C1D1Ev,_ZTv0_n20_N8S20634C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20634C1D1Ev,_ZThn152_N8S20634C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20634C1D1Ev,_ZThn148_N8S20634C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20634C1D1Ev,_ZThn136_N8S20634C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20634C1D1Ev,_ZThn96_N8S20634C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20634C1D1Ev,_ZThn36_N8S20634C1D1Ev),
  (VTBL_ENTRY)_ZN8S20634C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20634C1 = {  "S20634C1", // class name
  bases_S20634C1, 36,
  &(vtc_S20634C1[0]), // expected_vtbl_contents
  &(vtt_S20634C1[0]), // expected_vtt_contents
  ABISELECT(328,192), // object size
  NSPAIRA(_ZTI8S20634C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20634C1),87, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20634C1),66, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C2  : virtual S20634C3_nt {
  void *s20633c2f0;
  ~S20633C2(); // tgen
  S20633C2(); // tgen
};
//SIG(-1 S20633C2) C1{ VBC2{ m Fi[5]} Fp}


S20633C2 ::~S20633C2(){ note_dtor("S20633C2", this);} // tgen
S20633C2 ::S20633C2(){ note_ctor("S20633C2", this);} // tgen

static void Test_S20633C2()
{
  extern Class_Descriptor cd_S20633C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S20633C2, buf);
    S20633C2 *dp, &lv = *(dp=new (buf) S20633C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S20633C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C2)");
    check_base_class_offset(lv, (S20634C3_nt*), ABISELECT(16,8), "S20633C2");
    check_field_offset(lv, s20633c2f0, ABISELECT(8,4), "S20633C2.s20633c2f0");
    test_class_info(&lv, &cd_S20633C2);
    dp->~S20633C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C2(Test_S20633C2, "S20633C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S20633C2C1Ev();
extern void _ZN8S20633C2D1Ev();
Name_Map name_map_S20633C2[] = {
  NSPAIR(_ZN8S20633C2C1Ev),
  NSPAIR(_ZN8S20633C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
static Base_Class bases_S20633C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20633C2[];
static  VTBL_ENTRY vtc_S20633C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C2[0]),
};
extern VTBL_ENTRY _ZTV8S20633C2[];
static  VTT_ENTRY vtt_S20633C2[] = {
  {&(_ZTV8S20633C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20633C2[];
extern  VTBL_ENTRY _ZTV8S20633C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C2[];
Class_Descriptor cd_S20633C2 = {  "S20633C2", // class name
  bases_S20633C2, 1,
  &(vtc_S20633C2[0]), // expected_vtbl_contents
  &(vtt_S20633C2[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S20633C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20633C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20633C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C6  : S5217C60_nt {
  void *s20633c6f0[2];
};
//SIG(-1 S20633C6) C1{ BC2{ m Fp} Fp[2]}



static void Test_S20633C6()
{
  extern Class_Descriptor cd_S20633C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20633C6, buf);
    S20633C6 &lv = *(new (buf) S20633C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20633C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C6)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S20633C6");
    check_field_offset(lv, s20633c6f0, ABISELECT(8,4), "S20633C6.s20633c6f0");
    test_class_info(&lv, &cd_S20633C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C6(Test_S20633C6, "S20633C6", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S20633C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20633C6[];
Class_Descriptor cd_S20633C6 = {  "S20633C6", // class name
  bases_S20633C6, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20633C6),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C8  : virtual S5217C60_nt , virtual S20633C6 {
  virtual  ~S20633C8(); // _ZN8S20633C8D2Ev
  S20633C8(); // tgen
};
//SIG(-1 S20633C8) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S20633C8 ::~S20633C8(){ note_dtor("S20633C8", this);}
S20633C8 ::S20633C8(){ note_ctor("S20633C8", this);} // tgen

static void Test_S20633C8()
{
  extern Class_Descriptor cd_S20633C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20633C8, buf);
    S20633C8 *dp, &lv = *(dp=new (buf) S20633C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20633C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C8)");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20633C8");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(16,8), "S20633C8");
    check_base_class_offset(lv, (S20633C6*), ABISELECT(16,8), "S20633C8");
    test_class_info(&lv, &cd_S20633C8);
    dp->~S20633C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C8(Test_S20633C8, "S20633C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20633C8C1Ev();
extern void _ZN8S20633C8D2Ev();
Name_Map name_map_S20633C8[] = {
  NSPAIR(_ZN8S20633C8C1Ev),
  NSPAIR(_ZN8S20633C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
static Base_Class bases_S20633C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20633C8[];
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY vtc_S20633C8[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern VTBL_ENTRY _ZTV8S20633C8[];
static  VTT_ENTRY vtt_S20633C8[] = {
  {&(_ZTV8S20633C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
Class_Descriptor cd_S20633C8 = {  "S20633C8", // class name
  bases_S20633C8, 3,
  &(vtc_S20633C8[0]), // expected_vtbl_contents
  &(vtt_S20633C8[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20633C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20633C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20633C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C5  : virtual S20633C6 , virtual S5217C60_nt , virtual S20633C8 , virtual S2265C38 {
  int s20633c5f0[9];
  virtual  ~S20633C5(); // _ZN8S20633C5D2Ev
  S20633C5(); // tgen
};
//SIG(-1 S20633C5) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S20633C5 ::~S20633C5(){ note_dtor("S20633C5", this);}
S20633C5 ::S20633C5(){ note_ctor("S20633C5", this);} // tgen

static void Test_S20633C5()
{
  extern Class_Descriptor cd_S20633C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S20633C5, buf);
    S20633C5 *dp, &lv = *(dp=new (buf) S20633C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S20633C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C5)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(48,40), "S20633C5");
    check_base_class_offset(lv, (S20633C6*), ABISELECT(48,40), "S20633C5");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(48,40), "S20633C5");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S20633C5");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(72,52), "S20633C5");
    check_base_class_offset(lv, (S20633C8*), 0, "S20633C5");
    check_base_class_offset(lv, (S2265C38*), 0, "S20633C5");
    check_field_offset(lv, s20633c5f0, ABISELECT(8,4), "S20633C5.s20633c5f0");
    test_class_info(&lv, &cd_S20633C5);
    dp->~S20633C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C5(Test_S20633C5, "S20633C5", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S20633C5C1Ev();
extern void _ZN8S20633C5D2Ev();
Name_Map name_map_S20633C5[] = {
  NSPAIR(_ZN8S20633C5C1Ev),
  NSPAIR(_ZN8S20633C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20633C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20633C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20633C5[];
extern void _ZN8S20633C5D1Ev();
extern void _ZN8S20633C5D0Ev();
static  VTBL_ENTRY vtc_S20633C5[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&_ZN8S20633C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C5D0Ev,
};
extern VTBL_ENTRY _ZTV8S20633C5[];
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C5[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
static  VTT_ENTRY vtt_S20633C5[] = {
  {&(_ZTV8S20633C5[7]),  7,9},
  {&(_ZTV8S20633C5[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
Class_Descriptor cd_S20633C5 = {  "S20633C5", // class name
  bases_S20633C5, 5,
  &(vtc_S20633C5[0]), // expected_vtbl_contents
  &(vtt_S20633C5[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S20633C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20633C5),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20633C5),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C12  : S5217C60_nt , S20633C6 {
};
//SIG(-1 S20633C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S20633C12()
{
  extern Class_Descriptor cd_S20633C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20633C12, buf);
    S20633C12 &lv = *(new (buf) S20633C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20633C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C12)");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S20633C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(8,4), "S20633C12");
    check_base_class_offset(lv, (S20633C6*), ABISELECT(8,4), "S20633C12");
    test_class_info(&lv, &cd_S20633C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C12(Test_S20633C12, "S20633C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
static Base_Class bases_S20633C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C12[];
Class_Descriptor cd_S20633C12 = {  "S20633C12", // class name
  bases_S20633C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20633C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C11  : virtual S5217C60_nt , S2265C38 , virtual S20633C12 , virtual S20633C8 {
  ~S20633C11(); // tgen
  S20633C11(); // tgen
};
//SIG(-1 S20633C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S20633C11 ::~S20633C11(){ note_dtor("S20633C11", this);} // tgen
S20633C11 ::S20633C11(){ note_ctor("S20633C11", this);} // tgen

static void Test_S20633C11()
{
  extern Class_Descriptor cd_S20633C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20633C11, buf);
    S20633C11 *dp, &lv = *(dp=new (buf) S20633C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20633C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C11)");
    /*is_ambiguous_... S20633C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20633C11");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(8,4), "S20633C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S20633C11");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(16,8), "S20633C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(24,12), "S20633C11");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(24,12), "S20633C11");
    check_base_class_offset(lv, (S20633C12*), ABISELECT(16,8), "S20633C11");
    /*is_ambiguous_... S20633C11::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(48,24), "S20633C11");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(48,24), "S20633C11");
    check_base_class_offset(lv, (S20633C8*), 0, "S20633C11");
    test_class_info(&lv, &cd_S20633C11);
    dp->~S20633C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C11(Test_S20633C11, "S20633C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20633C11C1Ev();
extern void _ZN9S20633C11D1Ev();
Name_Map name_map_S20633C11[] = {
  NSPAIR(_ZN9S20633C11C1Ev),
  NSPAIR(_ZN9S20633C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
static Base_Class bases_S20633C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20633C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C11[];
extern void _ZN9S20633C11D1Ev();
extern void _ZN9S20633C11D0Ev();
static  VTBL_ENTRY vtc_S20633C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&_ZN9S20633C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S20633C11[];
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
static  VTT_ENTRY vtt_S20633C11[] = {
  {&(_ZTV9S20633C11[7]),  7,9},
  {&(_ZTV9S20633C11[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
Class_Descriptor cd_S20633C11 = {  "S20633C11", // class name
  bases_S20633C11, 9,
  &(vtc_S20633C11[0]), // expected_vtbl_contents
  &(vtt_S20633C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20633C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20633C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C10  : virtual S20633C11 {
  ::S20633C8 s20633c10f0;
  ~S20633C10(); // tgen
  S20633C10(); // tgen
};
//SIG(-1 S20633C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S20633C10 ::~S20633C10(){ note_dtor("S20633C10", this);} // tgen
S20633C10 ::S20633C10(){ note_ctor("S20633C10", this);} // tgen

static void Test_S20633C10()
{
  extern Class_Descriptor cd_S20633C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20633C10, buf);
    S20633C10 *dp, &lv = *(dp=new (buf) S20633C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20633C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C10)");
    /*is_ambiguous_... S20633C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(48,24), "S20633C10");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(48,24), "S20633C10");
    check_base_class_offset(lv, (S2265C38*)(S20633C11*), 0, "S20633C10");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(56,28), "S20633C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(64,32), "S20633C10");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(64,32), "S20633C10");
    check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(56,28), "S20633C10");
    /*is_ambiguous_... S20633C10::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(88,44), "S20633C10");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(88,44), "S20633C10");
    check_base_class_offset(lv, (S20633C8*)(S20633C11*), 0, "S20633C10");
    check_base_class_offset(lv, (S20633C11*), 0, "S20633C10");
    check_field_offset(lv, s20633c10f0, ABISELECT(8,4), "S20633C10.s20633c10f0");
    test_class_info(&lv, &cd_S20633C10);
    dp->~S20633C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C10(Test_S20633C10, "S20633C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S20633C10C1Ev();
extern void _ZN9S20633C10D1Ev();
Name_Map name_map_S20633C10[] = {
  NSPAIR(_ZN9S20633C10C1Ev),
  NSPAIR(_ZN9S20633C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
static Base_Class bases_S20633C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20633C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20633C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C10[];
extern void _ZN9S20633C10D1Ev();
extern void _ZN9S20633C10D0Ev();
static  VTBL_ENTRY vtc_S20633C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&_ZN9S20633C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S20633C10[];
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__9S20633C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
static  VTT_ENTRY vtt_S20633C10[] = {
  {&(_ZTV9S20633C10[8]),  8,10},
  {&(_ZTV9S20633C10[8]),  8,10},
  {&(_ZTV9S20633C10[8]),  8,10},
  {&(_tg__ZTV9S20633C11__9S20633C10[7]),  7,9},
  {&(_tg__ZTV9S20633C11__9S20633C10[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20633C10[];
extern  VTBL_ENTRY _ZTV9S20633C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C10[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C10 = {  "S20633C10", // class name
  bases_S20633C10, 10,
  &(vtc_S20633C10[0]), // expected_vtbl_contents
  &(vtt_S20633C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S20633C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20633C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C13  : S2265C38 , virtual S20633C6 , virtual S20633C8 , virtual S20633C12 , virtual S20633C5 {
  long s20633c13f0;
  virtual  ~S20633C13(); // _ZN9S20633C13D2Ev
  S20633C13(); // tgen
};
//SIG(-1 S20633C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S20633C13 ::~S20633C13(){ note_dtor("S20633C13", this);}
S20633C13 ::S20633C13(){ note_ctor("S20633C13", this);} // tgen

static void Test_S20633C13()
{
  extern Class_Descriptor cd_S20633C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S20633C13, buf);
    S20633C13 *dp, &lv = *(dp=new (buf) S20633C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S20633C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C13)");
    /*is_ambiguous_... S20633C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20633C13");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(16,8), "S20633C13");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*), ABISELECT(16,8), "S20633C13");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(16,8), "S20633C13");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(16,8), "S20633C13");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(40,20), "S20633C13");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(40,20), "S20633C13");
    check_base_class_offset(lv, (S20633C8*), 0, "S20633C13");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), 0, "S20633C13");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(48,24), "S20633C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(56,28), "S20633C13");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(56,28), "S20633C13");
    check_base_class_offset(lv, (S20633C12*), ABISELECT(48,24), "S20633C13");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(124,80), "S20633C13");
    check_base_class_offset(lv, (S20633C5*), ABISELECT(80,40), "S20633C13");
    check_field_offset(lv, s20633c13f0, ABISELECT(8,4), "S20633C13.s20633c13f0");
    test_class_info(&lv, &cd_S20633C13);
    dp->~S20633C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C13(Test_S20633C13, "S20633C13", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN9S20633C13C1Ev();
extern void _ZN9S20633C13D2Ev();
Name_Map name_map_S20633C13[] = {
  NSPAIR(_ZN9S20633C13C1Ev),
  NSPAIR(_ZN9S20633C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
static Base_Class bases_S20633C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20633C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C13[];
extern void _ZN9S20633C13D1Ev();
extern void _ZN9S20633C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S20633C13D1Ev,_ZThn40_N9S20633C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S20633C13D0Ev,_ZThn40_N9S20633C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C13[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&_ZN9S20633C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20633C13[];
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C13[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C5__9S20633C13[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
static  VTT_ENTRY vtt_S20633C13[] = {
  {&(_ZTV9S20633C13[9]),  9,20},
  {&(_ZTV9S20633C13[9]),  9,20},
  {&(_ZTV9S20633C13[18]),  18,20},
  {&(_tg__ZTV8S20633C8__9S20633C13[4]),  4,6},
  {&(_tg__ZTV8S20633C5__9S20633C13[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C5__9S20633C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20633C13[];
extern  VTBL_ENTRY _ZTV9S20633C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C13[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20633C13D0Ev,_ZThn40_N9S20633C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20633C13D1Ev,_ZThn40_N9S20633C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C13 = {  "S20633C13", // class name
  bases_S20633C13, 11,
  &(vtc_S20633C13[0]), // expected_vtbl_contents
  &(vtt_S20633C13[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S20633C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20633C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C17  : virtual S20633C5 , S2265C38 , virtual S2265C28 {
  void *s20633c17f0;
  ~S20633C17(); // tgen
  S20633C17(); // tgen
};
//SIG(-1 S20633C17) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S20633C17 ::~S20633C17(){ note_dtor("S20633C17", this);} // tgen
S20633C17 ::S20633C17(){ note_ctor("S20633C17", this);} // tgen

static void Test_S20633C17()
{
  extern Class_Descriptor cd_S20633C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S20633C17, buf);
    S20633C17 *dp, &lv = *(dp=new (buf) S20633C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S20633C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C17)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(64,48), "S20633C17");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(64,48), "S20633C17");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(64,48), "S20633C17");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(88,60), "S20633C17");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(88,60), "S20633C17");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), 0, "S20633C17");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(96,64), "S20633C17");
    check_base_class_offset(lv, (S20633C5*), ABISELECT(16,8), "S20633C17");
    /*is_ambiguous_... S20633C17::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20633C17");
    check_base_class_offset(lv, (S2265C28*), 0, "S20633C17");
    check_field_offset(lv, s20633c17f0, ABISELECT(8,4), "S20633C17.s20633c17f0");
    test_class_info(&lv, &cd_S20633C17);
    dp->~S20633C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C17(Test_S20633C17, "S20633C17", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN9S20633C17C1Ev();
extern void _ZN9S20633C17D1Ev();
Name_Map name_map_S20633C17[] = {
  NSPAIR(_ZN9S20633C17C1Ev),
  NSPAIR(_ZN9S20633C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20633C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20633C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C17[];
extern void _ZN9S20633C17D1Ev();
extern void _ZN9S20633C17D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C17[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&_ZN9S20633C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C17D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20633C17[];
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C5__9S20633C17[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C17[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
static  VTT_ENTRY vtt_S20633C17[] = {
  {&(_ZTV9S20633C17[9]),  9,20},
  {&(_ZTV9S20633C17[18]),  18,20},
  {&(_ZTV9S20633C17[9]),  9,20},
  {&(_tg__ZTV8S20633C5__9S20633C17[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C5__9S20633C17[5]),  5,7},
  {&(_tg__ZTV8S20633C8__9S20633C17[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C17 = {  "S20633C17", // class name
  bases_S20633C17, 8,
  &(vtc_S20633C17[0]), // expected_vtbl_contents
  &(vtt_S20633C17[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI9S20633C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20633C17),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C17),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C19  : S20633C12 , S20633C6 , virtual S2265C38 {
  virtual  ~S20633C19(); // _ZN9S20633C19D2Ev
  S20633C19(); // tgen
};
//SIG(-1 S20633C19) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S20633C19 ::~S20633C19(){ note_dtor("S20633C19", this);}
S20633C19 ::S20633C19(){ note_ctor("S20633C19", this);} // tgen

static void Test_S20633C19()
{
  extern Class_Descriptor cd_S20633C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20633C19, buf);
    S20633C19 *dp, &lv = *(dp=new (buf) S20633C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20633C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C19)");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(8,4), "S20633C19");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(16,8), "S20633C19");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(16,8), "S20633C19");
    check_base_class_offset(lv, (S20633C12*), ABISELECT(8,4), "S20633C19");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(40,20), "S20633C19");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*), ABISELECT(40,20), "S20633C19");
    check_base_class_offset(lv, (S2265C38*), 0, "S20633C19");
    test_class_info(&lv, &cd_S20633C19);
    dp->~S20633C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C19(Test_S20633C19, "S20633C19", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20633C19C1Ev();
extern void _ZN9S20633C19D2Ev();
Name_Map name_map_S20633C19[] = {
  NSPAIR(_ZN9S20633C19C1Ev),
  NSPAIR(_ZN9S20633C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20633C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C19[];
extern void _ZN9S20633C19D1Ev();
extern void _ZN9S20633C19D0Ev();
static  VTBL_ENTRY vtc_S20633C19[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C19[0]),
  (VTBL_ENTRY)&_ZN9S20633C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C19D0Ev,
};
extern VTBL_ENTRY _ZTV9S20633C19[];
static  VTT_ENTRY vtt_S20633C19[] = {
  {&(_ZTV9S20633C19[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20633C19[];
extern  VTBL_ENTRY _ZTV9S20633C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C19[];
Class_Descriptor cd_S20633C19 = {  "S20633C19", // class name
  bases_S20633C19, 7,
  &(vtc_S20633C19[0]), // expected_vtbl_contents
  &(vtt_S20633C19[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20633C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20633C19),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C19),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C16  : virtual S20633C17 , virtual S20633C10 , virtual S20633C13 , virtual S20633C19 , S20633C11 {
  virtual  ~S20633C16(); // _ZN9S20633C16D2Ev
  S20633C16(); // tgen
};
//SIG(-1 S20633C16) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd Fl} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S20633C16 ::~S20633C16(){ note_dtor("S20633C16", this);}
S20633C16 ::S20633C16(){ note_ctor("S20633C16", this);} // tgen

static void Test_S20633C16()
{
  extern Class_Descriptor cd_S20633C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S20633C16, buf);
    S20633C16 *dp, &lv = *(dp=new (buf) S20633C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S20633C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C16)");
    /*is_ambiguous_... S20633C16::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(72,52), "S20633C16");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(72,52), "S20633C16");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(72,52), "S20633C16");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C13*), ABISELECT(72,52), "S20633C16");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(96,64), "S20633C16");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(96,64), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(96,64), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(96,64), "S20633C16");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), ABISELECT(8,4), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*), ABISELECT(8,4), "S20633C16");
    check_base_class_offset(lv, (S20633C8*)(S20633C13*), ABISELECT(8,4), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*), ABISELECT(8,4), "S20633C16");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(104,68), "S20633C16");
    check_base_class_offset(lv, (S2265C38*)(S20633C19*), ABISELECT(104,68), "S20633C16");
    check_base_class_offset(lv, (S20633C5*)(S20633C17*), ABISELECT(24,12), "S20633C16");
    check_base_class_offset(lv, (S20633C5*)(S20633C13*), ABISELECT(24,12), "S20633C16");
    /*is_ambiguous_... S20633C17::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*), ABISELECT(8,4), "S20633C16");
    check_base_class_offset(lv, (S2265C28*)(S20633C17*), 0, "S20633C16");
    check_base_class_offset(lv, (S20633C17*), ABISELECT(8,4), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*), ABISELECT(112,72), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(160,96), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(168,100), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C12 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(168,100), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(160,96), "S20633C16");
    check_base_class_offset(lv, (S20633C12*)(S20633C13*), ABISELECT(160,96), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(160,96), "S20633C16");
    check_base_class_offset(lv, (S20633C11*)(S20633C10*), ABISELECT(112,72), "S20633C16");
    check_base_class_offset(lv, (S20633C10*), ABISELECT(112,72), "S20633C16");
    /*is_ambiguous_... S20633C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C13*), ABISELECT(192,112), "S20633C16");
    check_base_class_offset(lv, (S20633C13*), ABISELECT(192,112), "S20633C16");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*)(S20633C19*), ABISELECT(216,124), "S20633C16");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(224,128), "S20633C16");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(224,128), "S20633C16");
    check_base_class_offset(lv, (S20633C12*)(S20633C19*), ABISELECT(216,124), "S20633C16");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C19*), ABISELECT(248,140), "S20633C16");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C19*), ABISELECT(248,140), "S20633C16");
    check_base_class_offset(lv, (S20633C19*), ABISELECT(208,120), "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*), 0, "S20633C16");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C11*), 0, "S20633C16");
    test_class_info(&lv, &cd_S20633C16);
    dp->~S20633C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C16(Test_S20633C16, "S20633C16", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN9S20633C16C1Ev();
extern void _ZN9S20633C16D2Ev();
Name_Map name_map_S20633C16[] = {
  NSPAIR(_ZN9S20633C16C1Ev),
  NSPAIR(_ZN9S20633C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C10;
extern VTBL_ENTRY _ZTI9S20633C10[];
extern  VTBL_ENTRY _ZTV9S20633C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C13;
extern VTBL_ENTRY _ZTI9S20633C13[];
extern  VTBL_ENTRY _ZTV9S20633C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C19;
extern VTBL_ENTRY _ZTI9S20633C19[];
extern  VTBL_ENTRY _ZTV9S20633C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
static Base_Class bases_S20633C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20633C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20633C17,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20633C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20633C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20633C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20633C19,    ABISELECT(208,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20633C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C16[];
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void _ZN9S20633C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void _ZN9S20633C16D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20633C16D1Ev,_ZThn72_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20633C16D0Ev,_ZThn72_N9S20633C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20633C16D1Ev,_ZThn112_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20633C16D0Ev,_ZThn112_N9S20633C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C16D1Ev,_ZThn120_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C16D0Ev,_ZThn120_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C16[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20633C16[];
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__A__9S20633C16[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C11D1Ev,_ZThn4_N9S20633C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C11D0Ev,_ZThn4_N9S20633C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11__A__9S20633C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17__9S20633C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C5__9S20633C16[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C16[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void _ZN9S20633C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
extern void _ZN9S20633C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C16[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C10__9S20633C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__9S20633C16[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11__9S20633C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void _ZN9S20633C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
extern void _ZN9S20633C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C16[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C13__9S20633C16[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C13__9S20633C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void _ZN9S20633C19D1Ev();
extern void _ZN9S20633C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C16[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C19[0]),
  (VTBL_ENTRY)&_ZN9S20633C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C19D0Ev,
};
static  VTT_ENTRY vtt_S20633C16[] = {
  {&(_ZTV9S20633C16[15]),  15,64},
  {&(_tg__ZTV9S20633C11__A__9S20633C16[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11__A__9S20633C16[5]),  5,7},
  {&(_ZTV9S20633C16[26]),  26,64},
  {&(_ZTV9S20633C16[35]),  35,64},
  {&(_ZTV9S20633C16[26]),  26,64},
  {&(_ZTV9S20633C16[45]),  45,64},
  {&(_ZTV9S20633C16[45]),  45,64},
  {&(_ZTV9S20633C16[56]),  56,64},
  {&(_ZTV9S20633C16[62]),  62,64},
  {&(_tg__ZTV9S20633C17__9S20633C16[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C17__9S20633C16[7]),  7,9},
  {&(_tg__ZTV9S20633C17__9S20633C16[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C16[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C5__9S20633C16[5]),  5,7},
  {&(_tg__ZTV8S20633C8__9S20633C16[4]),  4,6},
  {&(_tg__ZTV9S20633C10__9S20633C16[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C16[8]),  8,10},
  {&(_tg__ZTV8S20633C8__9S20633C10__9S20633C16[5]),  5,7},
  {&(_tg__ZTV9S20633C11__9S20633C16[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11__9S20633C16[5]),  5,7},
  {&(_tg__ZTV9S20633C13__9S20633C16[9]),  9,11},
  {&(_tg__ZTV8S20633C8__9S20633C13__9S20633C16[5]),  5,7},
  {&(_tg__ZTV8S20633C5__9S20633C13__9S20633C16[7]),  7,9},
  {&(_tg__ZTV9S20633C19__9S20633C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20633C16[];
extern  VTBL_ENTRY _ZTV9S20633C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C16[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C11D0Ev,_ZThn4_N9S20633C11D0Ev),
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C11D1Ev,_ZThn4_N9S20633C11D1Ev),
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C16D0Ev,_ZThn120_N9S20633C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C16D1Ev,_ZThn120_N9S20633C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20633C16D0Ev,_ZThn112_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20633C16D0Ev,_ZThn72_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev),
  (VTBL_ENTRY)_ZN9S20633C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20633C16D1Ev,_ZThn112_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20633C16D1Ev,_ZThn72_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev),
  (VTBL_ENTRY)_ZN9S20633C16D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C16 = {  "S20633C16", // class name
  bases_S20633C16, 27,
  &(vtc_S20633C16[0]), // expected_vtbl_contents
  &(vtt_S20633C16[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI9S20633C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20633C16),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C16),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C15  : virtual S20633C16 , S2265C28 , S20633C17 {
  ~S20633C15(); // tgen
  S20633C15(); // tgen
};
//SIG(-1 S20633C15) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd Fl} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} BC9 BC3}


S20633C15 ::~S20633C15(){ note_dtor("S20633C15", this);} // tgen
S20633C15 ::S20633C15(){ note_ctor("S20633C15", this);} // tgen

static void Test_S20633C15()
{
  extern Class_Descriptor cd_S20633C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20633C15, buf);
    S20633C15 *dp, &lv = *(dp=new (buf) S20633C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20633C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C15)");
    /*is_ambiguous_... S20633C15::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(88,60), "S20633C15");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(88,60), "S20633C15");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(88,60), "S20633C15");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C13*), ABISELECT(88,60), "S20633C15");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(112,72), "S20633C15");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(112,72), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(112,72), "S20633C15");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*)(S20633C16*), ABISELECT(112,72), "S20633C15");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), ABISELECT(24,12), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*), ABISELECT(24,12), "S20633C15");
    check_base_class_offset(lv, (S20633C8*)(S20633C13*), ABISELECT(24,12), "S20633C15");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*)(S20633C16*), ABISELECT(24,12), "S20633C15");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(120,76), "S20633C15");
    check_base_class_offset(lv, (S2265C38*)(S20633C19*), ABISELECT(120,76), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*), ABISELECT(40,20), "S20633C15");
    check_base_class_offset(lv, (S20633C5*)(S20633C13*), ABISELECT(40,20), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*), ABISELECT(40,20), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*), ABISELECT(24,12), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*), ABISELECT(120,76), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*), ABISELECT(120,76), "S20633C15");
    check_base_class_offset(lv, (S20633C17*)(S20633C16*), ABISELECT(24,12), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*), ABISELECT(128,80), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(176,104), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(184,108), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C12 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(184,108), "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(176,104), "S20633C15");
    check_base_class_offset(lv, (S20633C12*)(S20633C13*), ABISELECT(176,104), "S20633C15");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*)(S20633C16*), ABISELECT(176,104), "S20633C15");
    check_base_class_offset(lv, (S20633C11*)(S20633C10*), ABISELECT(128,80), "S20633C15");
    check_base_class_offset(lv, (S20633C10*)(S20633C16*), ABISELECT(128,80), "S20633C15");
    /*is_ambiguous_... S20633C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C13*), ABISELECT(208,120), "S20633C15");
    check_base_class_offset(lv, (S20633C13*)(S20633C16*), ABISELECT(208,120), "S20633C15");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*)(S20633C19*), ABISELECT(232,132), "S20633C15");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(240,136), "S20633C15");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(240,136), "S20633C15");
    check_base_class_offset(lv, (S20633C12*)(S20633C19*), ABISELECT(232,132), "S20633C15");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C19*), ABISELECT(264,148), "S20633C15");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C19*), ABISELECT(264,148), "S20633C15");
    check_base_class_offset(lv, (S20633C19*)(S20633C16*), ABISELECT(224,128), "S20633C15");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*)(S20633C16*), ABISELECT(16,8), "S20633C15");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C11*)(S20633C16*), ABISELECT(16,8), "S20633C15");
    check_base_class_offset(lv, (S20633C16*), ABISELECT(16,8), "S20633C15");
    /*is_ambiguous_... S20633C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*), 0, "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*), 0, "S20633C15");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C17*), 0, "S20633C15");
    test_class_info(&lv, &cd_S20633C15);
    dp->~S20633C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C15(Test_S20633C15, "S20633C15", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN9S20633C15C1Ev();
extern void _ZN9S20633C15D1Ev();
Name_Map name_map_S20633C15[] = {
  NSPAIR(_ZN9S20633C15C1Ev),
  NSPAIR(_ZN9S20633C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C10;
extern VTBL_ENTRY _ZTI9S20633C10[];
extern  VTBL_ENTRY _ZTV9S20633C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C13;
extern VTBL_ENTRY _ZTI9S20633C13[];
extern  VTBL_ENTRY _ZTV9S20633C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C19;
extern VTBL_ENTRY _ZTI9S20633C19[];
extern  VTBL_ENTRY _ZTV9S20633C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C16;
extern VTBL_ENTRY _ZTI9S20633C16[];
extern  VTBL_ENTRY _ZTV9S20633C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
static Base_Class bases_S20633C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20633C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(40,20), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20633C17,    ABISELECT(24,12), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20633C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20633C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20633C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20633C19,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20633C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20633C16,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20633C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C15[];
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void _ZN9S20633C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void _ZN9S20633C15D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C15D1Ev,_ZThn8_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C15D0Ev,_ZThn8_N9S20633C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C15D1Ev,_ZThn12_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C15D0Ev,_ZThn12_N9S20633C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S20633C15D1Ev,_ZThn20_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S20633C15D0Ev,_ZThn20_N9S20633C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20633C15D1Ev,_ZThn80_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20633C15D0Ev,_ZThn80_N9S20633C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C15D1Ev,_ZThn120_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C15D0Ev,_ZThn120_N9S20633C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn128_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn128_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C15[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(72,52),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20633C15[];
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__A__9S20633C15[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S20633C17D1Ev,_ZThn20_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S20633C17D0Ev,_ZThn20_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17__A__9S20633C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C17D1Ev,_ZThn12_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C17D0Ev,_ZThn12_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C17__A__9S20633C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void _ZN9S20633C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void _ZN9S20633C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C15[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C119S20633C16__A1__9S20633C15[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C11D1Ev,_ZThn4_N9S20633C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C11D0Ev,_ZThn4_N9S20633C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C119S20633C16__A1__9S20633C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C16__9S20633C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C16__9S20633C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20633C16D1Ev,_ZThn72_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20633C16D0Ev,_ZThn72_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C16__9S20633C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20633C16D1Ev,_ZThn112_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20633C16D0Ev,_ZThn112_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C16__9S20633C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C16D1Ev,_ZThn120_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C16D0Ev,_ZThn120_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C16__9S20633C15[] = {
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17__9S20633C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C5__9S20633C15[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C15[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void _ZN9S20633C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
extern void _ZN9S20633C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C10__9S20633C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__9S20633C15[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11__9S20633C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void _ZN9S20633C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
extern void _ZN9S20633C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C13__9S20633C15[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C13__9S20633C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void _ZN9S20633C19D1Ev();
extern void _ZN9S20633C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C15[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C19[0]),
  (VTBL_ENTRY)&_ZN9S20633C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C19D0Ev,
};
static  VTT_ENTRY vtt_S20633C15[] = {
  {&(_ZTV9S20633C15[16]),  16,82},
  {&(_tg__ZTV9S20633C17__A__9S20633C15[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C17__A__9S20633C15[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C17__A__9S20633C15[5]),  5,7},
  {&(_ZTV9S20633C15[33]),  33,82},
  {&(_ZTV9S20633C15[44]),  44,82},
  {&(_ZTV9S20633C15[53]),  53,82},
  {&(_ZTV9S20633C15[44]),  44,82},
  {&(_ZTV9S20633C15[63]),  63,82},
  {&(_ZTV9S20633C15[63]),  63,82},
  {&(_ZTV9S20633C15[74]),  74,82},
  {&(_ZTV9S20633C15[80]),  80,82},
  {&(_tg__ZTV9S20633C16__9S20633C15[15]),  15,17},
  {&(_tg__ZTV9S20633C119S20633C16__A1__9S20633C15[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C119S20633C16__A1__9S20633C15[5]),  5,7},
  {&(_tg__ZTV9S20633C17__9S20633C16__9S20633C15[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C16__9S20633C15[7]),  7,9},
  {&(_tg__ZTV9S20633C17__9S20633C16__9S20633C15[9]),  9,11},
  {&(_tg__ZTV9S20633C10__9S20633C16__9S20633C15[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C16__9S20633C15[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C16__9S20633C15[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C16__9S20633C15[4]),  4,6},
  {&(_tg__ZTV9S20633C17__9S20633C15[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C17__9S20633C15[7]),  7,9},
  {&(_tg__ZTV9S20633C17__9S20633C15[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C15[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C5__9S20633C15[5]),  5,7},
  {&(_tg__ZTV8S20633C8__9S20633C15[4]),  4,6},
  {&(_tg__ZTV9S20633C10__9S20633C15[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C15[8]),  8,10},
  {&(_tg__ZTV8S20633C8__9S20633C10__9S20633C15[5]),  5,7},
  {&(_tg__ZTV9S20633C11__9S20633C15[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11__9S20633C15[5]),  5,7},
  {&(_tg__ZTV9S20633C13__9S20633C15[9]),  9,11},
  {&(_tg__ZTV8S20633C8__9S20633C13__9S20633C15[5]),  5,7},
  {&(_tg__ZTV8S20633C5__9S20633C13__9S20633C15[7]),  7,9},
  {&(_tg__ZTV9S20633C19__9S20633C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20633C15[];
extern  VTBL_ENTRY _ZTV9S20633C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C15[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C16D0Ev,_ZThn120_N9S20633C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C16D1Ev,_ZThn120_N9S20633C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C11D0Ev,_ZThn4_N9S20633C11D0Ev),
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C11D1Ev,_ZThn4_N9S20633C11D1Ev),
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20633C16D0Ev,_ZThn112_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20633C16D0Ev,_ZThn72_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev),
  (VTBL_ENTRY)_ZN9S20633C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20633C16D1Ev,_ZThn112_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20633C16D1Ev,_ZThn72_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev),
  (VTBL_ENTRY)_ZN9S20633C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C17D0Ev,_ZThn12_N9S20633C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20633C17D0Ev,_ZThn20_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C17D1Ev,_ZThn12_N9S20633C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20633C17D1Ev,_ZThn20_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn128_N9S20633C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn128_N9S20633C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C15D0Ev,_ZThn120_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20633C15D0Ev,_ZThn80_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20633C15D0Ev,_ZThn20_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C15D0Ev,_ZThn12_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C15D0Ev,_ZThn8_N9S20633C15D0Ev),
  (VTBL_ENTRY)_ZN9S20633C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C15D1Ev,_ZThn120_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20633C15D1Ev,_ZThn80_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20633C15D1Ev,_ZThn20_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C15D1Ev,_ZThn12_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C15D1Ev,_ZThn8_N9S20633C15D1Ev),
  (VTBL_ENTRY)_ZN9S20633C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C15 = {  "S20633C15", // class name
  bases_S20633C15, 31,
  &(vtc_S20633C15[0]), // expected_vtbl_contents
  &(vtt_S20633C15[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI9S20633C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20633C15),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C15),37, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C14  : virtual S5217C60_nt , S20633C15 {
  ~S20633C14(); // tgen
  S20633C14(); // tgen
};
//SIG(-1 S20633C14) C1{ VBC2{ m Fp} BC3{ VBC4{ VBC5{ VBC6{ VBC7{ BC2 Fp[2]} VBC2 VBC8{ VBC2 VBC7 vd} VBC9{ m} vd Fi[9]} BC9 VBC10{ m} Fp} VBC11{ VBC12{ VBC2 BC9 VBC13{ BC2 BC7} VBC8} FC8} VBC14{ BC9 VBC7 VBC8 VBC13 VBC6 vd Fl} VBC15{ BC13 BC7 VBC9 vd} BC12 vd} BC10 BC5}}


S20633C14 ::~S20633C14(){ note_dtor("S20633C14", this);} // tgen
S20633C14 ::S20633C14(){ note_ctor("S20633C14", this);} // tgen

static void Test_S20633C14()
{
  extern Class_Descriptor cd_S20633C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20633C14, buf);
    S20633C14 *dp, &lv = *(dp=new (buf) S20633C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20633C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C14)");
    /*is_ambiguous_... S20633C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S20633C14");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(16,8), "S20633C14");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(16,8), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(16,8), "S20633C14");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*)(S20633C16*), ABISELECT(16,8), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(96,64), "S20633C14");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(96,64), "S20633C14");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(96,64), "S20633C14");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C13*), ABISELECT(96,64), "S20633C14");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), ABISELECT(32,16), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*), ABISELECT(32,16), "S20633C14");
    check_base_class_offset(lv, (S20633C8*)(S20633C13*), ABISELECT(32,16), "S20633C14");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*)(S20633C16*), ABISELECT(32,16), "S20633C14");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(120,76), "S20633C14");
    check_base_class_offset(lv, (S2265C38*)(S20633C19*), ABISELECT(120,76), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*), ABISELECT(48,24), "S20633C14");
    check_base_class_offset(lv, (S20633C5*)(S20633C13*), ABISELECT(48,24), "S20633C14");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*)(S20633C15*), ABISELECT(48,24), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*), ABISELECT(32,16), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*), ABISELECT(120,76), "S20633C14");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*)(S20633C15*), ABISELECT(120,76), "S20633C14");
    check_base_class_offset(lv, (S20633C17*)(S20633C16*), ABISELECT(32,16), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*), ABISELECT(128,80), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(176,104), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(184,108), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C12 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(184,108), "S20633C14");
    /*is_ambiguous_... S20633C14::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(176,104), "S20633C14");
    check_base_class_offset(lv, (S20633C12*)(S20633C13*), ABISELECT(176,104), "S20633C14");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*)(S20633C16*), ABISELECT(176,104), "S20633C14");
    check_base_class_offset(lv, (S20633C11*)(S20633C10*), ABISELECT(128,80), "S20633C14");
    check_base_class_offset(lv, (S20633C10*)(S20633C16*), ABISELECT(128,80), "S20633C14");
    /*is_ambiguous_... S20633C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C13*), ABISELECT(208,120), "S20633C14");
    check_base_class_offset(lv, (S20633C13*)(S20633C16*), ABISELECT(208,120), "S20633C14");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*)(S20633C19*), ABISELECT(232,132), "S20633C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(240,136), "S20633C14");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(240,136), "S20633C14");
    check_base_class_offset(lv, (S20633C12*)(S20633C19*), ABISELECT(232,132), "S20633C14");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C19*), ABISELECT(264,148), "S20633C14");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C19*), ABISELECT(264,148), "S20633C14");
    check_base_class_offset(lv, (S20633C19*)(S20633C16*), ABISELECT(224,128), "S20633C14");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*)(S20633C16*), ABISELECT(24,12), "S20633C14");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C11*)(S20633C16*), ABISELECT(24,12), "S20633C14");
    check_base_class_offset(lv, (S20633C16*)(S20633C15*), ABISELECT(24,12), "S20633C14");
    /*is_ambiguous_... S20633C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C15*), 0, "S20633C14");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*)(S20633C15*), 0, "S20633C14");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C17*)(S20633C15*), 0, "S20633C14");
    check_base_class_offset(lv, (S20633C15*), 0, "S20633C14");
    test_class_info(&lv, &cd_S20633C14);
    dp->~S20633C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C14(Test_S20633C14, "S20633C14", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN9S20633C14C1Ev();
extern void _ZN9S20633C14D1Ev();
Name_Map name_map_S20633C14[] = {
  NSPAIR(_ZN9S20633C14C1Ev),
  NSPAIR(_ZN9S20633C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C10;
extern VTBL_ENTRY _ZTI9S20633C10[];
extern  VTBL_ENTRY _ZTV9S20633C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C13;
extern VTBL_ENTRY _ZTI9S20633C13[];
extern  VTBL_ENTRY _ZTV9S20633C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C19;
extern VTBL_ENTRY _ZTI9S20633C19[];
extern  VTBL_ENTRY _ZTV9S20633C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C16;
extern VTBL_ENTRY _ZTI9S20633C16[];
extern  VTBL_ENTRY _ZTV9S20633C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S20633C15;
extern VTBL_ENTRY _ZTI9S20633C15[];
extern  VTBL_ENTRY _ZTV9S20633C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C15[];
static Base_Class bases_S20633C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20633C8,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20633C17,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20633C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20633C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20633C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20633C19,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20633C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20633C16,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20633C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20633C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20633C14[];
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void _ZN9S20633C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void _ZN9S20633C14D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C14D1Ev,_ZThn12_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C14D0Ev,_ZThn12_N9S20633C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20633C14D1Ev,_ZThn16_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S20633C14D0Ev,_ZThn16_N9S20633C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S20633C14D1Ev,_ZThn24_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S20633C14D0Ev,_ZThn24_N9S20633C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20633C14D1Ev,_ZThn80_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S20633C14D0Ev,_ZThn80_N9S20633C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C14D1Ev,_ZThn120_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C14D0Ev,_ZThn120_N9S20633C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C14D1Ev,_ZThn128_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C14D0Ev,_ZThn128_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C14[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20633C14[];
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void _ZN9S20633C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void _ZN9S20633C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C15__9S20633C14[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C179S20633C15__A1__9S20633C14[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn48_N9S20633C17D1Ev,_ZThn24_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn48_N9S20633C17D0Ev,_ZThn24_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C179S20633C15__A1__9S20633C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn32_N9S20633C17D1Ev,_ZThn16_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn32_N9S20633C17D0Ev,_ZThn16_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C179S20633C15__A1__9S20633C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C15D1Ev,_ZThn12_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C15D0Ev,_ZThn12_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C15__9S20633C14[] = {
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S20633C15D1Ev,_ZThn16_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S20633C15D0Ev,_ZThn16_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C15__9S20633C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S20633C15D1Ev,_ZThn24_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S20633C15D0Ev,_ZThn24_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C15__9S20633C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20633C15D1Ev,_ZThn80_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20633C15D0Ev,_ZThn80_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C15__9S20633C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C15D1Ev,_ZThn120_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C15D0Ev,_ZThn120_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C15__9S20633C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn128_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn128_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C15__9S20633C14[] = {
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void _ZN9S20633C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void _ZN9S20633C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C14[] = {
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C119S20633C16__A1__9S20633C14[] = {
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C11D1Ev,_ZThn4_N9S20633C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C11D0Ev,_ZThn4_N9S20633C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C119S20633C16__A1__9S20633C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C16__9S20633C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C16__9S20633C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn104_N9S20633C16D1Ev,_ZThn68_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn104_N9S20633C16D0Ev,_ZThn68_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C16__9S20633C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S20633C16D1Ev,_ZThn108_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S20633C16D0Ev,_ZThn108_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C16__9S20633C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-184,-108),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn200_N9S20633C16D1Ev,_ZThn116_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn200_N9S20633C16D0Ev,_ZThn116_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C16__9S20633C14[] = {
  ABISELECT(-200,-116),
  ABISELECT(-104,-52),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17__9S20633C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C5__9S20633C14[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C14[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void _ZN9S20633C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
extern void _ZN9S20633C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C10__9S20633C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__9S20633C14[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11__9S20633C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void _ZN9S20633C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
extern void _ZN9S20633C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C13__9S20633C14[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C13__9S20633C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void _ZN9S20633C19D1Ev();
extern void _ZN9S20633C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C14[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C19[0]),
  (VTBL_ENTRY)&_ZN9S20633C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C19D0Ev,
};
static  VTT_ENTRY vtt_S20633C14[] = {
  {&(_ZTV9S20633C14[16]),  16,82},
  {&(_tg__ZTV9S20633C15__9S20633C14[16]),  16,18},
  {&(_tg__ZTV9S20633C179S20633C15__A1__9S20633C14[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C179S20633C15__A1__9S20633C14[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C179S20633C15__A1__9S20633C14[5]),  5,7},
  {&(_tg__ZTV9S20633C16__9S20633C15__9S20633C14[15]),  15,17},
  {&(_tg__ZTV9S20633C17__9S20633C15__9S20633C14[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C15__9S20633C14[7]),  7,9},
  {&(_tg__ZTV9S20633C17__9S20633C15__9S20633C14[9]),  9,11},
  {&(_tg__ZTV9S20633C10__9S20633C15__9S20633C14[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C15__9S20633C14[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C15__9S20633C14[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C15__9S20633C14[4]),  4,6},
  {&(_ZTV9S20633C14[33]),  33,82},
  {&(_ZTV9S20633C14[44]),  44,82},
  {&(_ZTV9S20633C14[53]),  53,82},
  {&(_ZTV9S20633C14[44]),  44,82},
  {&(_ZTV9S20633C14[63]),  63,82},
  {&(_ZTV9S20633C14[63]),  63,82},
  {&(_ZTV9S20633C14[74]),  74,82},
  {&(_ZTV9S20633C14[80]),  80,82},
  {&(_tg__ZTV9S20633C16__9S20633C14[15]),  15,17},
  {&(_tg__ZTV9S20633C119S20633C16__A1__9S20633C14[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C119S20633C16__A1__9S20633C14[5]),  5,7},
  {&(_tg__ZTV9S20633C17__9S20633C16__9S20633C14[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C16__9S20633C14[7]),  7,9},
  {&(_tg__ZTV9S20633C17__9S20633C16__9S20633C14[9]),  9,11},
  {&(_tg__ZTV9S20633C10__9S20633C16__9S20633C14[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C16__9S20633C14[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C16__9S20633C14[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C16__9S20633C14[4]),  4,6},
  {&(_tg__ZTV9S20633C17__9S20633C14[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C17__9S20633C14[7]),  7,9},
  {&(_tg__ZTV9S20633C17__9S20633C14[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C14[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C5__9S20633C14[5]),  5,7},
  {&(_tg__ZTV8S20633C8__9S20633C14[4]),  4,6},
  {&(_tg__ZTV9S20633C10__9S20633C14[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C14[8]),  8,10},
  {&(_tg__ZTV8S20633C8__9S20633C10__9S20633C14[5]),  5,7},
  {&(_tg__ZTV9S20633C11__9S20633C14[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11__9S20633C14[5]),  5,7},
  {&(_tg__ZTV9S20633C13__9S20633C14[9]),  9,11},
  {&(_tg__ZTV8S20633C8__9S20633C13__9S20633C14[5]),  5,7},
  {&(_tg__ZTV8S20633C5__9S20633C13__9S20633C14[7]),  7,9},
  {&(_tg__ZTV9S20633C19__9S20633C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20633C14[];
extern  VTBL_ENTRY _ZTV9S20633C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C14[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20633C16D0Ev,_ZThn116_N9S20633C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20633C16D1Ev,_ZThn116_N9S20633C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C11D0Ev,_ZThn4_N9S20633C11D0Ev),
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C11D1Ev,_ZThn4_N9S20633C11D1Ev),
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20633C16D0Ev,_ZThn108_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20633C16D0Ev,_ZThn68_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev),
  (VTBL_ENTRY)_ZN9S20633C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20633C16D1Ev,_ZThn108_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20633C16D1Ev,_ZThn68_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev),
  (VTBL_ENTRY)_ZN9S20633C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn128_N9S20633C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn128_N9S20633C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20633C17D0Ev,_ZThn16_N9S20633C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20633C17D0Ev,_ZThn24_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20633C17D1Ev,_ZThn16_N9S20633C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20633C17D1Ev,_ZThn24_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C15D0Ev,_ZThn120_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20633C15D0Ev,_ZThn80_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20633C15D0Ev,_ZThn24_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20633C15D0Ev,_ZThn16_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C15D0Ev,_ZThn12_N9S20633C15D0Ev),
  (VTBL_ENTRY)_ZN9S20633C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C15D1Ev,_ZThn120_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20633C15D1Ev,_ZThn80_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20633C15D1Ev,_ZThn24_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20633C15D1Ev,_ZThn16_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C15D1Ev,_ZThn12_N9S20633C15D1Ev),
  (VTBL_ENTRY)_ZN9S20633C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C14D0Ev,_ZThn128_N9S20633C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C14D1Ev,_ZThn128_N9S20633C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C14D0Ev,_ZThn120_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20633C14D0Ev,_ZThn80_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20633C14D0Ev,_ZThn24_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20633C14D0Ev,_ZThn16_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C14D0Ev,_ZThn12_N9S20633C14D0Ev),
  (VTBL_ENTRY)_ZN9S20633C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C14D1Ev,_ZThn120_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20633C14D1Ev,_ZThn80_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20633C14D1Ev,_ZThn24_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20633C14D1Ev,_ZThn16_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C14D1Ev,_ZThn12_N9S20633C14D1Ev),
  (VTBL_ENTRY)_ZN9S20633C14D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C14 = {  "S20633C14", // class name
  bases_S20633C14, 32,
  &(vtc_S20633C14[0]), // expected_vtbl_contents
  &(vtt_S20633C14[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI9S20633C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20633C14),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20633C14),46, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C4  : virtual S20633C5 , virtual S20633C10 , virtual S20633C13 , S20633C14 {
  virtual  ~S20633C4(); // _ZN8S20633C4D2Ev
  S20633C4(); // tgen
};
//SIG(-1 S20633C4) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} VBC7{ VBC8{ VBC4 BC6 VBC9{ BC4 BC3} VBC5} FC5} VBC10{ BC6 VBC3 VBC5 VBC9 VBC2 vd Fl} BC11{ VBC4 BC12{ VBC13{ VBC14{ VBC2 BC6 VBC15{ m} Fp} VBC7 VBC10 VBC16{ BC9 BC3 VBC6 vd} BC8 vd} BC15 BC14}} vd}


 S20633C4 ::~S20633C4(){ note_dtor("S20633C4", this);}
S20633C4 ::S20633C4(){ note_ctor("S20633C4", this);} // tgen

static void Test_S20633C4()
{
  extern Class_Descriptor cd_S20633C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20633C4, buf);
    S20633C4 *dp, &lv = *(dp=new (buf) S20633C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20633C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C4)");
    /*is_ambiguous_... S20633C4::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(64,48), "S20633C4");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(64,48), "S20633C4");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(64,48), "S20633C4");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C13*), ABISELECT(64,48), "S20633C4");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(88,60), "S20633C4");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(88,60), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(88,60), "S20633C4");
    /*is_ambiguous_... S20633C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C14*), ABISELECT(88,60), "S20633C4");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*)(S20633C16*), ABISELECT(88,60), "S20633C4");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), ABISELECT(16,8), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*), ABISELECT(16,8), "S20633C4");
    check_base_class_offset(lv, (S20633C8*)(S20633C13*), ABISELECT(16,8), "S20633C4");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*)(S20633C16*), ABISELECT(16,8), "S20633C4");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(96,64), "S20633C4");
    check_base_class_offset(lv, (S2265C38*)(S20633C19*), ABISELECT(96,64), "S20633C4");
    check_base_class_offset(lv, (S20633C5*), ABISELECT(16,8), "S20633C4");
    check_base_class_offset(lv, (S20633C5*)(S20633C13*), ABISELECT(16,8), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*), ABISELECT(16,8), "S20633C4");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*)(S20633C15*)(S20633C14*), ABISELECT(16,8), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*), ABISELECT(104,68), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(152,92), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(160,96), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C12 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(160,96), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(152,92), "S20633C4");
    check_base_class_offset(lv, (S20633C12*)(S20633C13*), ABISELECT(152,92), "S20633C4");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*)(S20633C16*), ABISELECT(152,92), "S20633C4");
    check_base_class_offset(lv, (S20633C11*)(S20633C10*), ABISELECT(104,68), "S20633C4");
    check_base_class_offset(lv, (S20633C10*), ABISELECT(104,68), "S20633C4");
    check_base_class_offset(lv, (S20633C10*)(S20633C16*), ABISELECT(104,68), "S20633C4");
    /*is_ambiguous_... S20633C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C13*), ABISELECT(184,108), "S20633C4");
    check_base_class_offset(lv, (S20633C13*), ABISELECT(184,108), "S20633C4");
    check_base_class_offset(lv, (S20633C13*)(S20633C16*), ABISELECT(184,108), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*), ABISELECT(208,120), "S20633C4");
    /*is_ambiguous_... S20633C4::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*), ABISELECT(224,128), "S20633C4");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*)(S20633C15*)(S20633C14*), ABISELECT(224,128), "S20633C4");
    check_base_class_offset(lv, (S20633C17*)(S20633C16*), ABISELECT(208,120), "S20633C4");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*)(S20633C19*), ABISELECT(232,132), "S20633C4");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(240,136), "S20633C4");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(240,136), "S20633C4");
    check_base_class_offset(lv, (S20633C12*)(S20633C19*), ABISELECT(232,132), "S20633C4");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C19*), ABISELECT(264,148), "S20633C4");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C19*), ABISELECT(264,148), "S20633C4");
    check_base_class_offset(lv, (S20633C19*)(S20633C16*), ABISELECT(224,128), "S20633C4");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*)(S20633C16*), ABISELECT(200,116), "S20633C4");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C11*)(S20633C16*), ABISELECT(200,116), "S20633C4");
    check_base_class_offset(lv, (S20633C16*)(S20633C15*)(S20633C14*), ABISELECT(200,116), "S20633C4");
    /*is_ambiguous_... S20633C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C15*)(S20633C14*), 0, "S20633C4");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*)(S20633C15*)(S20633C14*), 0, "S20633C4");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C17*)(S20633C15*)(S20633C14*), 0, "S20633C4");
    check_base_class_offset(lv, (S20633C15*)(S20633C14*), 0, "S20633C4");
    check_base_class_offset(lv, (S20633C14*), 0, "S20633C4");
    test_class_info(&lv, &cd_S20633C4);
    dp->~S20633C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C4(Test_S20633C4, "S20633C4", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S20633C4C1Ev();
extern void _ZN8S20633C4D2Ev();
Name_Map name_map_S20633C4[] = {
  NSPAIR(_ZN8S20633C4C1Ev),
  NSPAIR(_ZN8S20633C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C10;
extern VTBL_ENTRY _ZTI9S20633C10[];
extern  VTBL_ENTRY _ZTV9S20633C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C13;
extern VTBL_ENTRY _ZTI9S20633C13[];
extern  VTBL_ENTRY _ZTV9S20633C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C13[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C19;
extern VTBL_ENTRY _ZTI9S20633C19[];
extern  VTBL_ENTRY _ZTV9S20633C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C16;
extern VTBL_ENTRY _ZTI9S20633C16[];
extern  VTBL_ENTRY _ZTV9S20633C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S20633C15;
extern VTBL_ENTRY _ZTI9S20633C15[];
extern  VTBL_ENTRY _ZTV9S20633C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C15[];
extern Class_Descriptor cd_S20633C14;
extern VTBL_ENTRY _ZTI9S20633C14[];
extern  VTBL_ENTRY _ZTV9S20633C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C14[];
static Base_Class bases_S20633C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20633C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20633C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20633C10,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20633C13,    ABISELECT(184,108), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20633C17,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20633C19,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(200,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20633C11,    ABISELECT(200,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20633C16,    ABISELECT(200,116), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20633C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20633C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20633C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20633C4[];
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void _ZN8S20633C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void _ZN8S20633C4D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20633C4D1Ev,_ZThn8_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20633C4D0Ev,_ZThn8_N8S20633C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20633C4D1Ev,_ZThn68_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20633C4D0Ev,_ZThn68_N8S20633C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn184_N8S20633C4D1Ev,_ZThn108_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn184_N8S20633C4D0Ev,_ZThn108_N8S20633C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20633C4D1Ev,_ZThn116_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20633C4D0Ev,_ZThn116_N8S20633C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn208_N8S20633C4D1Ev,_ZThn120_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn208_N8S20633C4D0Ev,_ZThn120_N8S20633C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20633C4D1Ev,_ZTv0_n16_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20633C4D1Ev,_ZThn128_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20633C4D0Ev,_ZTv0_n16_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20633C4D0Ev,_ZThn128_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C4[] = {
  ABISELECT(224,128),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,120),
  ABISELECT(200,116),
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-200,-116),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-128,-64),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20633C4D1Ev,_ZTv0_n16_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20633C4D0Ev,_ZTv0_n16_N8S20633C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20633C4[];
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void _ZN9S20633C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void _ZN9S20633C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C14__8S20633C4[] = {
  ABISELECT(224,128),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,120),
  ABISELECT(200,116),
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void _ZN9S20633C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void _ZN9S20633C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C159S20633C14__8S20633C4[] = {
  ABISELECT(224,128),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,120),
  ABISELECT(200,116),
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C179S20633C159S20633C14__A1__8S20633C4[] = {
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C179S20633C159S20633C14__A1__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn200_N9S20633C15D1Ev,_ZThn116_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn200_N9S20633C15D0Ev,_ZThn116_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C159S20633C14__8S20633C4[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-200,-116),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C15D1Ev,_ZThn120_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C15D0Ev,_ZThn120_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C159S20633C14__8S20633C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C15D1Ev,_ZThn8_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C15D0Ev,_ZThn8_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C159S20633C14__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S20633C15D1Ev,_ZThn68_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn104_N9S20633C15D0Ev,_ZThn68_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C159S20633C14__8S20633C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn184_N9S20633C15D1Ev,_ZThn108_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn184_N9S20633C15D0Ev,_ZThn108_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C159S20633C14__8S20633C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn128_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn128_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C159S20633C14__8S20633C4[] = {
  ABISELECT(-224,-128),
  ABISELECT(-128,-64),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn200_N9S20633C14D1Ev,_ZThn116_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn200_N9S20633C14D0Ev,_ZThn116_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C14__8S20633C4[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-200,-116),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20633C14D1Ev,_ZThn120_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20633C14D0Ev,_ZThn120_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C14__8S20633C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20633C14D1Ev,_ZThn8_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20633C14D0Ev,_ZThn8_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C14__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20633C14D1Ev,_ZThn68_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn104_N9S20633C14D0Ev,_ZThn68_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C14__8S20633C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn184_N9S20633C14D1Ev,_ZThn108_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn184_N9S20633C14D0Ev,_ZThn108_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C14__8S20633C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C14D1Ev,_ZThn128_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C14D0Ev,_ZThn128_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C14__8S20633C4[] = {
  ABISELECT(-224,-128),
  ABISELECT(-128,-64),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void _ZN9S20633C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
extern void _ZN9S20633C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__8S20633C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C10__8S20633C4[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__8S20633C4[] = {
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11__8S20633C4[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void _ZN9S20633C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
extern void _ZN9S20633C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__8S20633C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C13__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void _ZN9S20633C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void _ZN9S20633C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__8S20633C4[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C119S20633C16__A1__8S20633C4[] = {
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C119S20633C16__A1__8S20633C4[] = {
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C16__8S20633C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-8,-4),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C16__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C16__8S20633C4[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(96,48),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C16__8S20633C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(16,8),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C16__8S20633C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__8S20633C4[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  0,
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17__8S20633C4[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(192,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void _ZN9S20633C19D1Ev();
extern void _ZN9S20633C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20633C19__8S20633C4[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C19[0]),
  (VTBL_ENTRY)&_ZN9S20633C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C19D0Ev,
};
static  VTT_ENTRY vtt_S20633C4[] = {
  {&(_ZTV8S20633C4[16]),  16,82},
  {&(_tg__ZTV9S20633C14__8S20633C4[16]),  16,18},
  {&(_tg__ZTV9S20633C159S20633C14__8S20633C4[16]),  16,18},
  {&(_tg__ZTV9S20633C179S20633C159S20633C14__A1__8S20633C4[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C179S20633C159S20633C14__A1__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C179S20633C159S20633C14__A1__8S20633C4[7]),  7,9},
  {&(_tg__ZTV9S20633C16__9S20633C159S20633C14__8S20633C4[15]),  15,17},
  {&(_tg__ZTV9S20633C17__9S20633C159S20633C14__8S20633C4[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C159S20633C14__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C159S20633C14__8S20633C4[7]),  7,9},
  {&(_tg__ZTV9S20633C10__9S20633C159S20633C14__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C159S20633C14__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C159S20633C14__8S20633C4[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C159S20633C14__8S20633C4[4]),  4,6},
  {&(_tg__ZTV9S20633C16__9S20633C14__8S20633C4[15]),  15,17},
  {&(_tg__ZTV9S20633C17__9S20633C14__8S20633C4[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C14__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C14__8S20633C4[7]),  7,9},
  {&(_tg__ZTV9S20633C10__9S20633C14__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C14__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C14__8S20633C4[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C14__8S20633C4[4]),  4,6},
  {&(_ZTV8S20633C4[25]),  25,82},
  {&(_ZTV8S20633C4[25]),  25,82},
  {&(_ZTV8S20633C4[35]),  35,82},
  {&(_ZTV8S20633C4[35]),  35,82},
  {&(_ZTV8S20633C4[46]),  46,82},
  {&(_ZTV8S20633C4[63]),  63,82},
  {&(_ZTV8S20633C4[74]),  74,82},
  {&(_ZTV8S20633C4[80]),  80,82},
  {&(_tg__ZTV8S20633C5__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C4[4]),  4,6},
  {&(_tg__ZTV9S20633C10__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C10__8S20633C4[8]),  8,10},
  {&(_tg__ZTV8S20633C8__9S20633C10__8S20633C4[5]),  5,7},
  {&(_tg__ZTV9S20633C11__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11__8S20633C4[5]),  5,7},
  {&(_tg__ZTV9S20633C13__8S20633C4[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C13__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C13__8S20633C4[7]),  7,9},
  {&(_tg__ZTV9S20633C16__8S20633C4[15]),  15,17},
  {&(_tg__ZTV9S20633C119S20633C16__A1__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C119S20633C16__A1__8S20633C4[5]),  5,7},
  {&(_tg__ZTV9S20633C17__9S20633C16__8S20633C4[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C16__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C16__8S20633C4[7]),  7,9},
  {&(_tg__ZTV9S20633C10__9S20633C16__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C16__8S20633C4[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C16__8S20633C4[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C16__8S20633C4[4]),  4,6},
  {&(_tg__ZTV9S20633C17__8S20633C4[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C17__8S20633C4[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C17__8S20633C4[7]),  7,9},
  {&(_tg__ZTV9S20633C19__8S20633C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20633C4[];
extern  VTBL_ENTRY _ZTV8S20633C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C4[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev),
  (VTBL_ENTRY)_ZN9S20633C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev),
  (VTBL_ENTRY)_ZN9S20633C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C14D0Ev,_ZThn128_N9S20633C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C14D1Ev,_ZThn128_N9S20633C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn128_N9S20633C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn128_N9S20633C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D0Ev,_ZThn8_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C17D1Ev,_ZThn8_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20633C15D0Ev,_ZThn108_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20633C15D0Ev,_ZThn68_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C15D0Ev,_ZThn8_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C15D0Ev,_ZThn120_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20633C15D0Ev,_ZThn116_N9S20633C15D0Ev),
  (VTBL_ENTRY)_ZN9S20633C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20633C15D1Ev,_ZThn108_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20633C15D1Ev,_ZThn68_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C15D1Ev,_ZThn8_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C15D1Ev,_ZThn120_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20633C15D1Ev,_ZThn116_N9S20633C15D1Ev),
  (VTBL_ENTRY)_ZN9S20633C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20633C14D0Ev,_ZThn108_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20633C14D0Ev,_ZThn68_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C14D0Ev,_ZThn8_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C14D0Ev,_ZThn120_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20633C14D0Ev,_ZThn116_N9S20633C14D0Ev),
  (VTBL_ENTRY)_ZN9S20633C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20633C14D1Ev,_ZThn108_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20633C14D1Ev,_ZThn68_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20633C14D1Ev,_ZThn8_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20633C14D1Ev,_ZThn120_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20633C14D1Ev,_ZThn116_N9S20633C14D1Ev),
  (VTBL_ENTRY)_ZN9S20633C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20633C4D0Ev,_ZTv0_n16_N8S20633C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20633C4D0Ev,_ZThn128_N8S20633C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20633C4D1Ev,_ZTv0_n16_N8S20633C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20633C4D1Ev,_ZThn128_N8S20633C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20633C4D0Ev,_ZThn120_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20633C4D0Ev,_ZThn116_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20633C4D0Ev,_ZThn108_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20633C4D0Ev,_ZThn68_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20633C4D0Ev,_ZThn8_N8S20633C4D0Ev),
  (VTBL_ENTRY)_ZN8S20633C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20633C4D1Ev,_ZThn120_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20633C4D1Ev,_ZThn116_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20633C4D1Ev,_ZThn108_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20633C4D1Ev,_ZThn68_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20633C4D1Ev,_ZThn8_N8S20633C4D1Ev),
  (VTBL_ENTRY)_ZN8S20633C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C4 = {  "S20633C4", // class name
  bases_S20633C4, 33,
  &(vtc_S20633C4[0]), // expected_vtbl_contents
  &(vtt_S20633C4[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S20633C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20633C4),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20633C4),55, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20633C1  : virtual S20633C2 , S20633C4 {
  virtual  ~S20633C1(); // _ZN8S20633C1D2Ev
  S20633C1(); // tgen
};
//SIG(1 S20633C1) C1{ VBC2{ VBC3{ m Fi[5]} Fp} BC4{ VBC5{ VBC6{ BC7{ m Fp} Fp[2]} VBC7 VBC8{ VBC7 VBC6 vd} VBC9{ m} vd Fi[9]} VBC10{ VBC11{ VBC7 BC9 VBC12{ BC7 BC6} VBC8} FC8} VBC13{ BC9 VBC6 VBC8 VBC12 VBC5 vd Fl} BC14{ VBC7 BC15{ VBC16{ VBC17{ VBC5 BC9 VBC18{ m} Fp} VBC10 VBC13 VBC19{ BC12 BC6 VBC9 vd} BC11 vd} BC18 BC17}} vd} vd}


 S20633C1 ::~S20633C1(){ note_dtor("S20633C1", this);}
S20633C1 ::S20633C1(){ note_ctor("S20633C1", this);} // tgen

static void Test_S20633C1()
{
  extern Class_Descriptor cd_S20633C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,48)];
    init_test(&cd_S20633C1, buf);
    S20633C1 *dp, &lv = *(dp=new (buf) S20633C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,188), "sizeof(S20633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20633C1)");
    check_base_class_offset(lv, (S20634C3_nt*)(S20633C2*), ABISELECT(32,16), "S20633C1");
    check_base_class_offset(lv, (S20633C2*), ABISELECT(16,8), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*), ABISELECT(104,76), "S20633C1");
    check_base_class_offset(lv, (S20633C6*)(S20633C5*), ABISELECT(104,76), "S20633C1");
    check_base_class_offset(lv, (S20633C6*)(S20633C8*), ABISELECT(104,76), "S20633C1");
    /*is_ambiguous_... S20633C13::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C13*), ABISELECT(104,76), "S20633C1");
    /*is_ambiguous_... S20633C5::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C5*), ABISELECT(128,88), "S20633C1");
    /*is_ambiguous_... S20633C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C8*), ABISELECT(128,88), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*), ABISELECT(128,88), "S20633C1");
    /*is_ambiguous_... S20633C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C14*)(S20633C4*), ABISELECT(128,88), "S20633C1");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C11*)(S20633C16*), ABISELECT(128,88), "S20633C1");
    check_base_class_offset(lv, (S20633C8*)(S20633C5*), ABISELECT(56,36), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*), ABISELECT(56,36), "S20633C1");
    check_base_class_offset(lv, (S20633C8*)(S20633C13*), ABISELECT(56,36), "S20633C1");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C8*)(S20633C11*)(S20633C16*), ABISELECT(56,36), "S20633C1");
    check_base_class_offset(lv, (S2265C38*)(S20633C5*), ABISELECT(136,92), "S20633C1");
    check_base_class_offset(lv, (S2265C38*)(S20633C19*), ABISELECT(136,92), "S20633C1");
    check_base_class_offset(lv, (S20633C5*)(S20633C4*), ABISELECT(56,36), "S20633C1");
    check_base_class_offset(lv, (S20633C5*)(S20633C13*), ABISELECT(56,36), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*), ABISELECT(56,36), "S20633C1");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C5*)(S20633C17*)(S20633C15*)(S20633C14*)(S20633C4*), ABISELECT(56,36), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*), ABISELECT(144,96), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*), ABISELECT(192,120), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*), ABISELECT(200,124), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C12 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C12*), ABISELECT(200,124), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*), ABISELECT(192,120), "S20633C1");
    check_base_class_offset(lv, (S20633C12*)(S20633C13*), ABISELECT(192,120), "S20633C1");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C12*)(S20633C11*)(S20633C16*), ABISELECT(192,120), "S20633C1");
    check_base_class_offset(lv, (S20633C11*)(S20633C10*), ABISELECT(144,96), "S20633C1");
    check_base_class_offset(lv, (S20633C10*)(S20633C4*), ABISELECT(144,96), "S20633C1");
    check_base_class_offset(lv, (S20633C10*)(S20633C16*), ABISELECT(144,96), "S20633C1");
    /*is_ambiguous_... S20633C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C13*), ABISELECT(224,136), "S20633C1");
    check_base_class_offset(lv, (S20633C13*)(S20633C4*), ABISELECT(224,136), "S20633C1");
    check_base_class_offset(lv, (S20633C13*)(S20633C16*), ABISELECT(224,136), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*), ABISELECT(248,148), "S20633C1");
    /*is_ambiguous_... S20633C1::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*), ABISELECT(264,156), "S20633C1");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C17*)(S20633C15*)(S20633C14*)(S20633C4*), ABISELECT(264,156), "S20633C1");
    check_base_class_offset(lv, (S20633C17*)(S20633C16*), ABISELECT(248,148), "S20633C1");
    /*is_ambiguous_... S20633C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C12*)(S20633C19*), ABISELECT(272,160), "S20633C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(280,164), "S20633C1");
    check_base_class_offset(lv, (S20633C6*)(S20633C12*)(S20633C19*), ABISELECT(280,164), "S20633C1");
    check_base_class_offset(lv, (S20633C12*)(S20633C19*), ABISELECT(272,160), "S20633C1");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20633C6*)(S20633C19*), ABISELECT(304,176), "S20633C1");
    /*is_ambiguous_... S20633C19::S20633C6 */ AMB_check_base_class_offset(lv, (S20633C6*)(S20633C19*), ABISELECT(304,176), "S20633C1");
    check_base_class_offset(lv, (S20633C19*)(S20633C16*), ABISELECT(264,156), "S20633C1");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C11*)(S20633C16*), ABISELECT(240,144), "S20633C1");
    /*is_ambiguous_... S20633C16::S20633C11 */ AMB_check_base_class_offset(lv, (S20633C11*)(S20633C16*), ABISELECT(240,144), "S20633C1");
    check_base_class_offset(lv, (S20633C16*)(S20633C15*)(S20633C14*)(S20633C4*), ABISELECT(240,144), "S20633C1");
    /*is_ambiguous_... S20633C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20633C15*)(S20633C14*)(S20633C4*), 0, "S20633C1");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20633C17*)(S20633C15*)(S20633C14*)(S20633C4*), 0, "S20633C1");
    /*is_ambiguous_... S20633C15::S20633C17 */ AMB_check_base_class_offset(lv, (S20633C17*)(S20633C15*)(S20633C14*)(S20633C4*), 0, "S20633C1");
    check_base_class_offset(lv, (S20633C15*)(S20633C14*)(S20633C4*), 0, "S20633C1");
    check_base_class_offset(lv, (S20633C14*)(S20633C4*), 0, "S20633C1");
    check_base_class_offset(lv, (S20633C4*), 0, "S20633C1");
    test_class_info(&lv, &cd_S20633C1);
    dp->~S20633C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20633C1(Test_S20633C1, "S20633C1", ABISELECT(328,188));

#else // __cplusplus

extern void _ZN8S20633C1C1Ev();
extern void _ZN8S20633C1D2Ev();
Name_Map name_map_S20633C1[] = {
  NSPAIR(_ZN8S20633C1C1Ev),
  NSPAIR(_ZN8S20633C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S20633C2;
extern VTBL_ENTRY _ZTI8S20633C2[];
extern  VTBL_ENTRY _ZTV8S20633C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C8;
extern VTBL_ENTRY _ZTI8S20633C8[];
extern  VTBL_ENTRY _ZTV8S20633C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C5;
extern VTBL_ENTRY _ZTI8S20633C5[];
extern  VTBL_ENTRY _ZTV8S20633C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C10;
extern VTBL_ENTRY _ZTI9S20633C10[];
extern  VTBL_ENTRY _ZTV9S20633C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C13;
extern VTBL_ENTRY _ZTI9S20633C13[];
extern  VTBL_ENTRY _ZTV9S20633C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C13[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C12;
extern VTBL_ENTRY _ZTI9S20633C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20633C6;
extern VTBL_ENTRY _ZTI8S20633C6[];
extern Class_Descriptor cd_S20633C19;
extern VTBL_ENTRY _ZTI9S20633C19[];
extern  VTBL_ENTRY _ZTV9S20633C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C19[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C11;
extern VTBL_ENTRY _ZTI9S20633C11[];
extern  VTBL_ENTRY _ZTV9S20633C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C11[];
extern Class_Descriptor cd_S20633C16;
extern VTBL_ENTRY _ZTI9S20633C16[];
extern  VTBL_ENTRY _ZTV9S20633C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20633C17;
extern VTBL_ENTRY _ZTI9S20633C17[];
extern  VTBL_ENTRY _ZTV9S20633C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C17[];
extern Class_Descriptor cd_S20633C15;
extern VTBL_ENTRY _ZTI9S20633C15[];
extern  VTBL_ENTRY _ZTV9S20633C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C15[];
extern Class_Descriptor cd_S20633C14;
extern VTBL_ENTRY _ZTI9S20633C14[];
extern  VTBL_ENTRY _ZTV9S20633C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20633C14[];
extern Class_Descriptor cd_S20633C4;
extern VTBL_ENTRY _ZTI8S20633C4[];
extern  VTBL_ENTRY _ZTV8S20633C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C4[];
static Base_Class bases_S20633C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20633C2,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(104,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(128,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20633C8,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20633C5,    ABISELECT(56,36), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(200,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20633C11,    ABISELECT(144,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20633C10,    ABISELECT(144,96), //bcp->offset
    32, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20633C13,    ABISELECT(224,136), //bcp->offset
    42, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(264,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20633C17,    ABISELECT(248,148), //bcp->offset
    70, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(272,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(280,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(280,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20633C12,    ABISELECT(272,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20633C6,    ABISELECT(304,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20633C19,    ABISELECT(264,156), //bcp->offset
    81, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20633C11,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20633C16,    ABISELECT(240,144), //bcp->offset
    53, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20633C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20633C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20633C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20633C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20633C1[];
extern void ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev)();
extern void _ZN8S20633C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev)();
extern void _ZN8S20633C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S20633C1D1Ev,_ZThn36_N8S20633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S20633C1D0Ev,_ZThn36_N8S20633C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20633C1D1Ev,_ZThn96_N8S20633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20633C1D0Ev,_ZThn96_N8S20633C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20633C1D1Ev,_ZThn136_N8S20633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20633C1D0Ev,_ZThn136_N8S20633C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev)();
extern void ABISELECT(_ZThn240_N8S20633C1D1Ev,_ZThn144_N8S20633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev)();
extern void ABISELECT(_ZThn240_N8S20633C1D0Ev,_ZThn144_N8S20633C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S20633C1D1Ev,_ZThn148_N8S20633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S20633C1D0Ev,_ZThn148_N8S20633C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20633C1D1Ev,_ZTv0_n16_N8S20633C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S20633C1D1Ev,_ZThn156_N8S20633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20633C1D0Ev,_ZTv0_n16_N8S20633C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S20633C1D0Ev,_ZThn156_N8S20633C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20633C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(264,156),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,148),
  ABISELECT(240,144),
  ABISELECT(264,156),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-240,-144),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev),
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-248,-148),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev),
  ABISELECT(-264,-156),
  ABISELECT(-128,-64),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI8S20633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20633C1D1Ev,_ZTv0_n16_N8S20633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20633C1D0Ev,_ZTv0_n16_N8S20633C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20633C1[];
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void _ZN8S20633C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void _ZN8S20633C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C4__8S20633C1[] = {
  ABISELECT(264,156),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,148),
  ABISELECT(240,144),
  ABISELECT(264,156),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void _ZN9S20633C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void _ZN9S20633C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(264,156),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,148),
  ABISELECT(240,144),
  ABISELECT(264,156),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void _ZN9S20633C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void _ZN9S20633C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C159S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(264,156),
  ABISELECT(224,136),
  ABISELECT(192,120),
  ABISELECT(144,96),
  ABISELECT(144,96),
  ABISELECT(248,148),
  ABISELECT(240,144),
  ABISELECT(264,156),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C179S20633C159S20633C148S20633C4__A1__8S20633C1[] = {
  ABISELECT(264,156),
  ABISELECT(136,92),
  ABISELECT(56,36),
  ABISELECT(56,36),
  0,
  ABISELECT(104,76),
  ABISELECT(128,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZThn56_N9S20633C17D1Ev,_ZThn36_N9S20633C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void ABISELECT(_ZThn56_N9S20633C17D0Ev,_ZThn36_N9S20633C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C179S20633C159S20633C148S20633C4__A1__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn240_N9S20633C15D1Ev,_ZThn144_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn240_N9S20633C15D0Ev,_ZThn144_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C159S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-240,-144),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn248_N9S20633C15D1Ev,_ZThn148_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn248_N9S20633C15D0Ev,_ZThn148_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C159S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-248,-148),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn56_N9S20633C15D1Ev,_ZThn36_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn56_N9S20633C15D0Ev,_ZThn36_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C159S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn144_N9S20633C15D1Ev,_ZThn96_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn144_N9S20633C15D0Ev,_ZThn96_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C159S20633C148S20633C4__8S20633C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn136_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn136_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C159S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev)();
extern void ABISELECT(_ZThn264_N9S20633C15D1Ev,_ZThn156_N9S20633C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev)();
extern void ABISELECT(_ZThn264_N9S20633C15D0Ev,_ZThn156_N9S20633C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C159S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(-264,-156),
  ABISELECT(-128,-64),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI9S20633C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn240_N9S20633C14D1Ev,_ZThn144_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn240_N9S20633C14D0Ev,_ZThn144_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__9S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-240,-144),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn248_N9S20633C14D1Ev,_ZThn148_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn248_N9S20633C14D0Ev,_ZThn148_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-248,-148),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn56_N9S20633C14D1Ev,_ZThn36_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn56_N9S20633C14D0Ev,_ZThn36_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn144_N9S20633C14D1Ev,_ZThn96_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn144_N9S20633C14D0Ev,_ZThn96_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C148S20633C4__8S20633C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20633C14D1Ev,_ZThn136_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20633C14D0Ev,_ZThn136_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev)();
extern void ABISELECT(_ZThn264_N9S20633C14D1Ev,_ZThn156_N9S20633C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev)();
extern void ABISELECT(_ZThn264_N9S20633C14D0Ev,_ZThn156_N9S20633C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C148S20633C4__8S20633C1[] = {
  ABISELECT(-264,-156),
  ABISELECT(-128,-64),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI9S20633C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S20633C4D1Ev,_ZThn36_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S20633C4D0Ev,_ZThn36_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__8S20633C4__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-56,-36),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn144_N8S20633C4D1Ev,_ZThn96_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn144_N8S20633C4D0Ev,_ZThn96_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__8S20633C4__8S20633C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-144,-96),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20633C4D1Ev,_ZThn136_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20633C4D0Ev,_ZThn136_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__8S20633C4__8S20633C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-224,-136),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn240_N8S20633C4D1Ev,_ZThn144_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn240_N8S20633C4D0Ev,_ZThn144_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__8S20633C4__8S20633C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-240,-144),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn248_N8S20633C4D1Ev,_ZThn148_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn248_N8S20633C4D0Ev,_ZThn148_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__8S20633C4__8S20633C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-248,-148),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20633C4D1Ev,_ZTv0_n16_N8S20633C4D1Ev)();
extern void ABISELECT(_ZThn264_N8S20633C4D1Ev,_ZThn156_N8S20633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20633C4D0Ev,_ZTv0_n16_N8S20633C4D0Ev)();
extern void ABISELECT(_ZThn264_N8S20633C4D0Ev,_ZThn156_N8S20633C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__8S20633C4__8S20633C1[] = {
  ABISELECT(-264,-156),
  ABISELECT(-128,-64),
  ABISELECT(-264,-156),
  (VTBL_ENTRY)&(_ZTI8S20633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20633C4D1Ev,_ZTv0_n16_N8S20633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20633C4D0Ev,_ZTv0_n16_N8S20633C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20633C2__8S20633C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev)();
extern void _ZN8S20633C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev)();
extern void _ZN8S20633C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20633C5__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev),
};
extern void _ZN8S20633C8D1Ev();
extern void _ZN8S20633C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20633C8__8S20633C1[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20633C8[0]),
  (VTBL_ENTRY)&_ZN8S20633C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20633C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void _ZN9S20633C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
extern void _ZN9S20633C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C10__8S20633C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C10__8S20633C1[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20633C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C11__8S20633C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C11__8S20633C1[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void _ZN9S20633C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
extern void _ZN9S20633C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C13__8S20633C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C13__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20633C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void _ZN9S20633C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void _ZN9S20633C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C16__8S20633C1[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void _ZN9S20633C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
extern void _ZN9S20633C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C119S20633C16__A1__8S20633C1[] = {
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C8__9S20633C119S20633C16__A1__8S20633C1[] = {
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20633C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__9S20633C16__8S20633C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-8,-4),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C16__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20633C10__9S20633C16__8S20633C1[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(96,48),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20633C13__9S20633C16__8S20633C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(16,8),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C19__9S20633C16__8S20633C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20633C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void _ZN9S20633C17D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
extern void _ZN9S20633C17D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20633C17__8S20633C1[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  0,
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20633C5__9S20633C17__8S20633C1[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(192,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI9S20633C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev),
};
extern void _ZN9S20633C19D1Ev();
extern void _ZN9S20633C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20633C19__8S20633C1[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20633C19[0]),
  (VTBL_ENTRY)&_ZN9S20633C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20633C19D0Ev,
};
static  VTT_ENTRY vtt_S20633C1[] = {
  {&(_ZTV8S20633C1[18]),  18,87},
  {&(_tg__ZTV8S20633C4__8S20633C1[16]),  16,18},
  {&(_tg__ZTV9S20633C148S20633C4__8S20633C1[16]),  16,18},
  {&(_tg__ZTV9S20633C159S20633C148S20633C4__8S20633C1[16]),  16,18},
  {&(_tg__ZTV9S20633C179S20633C159S20633C148S20633C4__A1__8S20633C1[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C179S20633C159S20633C148S20633C4__A1__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C179S20633C159S20633C148S20633C4__A1__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C16__9S20633C159S20633C148S20633C4__8S20633C1[15]),  15,17},
  {&(_tg__ZTV9S20633C17__9S20633C159S20633C148S20633C4__8S20633C1[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C159S20633C148S20633C4__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C159S20633C148S20633C4__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C10__9S20633C159S20633C148S20633C4__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C159S20633C148S20633C4__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C159S20633C148S20633C4__8S20633C1[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C159S20633C148S20633C4__8S20633C1[4]),  4,6},
  {&(_tg__ZTV9S20633C16__9S20633C148S20633C4__8S20633C1[15]),  15,17},
  {&(_tg__ZTV9S20633C17__9S20633C148S20633C4__8S20633C1[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C148S20633C4__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C148S20633C4__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C10__9S20633C148S20633C4__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C148S20633C4__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C148S20633C4__8S20633C1[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C148S20633C4__8S20633C1[4]),  4,6},
  {&(_tg__ZTV8S20633C5__8S20633C4__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__8S20633C4__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C10__8S20633C4__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C10__8S20633C4__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C13__8S20633C4__8S20633C1[9]),  9,11},
  {&(_tg__ZTV9S20633C16__8S20633C4__8S20633C1[15]),  15,17},
  {&(_tg__ZTV9S20633C17__8S20633C4__8S20633C1[9]),  9,11},
  {&(_tg__ZTV9S20633C19__8S20633C4__8S20633C1[4]),  4,6},
  {&(_ZTV8S20633C1[23]),  23,87},
  {&(_ZTV8S20633C1[30]),  30,87},
  {&(_ZTV8S20633C1[30]),  30,87},
  {&(_ZTV8S20633C1[40]),  40,87},
  {&(_ZTV8S20633C1[40]),  40,87},
  {&(_ZTV8S20633C1[51]),  51,87},
  {&(_ZTV8S20633C1[68]),  68,87},
  {&(_ZTV8S20633C1[79]),  79,87},
  {&(_ZTV8S20633C1[85]),  85,87},
  {&(_tg__ZTV8S20633C2__8S20633C1[3]),  3,3},
  {&(_tg__ZTV8S20633C5__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C8__8S20633C1[4]),  4,6},
  {&(_tg__ZTV9S20633C10__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C10__8S20633C1[8]),  8,10},
  {&(_tg__ZTV8S20633C8__9S20633C10__8S20633C1[5]),  5,7},
  {&(_tg__ZTV9S20633C11__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C11__8S20633C1[5]),  5,7},
  {&(_tg__ZTV9S20633C13__8S20633C1[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C13__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C13__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C16__8S20633C1[15]),  15,17},
  {&(_tg__ZTV9S20633C119S20633C16__A1__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C8__9S20633C119S20633C16__A1__8S20633C1[5]),  5,7},
  {&(_tg__ZTV9S20633C17__9S20633C16__8S20633C1[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C16__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C16__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C10__9S20633C16__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C10__9S20633C16__8S20633C1[8]),  8,10},
  {&(_tg__ZTV9S20633C13__9S20633C16__8S20633C1[9]),  9,11},
  {&(_tg__ZTV9S20633C19__9S20633C16__8S20633C1[4]),  4,6},
  {&(_tg__ZTV9S20633C17__8S20633C1[9]),  9,11},
  {&(_tg__ZTV8S20633C5__9S20633C17__8S20633C1[7]),  7,9},
  {&(_tg__ZTV8S20633C5__9S20633C17__8S20633C1[7]),  7,9},
  {&(_tg__ZTV9S20633C19__8S20633C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20633C1[];
extern  VTBL_ENTRY _ZTV8S20633C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20633C1[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D0Ev,_ZTv0_n16_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D0Ev,_ZThn12_N9S20633C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C16D1Ev,_ZTv0_n16_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20633C16D1Ev,_ZThn12_N9S20633C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D0Ev,_ZTv0_n20_N9S20633C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D0Ev,_ZThn4_N9S20633C16D0Ev),
  (VTBL_ENTRY)_ZN9S20633C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C16D1Ev,_ZTv0_n20_N9S20633C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20633C16D1Ev,_ZThn4_N9S20633C16D1Ev),
  (VTBL_ENTRY)_ZN9S20633C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D0Ev,_ZTv0_n20_N9S20633C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C13D1Ev,_ZTv0_n20_N9S20633C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D0Ev,_ZTv0_n20_N9S20633C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  (VTBL_ENTRY)_ZN9S20633C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C11D1Ev,_ZTv0_n20_N9S20633C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  (VTBL_ENTRY)_ZN9S20633C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D0Ev,_ZTv0_n20_N9S20633C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C10D1Ev,_ZTv0_n20_N9S20633C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D0Ev,_ZTv0_n20_N8S20633C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C5D1Ev,_ZTv0_n20_N8S20633C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S20633C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20633C4D0Ev,_ZTv0_n16_N8S20633C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20633C4D0Ev,_ZThn156_N8S20633C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20633C4D1Ev,_ZTv0_n16_N8S20633C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20633C4D1Ev,_ZThn156_N8S20633C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C14D0Ev,_ZTv0_n16_N9S20633C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20633C14D0Ev,_ZThn156_N9S20633C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C14D1Ev,_ZTv0_n16_N9S20633C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20633C14D1Ev,_ZThn156_N9S20633C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D0Ev,_ZTv0_n16_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20633C15D0Ev,_ZThn156_N9S20633C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20633C15D1Ev,_ZTv0_n16_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N9S20633C15D1Ev,_ZThn156_N9S20633C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D0Ev,_ZTv0_n20_N9S20633C17D0Ev), // 
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20633C17D0Ev,_ZThn36_N9S20633C17D0Ev),
  (VTBL_ENTRY)_ZN9S20633C17D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C17D1Ev,_ZTv0_n20_N9S20633C17D1Ev), // 
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20633C17D1Ev,_ZThn36_N9S20633C17D1Ev),
  (VTBL_ENTRY)_ZN9S20633C17D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D0Ev,_ZTv0_n20_N9S20633C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D0Ev,_ZThn136_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20633C15D0Ev,_ZThn96_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20633C15D0Ev,_ZThn36_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20633C15D0Ev,_ZThn148_N9S20633C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20633C15D0Ev,_ZThn144_N9S20633C15D0Ev),
  (VTBL_ENTRY)_ZN9S20633C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C15D1Ev,_ZTv0_n20_N9S20633C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C15D1Ev,_ZThn136_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20633C15D1Ev,_ZThn96_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20633C15D1Ev,_ZThn36_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20633C15D1Ev,_ZThn148_N9S20633C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20633C15D1Ev,_ZThn144_N9S20633C15D1Ev),
  (VTBL_ENTRY)_ZN9S20633C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C14D0Ev,_ZTv0_n20_N9S20633C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C14D0Ev,_ZThn136_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20633C14D0Ev,_ZThn96_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20633C14D0Ev,_ZThn36_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20633C14D0Ev,_ZThn148_N9S20633C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20633C14D0Ev,_ZThn144_N9S20633C14D0Ev),
  (VTBL_ENTRY)_ZN9S20633C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20633C14D1Ev,_ZTv0_n20_N9S20633C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20633C14D1Ev,_ZThn136_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20633C14D1Ev,_ZThn96_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20633C14D1Ev,_ZThn36_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20633C14D1Ev,_ZThn148_N9S20633C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20633C14D1Ev,_ZThn144_N9S20633C14D1Ev),
  (VTBL_ENTRY)_ZN9S20633C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C4D0Ev,_ZTv0_n20_N8S20633C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20633C4D0Ev,_ZThn148_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20633C4D0Ev,_ZThn144_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20633C4D0Ev,_ZThn136_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20633C4D0Ev,_ZThn96_N8S20633C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20633C4D0Ev,_ZThn36_N8S20633C4D0Ev),
  (VTBL_ENTRY)_ZN8S20633C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C4D1Ev,_ZTv0_n20_N8S20633C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20633C4D1Ev,_ZThn148_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20633C4D1Ev,_ZThn144_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20633C4D1Ev,_ZThn136_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20633C4D1Ev,_ZThn96_N8S20633C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20633C4D1Ev,_ZThn36_N8S20633C4D1Ev),
  (VTBL_ENTRY)_ZN8S20633C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20633C1D0Ev,_ZTv0_n16_N8S20633C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20633C1D0Ev,_ZThn156_N8S20633C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20633C1D1Ev,_ZTv0_n16_N8S20633C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20633C1D1Ev,_ZThn156_N8S20633C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C1D0Ev,_ZTv0_n20_N8S20633C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20633C1D0Ev,_ZThn148_N8S20633C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20633C1D0Ev,_ZThn144_N8S20633C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20633C1D0Ev,_ZThn136_N8S20633C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20633C1D0Ev,_ZThn96_N8S20633C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20633C1D0Ev,_ZThn36_N8S20633C1D0Ev),
  (VTBL_ENTRY)_ZN8S20633C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20633C1D1Ev,_ZTv0_n20_N8S20633C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20633C1D1Ev,_ZThn148_N8S20633C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20633C1D1Ev,_ZThn144_N8S20633C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20633C1D1Ev,_ZThn136_N8S20633C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20633C1D1Ev,_ZThn96_N8S20633C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20633C1D1Ev,_ZThn36_N8S20633C1D1Ev),
  (VTBL_ENTRY)_ZN8S20633C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20633C1 = {  "S20633C1", // class name
  bases_S20633C1, 36,
  &(vtc_S20633C1[0]), // expected_vtbl_contents
  &(vtt_S20633C1[0]), // expected_vtt_contents
  ABISELECT(328,188), // object size
  NSPAIRA(_ZTI8S20633C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20633C1),87, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20633C1),66, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C4  : S5217C60_nt {
  void *s20959c4f0[2];
};
//SIG(-1 S20959C4) C1{ BC2{ m Fp} Fp[2]}



static void Test_S20959C4()
{
  extern Class_Descriptor cd_S20959C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20959C4, buf);
    S20959C4 &lv = *(new (buf) S20959C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20959C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C4)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S20959C4");
    check_field_offset(lv, s20959c4f0, ABISELECT(8,4), "S20959C4.s20959c4f0");
    test_class_info(&lv, &cd_S20959C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C4(Test_S20959C4, "S20959C4", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S20959C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20959C4[];
Class_Descriptor cd_S20959C4 = {  "S20959C4", // class name
  bases_S20959C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20959C4),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C6  : virtual S5217C60_nt , virtual S20959C4 {
  virtual  ~S20959C6(); // _ZN8S20959C6D2Ev
  S20959C6(); // tgen
};
//SIG(-1 S20959C6) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S20959C6 ::~S20959C6(){ note_dtor("S20959C6", this);}
S20959C6 ::S20959C6(){ note_ctor("S20959C6", this);} // tgen

static void Test_S20959C6()
{
  extern Class_Descriptor cd_S20959C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20959C6, buf);
    S20959C6 *dp, &lv = *(dp=new (buf) S20959C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20959C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C6)");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20959C6");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(16,8), "S20959C6");
    check_base_class_offset(lv, (S20959C4*), ABISELECT(16,8), "S20959C6");
    test_class_info(&lv, &cd_S20959C6);
    dp->~S20959C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C6(Test_S20959C6, "S20959C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20959C6C1Ev();
extern void _ZN8S20959C6D2Ev();
Name_Map name_map_S20959C6[] = {
  NSPAIR(_ZN8S20959C6C1Ev),
  NSPAIR(_ZN8S20959C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
static Base_Class bases_S20959C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20959C6[];
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY vtc_S20959C6[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S20959C6[];
static  VTT_ENTRY vtt_S20959C6[] = {
  {&(_ZTV8S20959C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
Class_Descriptor cd_S20959C6 = {  "S20959C6", // class name
  bases_S20959C6, 3,
  &(vtc_S20959C6[0]), // expected_vtbl_contents
  &(vtt_S20959C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20959C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20959C6),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20959C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C3  : virtual S20959C4 , virtual S5217C60_nt , virtual S20959C6 , virtual S2265C38 {
  int s20959c3f0[9];
  virtual  ~S20959C3(); // _ZN8S20959C3D2Ev
  S20959C3(); // tgen
};
//SIG(-1 S20959C3) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S20959C3 ::~S20959C3(){ note_dtor("S20959C3", this);}
S20959C3 ::S20959C3(){ note_ctor("S20959C3", this);} // tgen

static void Test_S20959C3()
{
  extern Class_Descriptor cd_S20959C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S20959C3, buf);
    S20959C3 *dp, &lv = *(dp=new (buf) S20959C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S20959C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C3)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(48,40), "S20959C3");
    check_base_class_offset(lv, (S20959C4*), ABISELECT(48,40), "S20959C3");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(48,40), "S20959C3");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S20959C3");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(72,52), "S20959C3");
    check_base_class_offset(lv, (S20959C6*), 0, "S20959C3");
    check_base_class_offset(lv, (S2265C38*), 0, "S20959C3");
    check_field_offset(lv, s20959c3f0, ABISELECT(8,4), "S20959C3.s20959c3f0");
    test_class_info(&lv, &cd_S20959C3);
    dp->~S20959C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C3(Test_S20959C3, "S20959C3", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S20959C3C1Ev();
extern void _ZN8S20959C3D2Ev();
Name_Map name_map_S20959C3[] = {
  NSPAIR(_ZN8S20959C3C1Ev),
  NSPAIR(_ZN8S20959C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20959C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20959C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20959C3[];
extern void _ZN8S20959C3D1Ev();
extern void _ZN8S20959C3D0Ev();
static  VTBL_ENTRY vtc_S20959C3[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&_ZN8S20959C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S20959C3[];
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
static  VTT_ENTRY vtt_S20959C3[] = {
  {&(_ZTV8S20959C3[7]),  7,9},
  {&(_ZTV8S20959C3[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
Class_Descriptor cd_S20959C3 = {  "S20959C3", // class name
  bases_S20959C3, 5,
  &(vtc_S20959C3[0]), // expected_vtbl_contents
  &(vtt_S20959C3[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S20959C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20959C3),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20959C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C2  : virtual S20959C3 , S2265C38 , virtual S2265C28 {
  void *s20959c2f0;
  ~S20959C2(); // tgen
  S20959C2(); // tgen
};
//SIG(-1 S20959C2) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S20959C2 ::~S20959C2(){ note_dtor("S20959C2", this);} // tgen
S20959C2 ::S20959C2(){ note_ctor("S20959C2", this);} // tgen

static void Test_S20959C2()
{
  extern Class_Descriptor cd_S20959C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S20959C2, buf);
    S20959C2 *dp, &lv = *(dp=new (buf) S20959C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S20959C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C2)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(64,48), "S20959C2");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(64,48), "S20959C2");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(64,48), "S20959C2");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(88,60), "S20959C2");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(88,60), "S20959C2");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), 0, "S20959C2");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(96,64), "S20959C2");
    check_base_class_offset(lv, (S20959C3*), ABISELECT(16,8), "S20959C2");
    /*is_ambiguous_... S20959C2::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20959C2");
    check_base_class_offset(lv, (S2265C28*), 0, "S20959C2");
    check_field_offset(lv, s20959c2f0, ABISELECT(8,4), "S20959C2.s20959c2f0");
    test_class_info(&lv, &cd_S20959C2);
    dp->~S20959C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C2(Test_S20959C2, "S20959C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN8S20959C2C1Ev();
extern void _ZN8S20959C2D1Ev();
Name_Map name_map_S20959C2[] = {
  NSPAIR(_ZN8S20959C2C1Ev),
  NSPAIR(_ZN8S20959C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20959C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20959C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20959C2[];
extern void _ZN8S20959C2D1Ev();
extern void _ZN8S20959C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C2[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&_ZN8S20959C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C2D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20959C2[];
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3__8S20959C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
static  VTT_ENTRY vtt_S20959C2[] = {
  {&(_ZTV8S20959C2[9]),  9,20},
  {&(_ZTV8S20959C2[18]),  18,20},
  {&(_ZTV8S20959C2[9]),  9,20},
  {&(_tg__ZTV8S20959C3__8S20959C2[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3__8S20959C2[5]),  5,7},
  {&(_tg__ZTV8S20959C6__8S20959C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C2 = {  "S20959C2", // class name
  bases_S20959C2, 8,
  &(vtc_S20959C2[0]), // expected_vtbl_contents
  &(vtt_S20959C2[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI8S20959C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20959C2),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20959C2),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C12  : S5217C60_nt , S20959C4 {
};
//SIG(-1 S20959C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S20959C12()
{
  extern Class_Descriptor cd_S20959C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20959C12, buf);
    S20959C12 &lv = *(new (buf) S20959C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20959C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C12)");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S20959C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(8,4), "S20959C12");
    check_base_class_offset(lv, (S20959C4*), ABISELECT(8,4), "S20959C12");
    test_class_info(&lv, &cd_S20959C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C12(Test_S20959C12, "S20959C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
static Base_Class bases_S20959C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C12[];
Class_Descriptor cd_S20959C12 = {  "S20959C12", // class name
  bases_S20959C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20959C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C11  : virtual S5217C60_nt , S2265C38 , virtual S20959C12 , virtual S20959C6 {
  ~S20959C11(); // tgen
  S20959C11(); // tgen
};
//SIG(-1 S20959C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S20959C11 ::~S20959C11(){ note_dtor("S20959C11", this);} // tgen
S20959C11 ::S20959C11(){ note_ctor("S20959C11", this);} // tgen

static void Test_S20959C11()
{
  extern Class_Descriptor cd_S20959C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20959C11, buf);
    S20959C11 *dp, &lv = *(dp=new (buf) S20959C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20959C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C11)");
    /*is_ambiguous_... S20959C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20959C11");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(8,4), "S20959C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S20959C11");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(16,8), "S20959C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(24,12), "S20959C11");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(24,12), "S20959C11");
    check_base_class_offset(lv, (S20959C12*), ABISELECT(16,8), "S20959C11");
    /*is_ambiguous_... S20959C11::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(48,24), "S20959C11");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(48,24), "S20959C11");
    check_base_class_offset(lv, (S20959C6*), 0, "S20959C11");
    test_class_info(&lv, &cd_S20959C11);
    dp->~S20959C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C11(Test_S20959C11, "S20959C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20959C11C1Ev();
extern void _ZN9S20959C11D1Ev();
Name_Map name_map_S20959C11[] = {
  NSPAIR(_ZN9S20959C11C1Ev),
  NSPAIR(_ZN9S20959C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
static Base_Class bases_S20959C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20959C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C11[];
extern void _ZN9S20959C11D1Ev();
extern void _ZN9S20959C11D0Ev();
static  VTBL_ENTRY vtc_S20959C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&_ZN9S20959C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S20959C11[];
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
static  VTT_ENTRY vtt_S20959C11[] = {
  {&(_ZTV9S20959C11[7]),  7,9},
  {&(_ZTV9S20959C11[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
Class_Descriptor cd_S20959C11 = {  "S20959C11", // class name
  bases_S20959C11, 9,
  &(vtc_S20959C11[0]), // expected_vtbl_contents
  &(vtt_S20959C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20959C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20959C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C10  : virtual S20959C11 {
  ::S20959C6 s20959c10f0;
  ~S20959C10(); // tgen
  S20959C10(); // tgen
};
//SIG(-1 S20959C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S20959C10 ::~S20959C10(){ note_dtor("S20959C10", this);} // tgen
S20959C10 ::S20959C10(){ note_ctor("S20959C10", this);} // tgen

static void Test_S20959C10()
{
  extern Class_Descriptor cd_S20959C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20959C10, buf);
    S20959C10 *dp, &lv = *(dp=new (buf) S20959C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20959C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C10)");
    /*is_ambiguous_... S20959C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(48,24), "S20959C10");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(48,24), "S20959C10");
    check_base_class_offset(lv, (S2265C38*)(S20959C11*), 0, "S20959C10");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(56,28), "S20959C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(64,32), "S20959C10");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(64,32), "S20959C10");
    check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(56,28), "S20959C10");
    /*is_ambiguous_... S20959C10::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(88,44), "S20959C10");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(88,44), "S20959C10");
    check_base_class_offset(lv, (S20959C6*)(S20959C11*), 0, "S20959C10");
    check_base_class_offset(lv, (S20959C11*), 0, "S20959C10");
    check_field_offset(lv, s20959c10f0, ABISELECT(8,4), "S20959C10.s20959c10f0");
    test_class_info(&lv, &cd_S20959C10);
    dp->~S20959C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C10(Test_S20959C10, "S20959C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S20959C10C1Ev();
extern void _ZN9S20959C10D1Ev();
Name_Map name_map_S20959C10[] = {
  NSPAIR(_ZN9S20959C10C1Ev),
  NSPAIR(_ZN9S20959C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
static Base_Class bases_S20959C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20959C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20959C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C10[];
extern void _ZN9S20959C10D1Ev();
extern void _ZN9S20959C10D0Ev();
static  VTBL_ENTRY vtc_S20959C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&_ZN9S20959C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S20959C10[];
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__9S20959C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
static  VTT_ENTRY vtt_S20959C10[] = {
  {&(_ZTV9S20959C10[8]),  8,10},
  {&(_ZTV9S20959C10[8]),  8,10},
  {&(_ZTV9S20959C10[8]),  8,10},
  {&(_tg__ZTV9S20959C11__9S20959C10[7]),  7,9},
  {&(_tg__ZTV9S20959C11__9S20959C10[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20959C10[];
extern  VTBL_ENTRY _ZTV9S20959C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C10[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C10 = {  "S20959C10", // class name
  bases_S20959C10, 10,
  &(vtc_S20959C10[0]), // expected_vtbl_contents
  &(vtt_S20959C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S20959C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20959C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C13  : S2265C38 , virtual S20959C4 , virtual S20959C6 , virtual S20959C12 , virtual S20959C3 {
  __tsi64 s20959c13f0;
  virtual  ~S20959C13(); // _ZN9S20959C13D2Ev
  S20959C13(); // tgen
};
//SIG(-1 S20959C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S20959C13 ::~S20959C13(){ note_dtor("S20959C13", this);}
S20959C13 ::S20959C13(){ note_ctor("S20959C13", this);} // tgen

static void Test_S20959C13()
{
  extern Class_Descriptor cd_S20959C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S20959C13, buf);
    S20959C13 *dp, &lv = *(dp=new (buf) S20959C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S20959C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C13)");
    /*is_ambiguous_... S20959C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20959C13");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(16,12), "S20959C13");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*), ABISELECT(16,12), "S20959C13");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(16,12), "S20959C13");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(16,12), "S20959C13");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(40,24), "S20959C13");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(40,24), "S20959C13");
    check_base_class_offset(lv, (S20959C6*), 0, "S20959C13");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), 0, "S20959C13");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(48,28), "S20959C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(56,32), "S20959C13");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(56,32), "S20959C13");
    check_base_class_offset(lv, (S20959C12*), ABISELECT(48,28), "S20959C13");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(124,84), "S20959C13");
    check_base_class_offset(lv, (S20959C3*), ABISELECT(80,44), "S20959C13");
    check_field_offset(lv, s20959c13f0, ABISELECT(8,4), "S20959C13.s20959c13f0");
    test_class_info(&lv, &cd_S20959C13);
    dp->~S20959C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C13(Test_S20959C13, "S20959C13", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN9S20959C13C1Ev();
extern void _ZN9S20959C13D2Ev();
Name_Map name_map_S20959C13[] = {
  NSPAIR(_ZN9S20959C13C1Ev),
  NSPAIR(_ZN9S20959C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
static Base_Class bases_S20959C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20959C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C13[];
extern void _ZN9S20959C13D1Ev();
extern void _ZN9S20959C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S20959C13D1Ev,_ZThn44_N9S20959C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S20959C13D0Ev,_ZThn44_N9S20959C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C13[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&_ZN9S20959C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20959C13[];
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C13[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3__9S20959C13[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
static  VTT_ENTRY vtt_S20959C13[] = {
  {&(_ZTV9S20959C13[9]),  9,20},
  {&(_ZTV9S20959C13[9]),  9,20},
  {&(_ZTV9S20959C13[18]),  18,20},
  {&(_tg__ZTV8S20959C6__9S20959C13[4]),  4,6},
  {&(_tg__ZTV8S20959C3__9S20959C13[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3__9S20959C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20959C13[];
extern  VTBL_ENTRY _ZTV9S20959C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C13[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20959C13D0Ev,_ZThn44_N9S20959C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20959C13D1Ev,_ZThn44_N9S20959C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C13 = {  "S20959C13", // class name
  bases_S20959C13, 11,
  &(vtc_S20959C13[0]), // expected_vtbl_contents
  &(vtt_S20959C13[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI9S20959C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20959C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C17  : S20959C12 , S20959C4 , virtual S2265C38 {
  virtual  ~S20959C17(); // _ZN9S20959C17D2Ev
  S20959C17(); // tgen
};
//SIG(-1 S20959C17) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S20959C17 ::~S20959C17(){ note_dtor("S20959C17", this);}
S20959C17 ::S20959C17(){ note_ctor("S20959C17", this);} // tgen

static void Test_S20959C17()
{
  extern Class_Descriptor cd_S20959C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20959C17, buf);
    S20959C17 *dp, &lv = *(dp=new (buf) S20959C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20959C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C17)");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(8,4), "S20959C17");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(16,8), "S20959C17");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(16,8), "S20959C17");
    check_base_class_offset(lv, (S20959C12*), ABISELECT(8,4), "S20959C17");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(40,20), "S20959C17");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*), ABISELECT(40,20), "S20959C17");
    check_base_class_offset(lv, (S2265C38*), 0, "S20959C17");
    test_class_info(&lv, &cd_S20959C17);
    dp->~S20959C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C17(Test_S20959C17, "S20959C17", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20959C17C1Ev();
extern void _ZN9S20959C17D2Ev();
Name_Map name_map_S20959C17[] = {
  NSPAIR(_ZN9S20959C17C1Ev),
  NSPAIR(_ZN9S20959C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20959C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C17[];
extern void _ZN9S20959C17D1Ev();
extern void _ZN9S20959C17D0Ev();
static  VTBL_ENTRY vtc_S20959C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C17[0]),
  (VTBL_ENTRY)&_ZN9S20959C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C17D0Ev,
};
extern VTBL_ENTRY _ZTV9S20959C17[];
static  VTT_ENTRY vtt_S20959C17[] = {
  {&(_ZTV9S20959C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20959C17[];
extern  VTBL_ENTRY _ZTV9S20959C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C17[];
Class_Descriptor cd_S20959C17 = {  "S20959C17", // class name
  bases_S20959C17, 7,
  &(vtc_S20959C17[0]), // expected_vtbl_contents
  &(vtt_S20959C17[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20959C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20959C17),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C17),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C16  : virtual S20959C2 , virtual S20959C10 , virtual S20959C13 , virtual S20959C17 , S20959C11 {
  virtual  ~S20959C16(); // _ZN9S20959C16D2Ev
  S20959C16(); // tgen
};
//SIG(-1 S20959C16) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd FL} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S20959C16 ::~S20959C16(){ note_dtor("S20959C16", this);}
S20959C16 ::S20959C16(){ note_ctor("S20959C16", this);} // tgen

static void Test_S20959C16()
{
  extern Class_Descriptor cd_S20959C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S20959C16, buf);
    S20959C16 *dp, &lv = *(dp=new (buf) S20959C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S20959C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C16)");
    /*is_ambiguous_... S20959C16::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(72,52), "S20959C16");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(72,52), "S20959C16");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(72,52), "S20959C16");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C13*), ABISELECT(72,52), "S20959C16");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(96,64), "S20959C16");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(96,64), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(96,64), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(96,64), "S20959C16");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), ABISELECT(8,4), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*), ABISELECT(8,4), "S20959C16");
    check_base_class_offset(lv, (S20959C6*)(S20959C13*), ABISELECT(8,4), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*), ABISELECT(8,4), "S20959C16");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(104,68), "S20959C16");
    check_base_class_offset(lv, (S2265C38*)(S20959C17*), ABISELECT(104,68), "S20959C16");
    check_base_class_offset(lv, (S20959C3*)(S20959C2*), ABISELECT(24,12), "S20959C16");
    check_base_class_offset(lv, (S20959C3*)(S20959C13*), ABISELECT(24,12), "S20959C16");
    /*is_ambiguous_... S20959C2::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*), ABISELECT(8,4), "S20959C16");
    check_base_class_offset(lv, (S2265C28*)(S20959C2*), 0, "S20959C16");
    check_base_class_offset(lv, (S20959C2*), ABISELECT(8,4), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*), ABISELECT(112,72), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(160,96), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(168,100), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C12 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(168,100), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(160,96), "S20959C16");
    check_base_class_offset(lv, (S20959C12*)(S20959C13*), ABISELECT(160,96), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(160,96), "S20959C16");
    check_base_class_offset(lv, (S20959C11*)(S20959C10*), ABISELECT(112,72), "S20959C16");
    check_base_class_offset(lv, (S20959C10*), ABISELECT(112,72), "S20959C16");
    /*is_ambiguous_... S20959C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C13*), ABISELECT(192,112), "S20959C16");
    check_base_class_offset(lv, (S20959C13*), ABISELECT(192,112), "S20959C16");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*)(S20959C17*), ABISELECT(216,128), "S20959C16");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(224,132), "S20959C16");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(224,132), "S20959C16");
    check_base_class_offset(lv, (S20959C12*)(S20959C17*), ABISELECT(216,128), "S20959C16");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C17*), ABISELECT(248,144), "S20959C16");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C17*), ABISELECT(248,144), "S20959C16");
    check_base_class_offset(lv, (S20959C17*), ABISELECT(208,124), "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*), 0, "S20959C16");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C11*), 0, "S20959C16");
    test_class_info(&lv, &cd_S20959C16);
    dp->~S20959C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C16(Test_S20959C16, "S20959C16", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN9S20959C16C1Ev();
extern void _ZN9S20959C16D2Ev();
Name_Map name_map_S20959C16[] = {
  NSPAIR(_ZN9S20959C16C1Ev),
  NSPAIR(_ZN9S20959C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C10;
extern VTBL_ENTRY _ZTI9S20959C10[];
extern  VTBL_ENTRY _ZTV9S20959C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C13;
extern VTBL_ENTRY _ZTI9S20959C13[];
extern  VTBL_ENTRY _ZTV9S20959C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C17;
extern VTBL_ENTRY _ZTI9S20959C17[];
extern  VTBL_ENTRY _ZTV9S20959C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
static Base_Class bases_S20959C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20959C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20959C2,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20959C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20959C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20959C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20959C17,    ABISELECT(208,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20959C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C16[];
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void _ZN9S20959C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void _ZN9S20959C16D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20959C16D1Ev,_ZThn72_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20959C16D0Ev,_ZThn72_N9S20959C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20959C16D1Ev,_ZThn112_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20959C16D0Ev,_ZThn112_N9S20959C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C16D1Ev,_ZThn124_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C16D0Ev,_ZThn124_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C16[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20959C16[];
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__A__9S20959C16[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C11D1Ev,_ZThn4_N9S20959C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C11D0Ev,_ZThn4_N9S20959C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11__A__9S20959C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2__9S20959C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3__9S20959C16[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C16[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void _ZN9S20959C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
extern void _ZN9S20959C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C16[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C10__9S20959C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__9S20959C16[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11__9S20959C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void _ZN9S20959C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
extern void _ZN9S20959C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C16[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C13__9S20959C16[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C13__9S20959C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void _ZN9S20959C17D1Ev();
extern void _ZN9S20959C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C16[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C17[0]),
  (VTBL_ENTRY)&_ZN9S20959C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C17D0Ev,
};
static  VTT_ENTRY vtt_S20959C16[] = {
  {&(_ZTV9S20959C16[15]),  15,64},
  {&(_tg__ZTV9S20959C11__A__9S20959C16[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11__A__9S20959C16[5]),  5,7},
  {&(_ZTV9S20959C16[26]),  26,64},
  {&(_ZTV9S20959C16[35]),  35,64},
  {&(_ZTV9S20959C16[26]),  26,64},
  {&(_ZTV9S20959C16[45]),  45,64},
  {&(_ZTV9S20959C16[45]),  45,64},
  {&(_ZTV9S20959C16[56]),  56,64},
  {&(_ZTV9S20959C16[62]),  62,64},
  {&(_tg__ZTV8S20959C2__9S20959C16[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C2__9S20959C16[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C16[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C16[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3__9S20959C16[5]),  5,7},
  {&(_tg__ZTV8S20959C6__9S20959C16[4]),  4,6},
  {&(_tg__ZTV9S20959C10__9S20959C16[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C16[8]),  8,10},
  {&(_tg__ZTV8S20959C6__9S20959C10__9S20959C16[5]),  5,7},
  {&(_tg__ZTV9S20959C11__9S20959C16[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11__9S20959C16[5]),  5,7},
  {&(_tg__ZTV9S20959C13__9S20959C16[9]),  9,11},
  {&(_tg__ZTV8S20959C6__9S20959C13__9S20959C16[5]),  5,7},
  {&(_tg__ZTV8S20959C3__9S20959C13__9S20959C16[7]),  7,9},
  {&(_tg__ZTV9S20959C17__9S20959C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20959C16[];
extern  VTBL_ENTRY _ZTV9S20959C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C16[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C11D0Ev,_ZThn4_N9S20959C11D0Ev),
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C11D1Ev,_ZThn4_N9S20959C11D1Ev),
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C16D0Ev,_ZThn124_N9S20959C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C16D1Ev,_ZThn124_N9S20959C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20959C16D0Ev,_ZThn112_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C16D0Ev,_ZThn72_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev),
  (VTBL_ENTRY)_ZN9S20959C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20959C16D1Ev,_ZThn112_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C16D1Ev,_ZThn72_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev),
  (VTBL_ENTRY)_ZN9S20959C16D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C16 = {  "S20959C16", // class name
  bases_S20959C16, 27,
  &(vtc_S20959C16[0]), // expected_vtbl_contents
  &(vtt_S20959C16[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI9S20959C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20959C16),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C16),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C15  : virtual S20959C16 , S2265C28 , S20959C2 {
  ~S20959C15(); // tgen
  S20959C15(); // tgen
};
//SIG(-1 S20959C15) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd FL} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} BC9 BC3}


S20959C15 ::~S20959C15(){ note_dtor("S20959C15", this);} // tgen
S20959C15 ::S20959C15(){ note_ctor("S20959C15", this);} // tgen

static void Test_S20959C15()
{
  extern Class_Descriptor cd_S20959C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20959C15, buf);
    S20959C15 *dp, &lv = *(dp=new (buf) S20959C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20959C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C15)");
    /*is_ambiguous_... S20959C15::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(88,60), "S20959C15");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(88,60), "S20959C15");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(88,60), "S20959C15");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C13*), ABISELECT(88,60), "S20959C15");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(112,72), "S20959C15");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(112,72), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(112,72), "S20959C15");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*)(S20959C16*), ABISELECT(112,72), "S20959C15");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), ABISELECT(24,12), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*), ABISELECT(24,12), "S20959C15");
    check_base_class_offset(lv, (S20959C6*)(S20959C13*), ABISELECT(24,12), "S20959C15");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*)(S20959C16*), ABISELECT(24,12), "S20959C15");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(120,76), "S20959C15");
    check_base_class_offset(lv, (S2265C38*)(S20959C17*), ABISELECT(120,76), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*), ABISELECT(40,20), "S20959C15");
    check_base_class_offset(lv, (S20959C3*)(S20959C13*), ABISELECT(40,20), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*), ABISELECT(40,20), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*), ABISELECT(24,12), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*), ABISELECT(120,76), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*), ABISELECT(120,76), "S20959C15");
    check_base_class_offset(lv, (S20959C2*)(S20959C16*), ABISELECT(24,12), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*), ABISELECT(128,80), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(176,104), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(184,108), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C12 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(184,108), "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(176,104), "S20959C15");
    check_base_class_offset(lv, (S20959C12*)(S20959C13*), ABISELECT(176,104), "S20959C15");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*)(S20959C16*), ABISELECT(176,104), "S20959C15");
    check_base_class_offset(lv, (S20959C11*)(S20959C10*), ABISELECT(128,80), "S20959C15");
    check_base_class_offset(lv, (S20959C10*)(S20959C16*), ABISELECT(128,80), "S20959C15");
    /*is_ambiguous_... S20959C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C13*), ABISELECT(208,120), "S20959C15");
    check_base_class_offset(lv, (S20959C13*)(S20959C16*), ABISELECT(208,120), "S20959C15");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*)(S20959C17*), ABISELECT(232,136), "S20959C15");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(240,140), "S20959C15");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(240,140), "S20959C15");
    check_base_class_offset(lv, (S20959C12*)(S20959C17*), ABISELECT(232,136), "S20959C15");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C17*), ABISELECT(264,152), "S20959C15");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C17*), ABISELECT(264,152), "S20959C15");
    check_base_class_offset(lv, (S20959C17*)(S20959C16*), ABISELECT(224,132), "S20959C15");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*)(S20959C16*), ABISELECT(16,8), "S20959C15");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C11*)(S20959C16*), ABISELECT(16,8), "S20959C15");
    check_base_class_offset(lv, (S20959C16*), ABISELECT(16,8), "S20959C15");
    /*is_ambiguous_... S20959C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*), 0, "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*), 0, "S20959C15");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C2*), 0, "S20959C15");
    test_class_info(&lv, &cd_S20959C15);
    dp->~S20959C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C15(Test_S20959C15, "S20959C15", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN9S20959C15C1Ev();
extern void _ZN9S20959C15D1Ev();
Name_Map name_map_S20959C15[] = {
  NSPAIR(_ZN9S20959C15C1Ev),
  NSPAIR(_ZN9S20959C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C10;
extern VTBL_ENTRY _ZTI9S20959C10[];
extern  VTBL_ENTRY _ZTV9S20959C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C13;
extern VTBL_ENTRY _ZTI9S20959C13[];
extern  VTBL_ENTRY _ZTV9S20959C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C17;
extern VTBL_ENTRY _ZTI9S20959C17[];
extern  VTBL_ENTRY _ZTV9S20959C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C16;
extern VTBL_ENTRY _ZTI9S20959C16[];
extern  VTBL_ENTRY _ZTV9S20959C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
static Base_Class bases_S20959C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20959C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(40,20), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20959C2,    ABISELECT(24,12), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20959C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20959C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20959C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20959C17,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20959C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20959C16,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20959C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C15[];
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void _ZN9S20959C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void _ZN9S20959C15D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20959C15D1Ev,_ZThn8_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20959C15D0Ev,_ZThn8_N9S20959C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C15D1Ev,_ZThn12_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C15D0Ev,_ZThn12_N9S20959C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S20959C15D1Ev,_ZThn20_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S20959C15D0Ev,_ZThn20_N9S20959C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20959C15D1Ev,_ZThn80_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20959C15D0Ev,_ZThn80_N9S20959C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C15D1Ev,_ZThn120_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C15D0Ev,_ZThn120_N9S20959C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20959C15D1Ev,_ZThn132_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20959C15D0Ev,_ZThn132_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C15[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(72,52),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20959C15[];
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__A__9S20959C15[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S20959C2D1Ev,_ZThn20_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S20959C2D0Ev,_ZThn20_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2__A__9S20959C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20959C2D1Ev,_ZThn12_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20959C2D0Ev,_ZThn12_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C2__A__9S20959C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void _ZN9S20959C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void _ZN9S20959C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C15[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C119S20959C16__A1__9S20959C15[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C11D1Ev,_ZThn4_N9S20959C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C11D0Ev,_ZThn4_N9S20959C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C119S20959C16__A1__9S20959C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C16__9S20959C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C16__9S20959C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20959C16D1Ev,_ZThn72_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20959C16D0Ev,_ZThn72_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C16__9S20959C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20959C16D1Ev,_ZThn112_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20959C16D0Ev,_ZThn112_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C16__9S20959C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C16D1Ev,_ZThn124_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C16D0Ev,_ZThn124_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C16__9S20959C15[] = {
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2__9S20959C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3__9S20959C15[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C15[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void _ZN9S20959C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
extern void _ZN9S20959C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C10__9S20959C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__9S20959C15[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11__9S20959C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void _ZN9S20959C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
extern void _ZN9S20959C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C13__9S20959C15[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C13__9S20959C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void _ZN9S20959C17D1Ev();
extern void _ZN9S20959C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C15[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C17[0]),
  (VTBL_ENTRY)&_ZN9S20959C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C17D0Ev,
};
static  VTT_ENTRY vtt_S20959C15[] = {
  {&(_ZTV9S20959C15[16]),  16,82},
  {&(_tg__ZTV8S20959C2__A__9S20959C15[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C2__A__9S20959C15[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C2__A__9S20959C15[5]),  5,7},
  {&(_ZTV9S20959C15[33]),  33,82},
  {&(_ZTV9S20959C15[44]),  44,82},
  {&(_ZTV9S20959C15[53]),  53,82},
  {&(_ZTV9S20959C15[44]),  44,82},
  {&(_ZTV9S20959C15[63]),  63,82},
  {&(_ZTV9S20959C15[63]),  63,82},
  {&(_ZTV9S20959C15[74]),  74,82},
  {&(_ZTV9S20959C15[80]),  80,82},
  {&(_tg__ZTV9S20959C16__9S20959C15[15]),  15,17},
  {&(_tg__ZTV9S20959C119S20959C16__A1__9S20959C15[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C119S20959C16__A1__9S20959C15[5]),  5,7},
  {&(_tg__ZTV8S20959C2__9S20959C16__9S20959C15[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C16__9S20959C15[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C16__9S20959C15[9]),  9,11},
  {&(_tg__ZTV9S20959C10__9S20959C16__9S20959C15[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C16__9S20959C15[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C16__9S20959C15[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C16__9S20959C15[4]),  4,6},
  {&(_tg__ZTV8S20959C2__9S20959C15[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C2__9S20959C15[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C15[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C15[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3__9S20959C15[5]),  5,7},
  {&(_tg__ZTV8S20959C6__9S20959C15[4]),  4,6},
  {&(_tg__ZTV9S20959C10__9S20959C15[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C15[8]),  8,10},
  {&(_tg__ZTV8S20959C6__9S20959C10__9S20959C15[5]),  5,7},
  {&(_tg__ZTV9S20959C11__9S20959C15[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11__9S20959C15[5]),  5,7},
  {&(_tg__ZTV9S20959C13__9S20959C15[9]),  9,11},
  {&(_tg__ZTV8S20959C6__9S20959C13__9S20959C15[5]),  5,7},
  {&(_tg__ZTV8S20959C3__9S20959C13__9S20959C15[7]),  7,9},
  {&(_tg__ZTV9S20959C17__9S20959C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20959C15[];
extern  VTBL_ENTRY _ZTV9S20959C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C15[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C16D0Ev,_ZThn124_N9S20959C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C16D1Ev,_ZThn124_N9S20959C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C11D0Ev,_ZThn4_N9S20959C11D0Ev),
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C11D1Ev,_ZThn4_N9S20959C11D1Ev),
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20959C16D0Ev,_ZThn112_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C16D0Ev,_ZThn72_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev),
  (VTBL_ENTRY)_ZN9S20959C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20959C16D1Ev,_ZThn112_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C16D1Ev,_ZThn72_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev),
  (VTBL_ENTRY)_ZN9S20959C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20959C2D0Ev,_ZThn12_N8S20959C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20959C2D0Ev,_ZThn20_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20959C2D1Ev,_ZThn12_N8S20959C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20959C2D1Ev,_ZThn20_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C15D0Ev,_ZThn132_N9S20959C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C15D1Ev,_ZThn132_N9S20959C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C15D0Ev,_ZThn120_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20959C15D0Ev,_ZThn80_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20959C15D0Ev,_ZThn20_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C15D0Ev,_ZThn12_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C15D0Ev,_ZThn8_N9S20959C15D0Ev),
  (VTBL_ENTRY)_ZN9S20959C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C15D1Ev,_ZThn120_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20959C15D1Ev,_ZThn80_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20959C15D1Ev,_ZThn20_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C15D1Ev,_ZThn12_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C15D1Ev,_ZThn8_N9S20959C15D1Ev),
  (VTBL_ENTRY)_ZN9S20959C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C15 = {  "S20959C15", // class name
  bases_S20959C15, 31,
  &(vtc_S20959C15[0]), // expected_vtbl_contents
  &(vtt_S20959C15[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI9S20959C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20959C15),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C15),37, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C14  : virtual S5217C60_nt , S20959C15 {
  ~S20959C14(); // tgen
  S20959C14(); // tgen
};
//SIG(-1 S20959C14) C1{ VBC2{ m Fp} BC3{ VBC4{ VBC5{ VBC6{ VBC7{ BC2 Fp[2]} VBC2 VBC8{ VBC2 VBC7 vd} VBC9{ m} vd Fi[9]} BC9 VBC10{ m} Fp} VBC11{ VBC12{ VBC2 BC9 VBC13{ BC2 BC7} VBC8} FC8} VBC14{ BC9 VBC7 VBC8 VBC13 VBC6 vd FL} VBC15{ BC13 BC7 VBC9 vd} BC12 vd} BC10 BC5}}


S20959C14 ::~S20959C14(){ note_dtor("S20959C14", this);} // tgen
S20959C14 ::S20959C14(){ note_ctor("S20959C14", this);} // tgen

static void Test_S20959C14()
{
  extern Class_Descriptor cd_S20959C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20959C14, buf);
    S20959C14 *dp, &lv = *(dp=new (buf) S20959C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20959C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C14)");
    /*is_ambiguous_... S20959C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S20959C14");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(16,8), "S20959C14");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(16,8), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(16,8), "S20959C14");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*)(S20959C16*), ABISELECT(16,8), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(96,64), "S20959C14");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(96,64), "S20959C14");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(96,64), "S20959C14");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C13*), ABISELECT(96,64), "S20959C14");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), ABISELECT(32,16), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*), ABISELECT(32,16), "S20959C14");
    check_base_class_offset(lv, (S20959C6*)(S20959C13*), ABISELECT(32,16), "S20959C14");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*)(S20959C16*), ABISELECT(32,16), "S20959C14");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(120,76), "S20959C14");
    check_base_class_offset(lv, (S2265C38*)(S20959C17*), ABISELECT(120,76), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*), ABISELECT(48,24), "S20959C14");
    check_base_class_offset(lv, (S20959C3*)(S20959C13*), ABISELECT(48,24), "S20959C14");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*)(S20959C15*), ABISELECT(48,24), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*), ABISELECT(32,16), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*), ABISELECT(120,76), "S20959C14");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*)(S20959C15*), ABISELECT(120,76), "S20959C14");
    check_base_class_offset(lv, (S20959C2*)(S20959C16*), ABISELECT(32,16), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*), ABISELECT(128,80), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(176,104), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(184,108), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C12 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(184,108), "S20959C14");
    /*is_ambiguous_... S20959C14::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(176,104), "S20959C14");
    check_base_class_offset(lv, (S20959C12*)(S20959C13*), ABISELECT(176,104), "S20959C14");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*)(S20959C16*), ABISELECT(176,104), "S20959C14");
    check_base_class_offset(lv, (S20959C11*)(S20959C10*), ABISELECT(128,80), "S20959C14");
    check_base_class_offset(lv, (S20959C10*)(S20959C16*), ABISELECT(128,80), "S20959C14");
    /*is_ambiguous_... S20959C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C13*), ABISELECT(208,120), "S20959C14");
    check_base_class_offset(lv, (S20959C13*)(S20959C16*), ABISELECT(208,120), "S20959C14");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*)(S20959C17*), ABISELECT(232,136), "S20959C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(240,140), "S20959C14");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(240,140), "S20959C14");
    check_base_class_offset(lv, (S20959C12*)(S20959C17*), ABISELECT(232,136), "S20959C14");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C17*), ABISELECT(264,152), "S20959C14");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C17*), ABISELECT(264,152), "S20959C14");
    check_base_class_offset(lv, (S20959C17*)(S20959C16*), ABISELECT(224,132), "S20959C14");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*)(S20959C16*), ABISELECT(24,12), "S20959C14");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C11*)(S20959C16*), ABISELECT(24,12), "S20959C14");
    check_base_class_offset(lv, (S20959C16*)(S20959C15*), ABISELECT(24,12), "S20959C14");
    /*is_ambiguous_... S20959C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C15*), 0, "S20959C14");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*)(S20959C15*), 0, "S20959C14");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C2*)(S20959C15*), 0, "S20959C14");
    check_base_class_offset(lv, (S20959C15*), 0, "S20959C14");
    test_class_info(&lv, &cd_S20959C14);
    dp->~S20959C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C14(Test_S20959C14, "S20959C14", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN9S20959C14C1Ev();
extern void _ZN9S20959C14D1Ev();
Name_Map name_map_S20959C14[] = {
  NSPAIR(_ZN9S20959C14C1Ev),
  NSPAIR(_ZN9S20959C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C10;
extern VTBL_ENTRY _ZTI9S20959C10[];
extern  VTBL_ENTRY _ZTV9S20959C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C13;
extern VTBL_ENTRY _ZTI9S20959C13[];
extern  VTBL_ENTRY _ZTV9S20959C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C17;
extern VTBL_ENTRY _ZTI9S20959C17[];
extern  VTBL_ENTRY _ZTV9S20959C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C16;
extern VTBL_ENTRY _ZTI9S20959C16[];
extern  VTBL_ENTRY _ZTV9S20959C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S20959C15;
extern VTBL_ENTRY _ZTI9S20959C15[];
extern  VTBL_ENTRY _ZTV9S20959C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C15[];
static Base_Class bases_S20959C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20959C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20959C2,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20959C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20959C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20959C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20959C17,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20959C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20959C16,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20959C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20959C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20959C14[];
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void _ZN9S20959C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void _ZN9S20959C14D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C14D1Ev,_ZThn12_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C14D0Ev,_ZThn12_N9S20959C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20959C14D1Ev,_ZThn16_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S20959C14D0Ev,_ZThn16_N9S20959C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S20959C14D1Ev,_ZThn24_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S20959C14D0Ev,_ZThn24_N9S20959C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20959C14D1Ev,_ZThn80_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S20959C14D0Ev,_ZThn80_N9S20959C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C14D1Ev,_ZThn120_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C14D0Ev,_ZThn120_N9S20959C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20959C14D1Ev,_ZThn132_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20959C14D0Ev,_ZThn132_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C14[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20959C14[];
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void _ZN9S20959C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void _ZN9S20959C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C15__9S20959C14[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C29S20959C15__A1__9S20959C14[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20959C2D1Ev,_ZThn24_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20959C2D0Ev,_ZThn24_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C29S20959C15__A1__9S20959C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20959C2D1Ev,_ZThn16_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20959C2D0Ev,_ZThn16_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C29S20959C15__A1__9S20959C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C15D1Ev,_ZThn12_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C15D0Ev,_ZThn12_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C15__9S20959C14[] = {
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S20959C15D1Ev,_ZThn16_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S20959C15D0Ev,_ZThn16_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C15__9S20959C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S20959C15D1Ev,_ZThn24_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S20959C15D0Ev,_ZThn24_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C15__9S20959C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20959C15D1Ev,_ZThn80_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20959C15D0Ev,_ZThn80_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C15__9S20959C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C15D1Ev,_ZThn120_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C15D0Ev,_ZThn120_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C15__9S20959C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20959C15D1Ev,_ZThn132_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20959C15D0Ev,_ZThn132_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C15__9S20959C14[] = {
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void _ZN9S20959C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void _ZN9S20959C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C14[] = {
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C119S20959C16__A1__9S20959C14[] = {
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C11D1Ev,_ZThn4_N9S20959C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C11D0Ev,_ZThn4_N9S20959C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C119S20959C16__A1__9S20959C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C16__9S20959C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C16__9S20959C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn104_N9S20959C16D1Ev,_ZThn68_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn104_N9S20959C16D0Ev,_ZThn68_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C16__9S20959C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S20959C16D1Ev,_ZThn108_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S20959C16D0Ev,_ZThn108_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C16__9S20959C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-184,-108),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn200_N9S20959C16D1Ev,_ZThn120_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn200_N9S20959C16D0Ev,_ZThn120_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C16__9S20959C14[] = {
  ABISELECT(-200,-120),
  ABISELECT(-104,-56),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2__9S20959C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3__9S20959C14[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C14[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void _ZN9S20959C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
extern void _ZN9S20959C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C10__9S20959C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__9S20959C14[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11__9S20959C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void _ZN9S20959C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
extern void _ZN9S20959C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C13__9S20959C14[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C13__9S20959C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void _ZN9S20959C17D1Ev();
extern void _ZN9S20959C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C14[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C17[0]),
  (VTBL_ENTRY)&_ZN9S20959C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C17D0Ev,
};
static  VTT_ENTRY vtt_S20959C14[] = {
  {&(_ZTV9S20959C14[16]),  16,82},
  {&(_tg__ZTV9S20959C15__9S20959C14[16]),  16,18},
  {&(_tg__ZTV8S20959C29S20959C15__A1__9S20959C14[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C29S20959C15__A1__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C29S20959C15__A1__9S20959C14[5]),  5,7},
  {&(_tg__ZTV9S20959C16__9S20959C15__9S20959C14[15]),  15,17},
  {&(_tg__ZTV8S20959C2__9S20959C15__9S20959C14[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C15__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C15__9S20959C14[9]),  9,11},
  {&(_tg__ZTV9S20959C10__9S20959C15__9S20959C14[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C15__9S20959C14[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C15__9S20959C14[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C15__9S20959C14[4]),  4,6},
  {&(_ZTV9S20959C14[33]),  33,82},
  {&(_ZTV9S20959C14[44]),  44,82},
  {&(_ZTV9S20959C14[53]),  53,82},
  {&(_ZTV9S20959C14[44]),  44,82},
  {&(_ZTV9S20959C14[63]),  63,82},
  {&(_ZTV9S20959C14[63]),  63,82},
  {&(_ZTV9S20959C14[74]),  74,82},
  {&(_ZTV9S20959C14[80]),  80,82},
  {&(_tg__ZTV9S20959C16__9S20959C14[15]),  15,17},
  {&(_tg__ZTV9S20959C119S20959C16__A1__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C119S20959C16__A1__9S20959C14[5]),  5,7},
  {&(_tg__ZTV8S20959C2__9S20959C16__9S20959C14[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C16__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C16__9S20959C14[9]),  9,11},
  {&(_tg__ZTV9S20959C10__9S20959C16__9S20959C14[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C16__9S20959C14[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C16__9S20959C14[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C16__9S20959C14[4]),  4,6},
  {&(_tg__ZTV8S20959C2__9S20959C14[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C2__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C14[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3__9S20959C14[5]),  5,7},
  {&(_tg__ZTV8S20959C6__9S20959C14[4]),  4,6},
  {&(_tg__ZTV9S20959C10__9S20959C14[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C14[8]),  8,10},
  {&(_tg__ZTV8S20959C6__9S20959C10__9S20959C14[5]),  5,7},
  {&(_tg__ZTV9S20959C11__9S20959C14[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11__9S20959C14[5]),  5,7},
  {&(_tg__ZTV9S20959C13__9S20959C14[9]),  9,11},
  {&(_tg__ZTV8S20959C6__9S20959C13__9S20959C14[5]),  5,7},
  {&(_tg__ZTV8S20959C3__9S20959C13__9S20959C14[7]),  7,9},
  {&(_tg__ZTV9S20959C17__9S20959C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20959C14[];
extern  VTBL_ENTRY _ZTV9S20959C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C14[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20959C16D0Ev,_ZThn120_N9S20959C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20959C16D1Ev,_ZThn120_N9S20959C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C11D0Ev,_ZThn4_N9S20959C11D0Ev),
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C11D1Ev,_ZThn4_N9S20959C11D1Ev),
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20959C16D0Ev,_ZThn108_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20959C16D0Ev,_ZThn68_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev),
  (VTBL_ENTRY)_ZN9S20959C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20959C16D1Ev,_ZThn108_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20959C16D1Ev,_ZThn68_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev),
  (VTBL_ENTRY)_ZN9S20959C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C15D0Ev,_ZThn132_N9S20959C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C15D1Ev,_ZThn132_N9S20959C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20959C2D0Ev,_ZThn16_N8S20959C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20959C2D0Ev,_ZThn24_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20959C2D1Ev,_ZThn16_N8S20959C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20959C2D1Ev,_ZThn24_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C15D0Ev,_ZThn120_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20959C15D0Ev,_ZThn80_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20959C15D0Ev,_ZThn24_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20959C15D0Ev,_ZThn16_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C15D0Ev,_ZThn12_N9S20959C15D0Ev),
  (VTBL_ENTRY)_ZN9S20959C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C15D1Ev,_ZThn120_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20959C15D1Ev,_ZThn80_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20959C15D1Ev,_ZThn24_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20959C15D1Ev,_ZThn16_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C15D1Ev,_ZThn12_N9S20959C15D1Ev),
  (VTBL_ENTRY)_ZN9S20959C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C14D0Ev,_ZThn132_N9S20959C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C14D1Ev,_ZThn132_N9S20959C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C14D0Ev,_ZThn120_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20959C14D0Ev,_ZThn80_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20959C14D0Ev,_ZThn24_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20959C14D0Ev,_ZThn16_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C14D0Ev,_ZThn12_N9S20959C14D0Ev),
  (VTBL_ENTRY)_ZN9S20959C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C14D1Ev,_ZThn120_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20959C14D1Ev,_ZThn80_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20959C14D1Ev,_ZThn24_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20959C14D1Ev,_ZThn16_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C14D1Ev,_ZThn12_N9S20959C14D1Ev),
  (VTBL_ENTRY)_ZN9S20959C14D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C14 = {  "S20959C14", // class name
  bases_S20959C14, 32,
  &(vtc_S20959C14[0]), // expected_vtbl_contents
  &(vtt_S20959C14[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI9S20959C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20959C14),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20959C14),46, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C9  : virtual S20959C3 , virtual S20959C10 , virtual S20959C13 , S20959C14 {
  virtual  ~S20959C9(); // _ZN8S20959C9D2Ev
  S20959C9(); // tgen
};
//SIG(-1 S20959C9) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} VBC7{ VBC8{ VBC4 BC6 VBC9{ BC4 BC3} VBC5} FC5} VBC10{ BC6 VBC3 VBC5 VBC9 VBC2 vd FL} BC11{ VBC4 BC12{ VBC13{ VBC14{ VBC2 BC6 VBC15{ m} Fp} VBC7 VBC10 VBC16{ BC9 BC3 VBC6 vd} BC8 vd} BC15 BC14}} vd}


 S20959C9 ::~S20959C9(){ note_dtor("S20959C9", this);}
S20959C9 ::S20959C9(){ note_ctor("S20959C9", this);} // tgen

static void Test_S20959C9()
{
  extern Class_Descriptor cd_S20959C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20959C9, buf);
    S20959C9 *dp, &lv = *(dp=new (buf) S20959C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20959C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C9)");
    /*is_ambiguous_... S20959C9::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(64,48), "S20959C9");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(64,48), "S20959C9");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(64,48), "S20959C9");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C13*), ABISELECT(64,48), "S20959C9");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(88,60), "S20959C9");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(88,60), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(88,60), "S20959C9");
    /*is_ambiguous_... S20959C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C14*), ABISELECT(88,60), "S20959C9");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*)(S20959C16*), ABISELECT(88,60), "S20959C9");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), ABISELECT(16,8), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*), ABISELECT(16,8), "S20959C9");
    check_base_class_offset(lv, (S20959C6*)(S20959C13*), ABISELECT(16,8), "S20959C9");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*)(S20959C16*), ABISELECT(16,8), "S20959C9");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(96,64), "S20959C9");
    check_base_class_offset(lv, (S2265C38*)(S20959C17*), ABISELECT(96,64), "S20959C9");
    check_base_class_offset(lv, (S20959C3*), ABISELECT(16,8), "S20959C9");
    check_base_class_offset(lv, (S20959C3*)(S20959C13*), ABISELECT(16,8), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*), ABISELECT(16,8), "S20959C9");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*)(S20959C15*)(S20959C14*), ABISELECT(16,8), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*), ABISELECT(104,68), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(152,92), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(160,96), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C12 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(160,96), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(152,92), "S20959C9");
    check_base_class_offset(lv, (S20959C12*)(S20959C13*), ABISELECT(152,92), "S20959C9");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*)(S20959C16*), ABISELECT(152,92), "S20959C9");
    check_base_class_offset(lv, (S20959C11*)(S20959C10*), ABISELECT(104,68), "S20959C9");
    check_base_class_offset(lv, (S20959C10*), ABISELECT(104,68), "S20959C9");
    check_base_class_offset(lv, (S20959C10*)(S20959C16*), ABISELECT(104,68), "S20959C9");
    /*is_ambiguous_... S20959C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C13*), ABISELECT(184,108), "S20959C9");
    check_base_class_offset(lv, (S20959C13*), ABISELECT(184,108), "S20959C9");
    check_base_class_offset(lv, (S20959C13*)(S20959C16*), ABISELECT(184,108), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*), ABISELECT(208,124), "S20959C9");
    /*is_ambiguous_... S20959C9::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*), ABISELECT(224,132), "S20959C9");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*)(S20959C15*)(S20959C14*), ABISELECT(224,132), "S20959C9");
    check_base_class_offset(lv, (S20959C2*)(S20959C16*), ABISELECT(208,124), "S20959C9");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*)(S20959C17*), ABISELECT(232,136), "S20959C9");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(240,140), "S20959C9");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(240,140), "S20959C9");
    check_base_class_offset(lv, (S20959C12*)(S20959C17*), ABISELECT(232,136), "S20959C9");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C17*), ABISELECT(264,152), "S20959C9");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C17*), ABISELECT(264,152), "S20959C9");
    check_base_class_offset(lv, (S20959C17*)(S20959C16*), ABISELECT(224,132), "S20959C9");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*)(S20959C16*), ABISELECT(200,120), "S20959C9");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C11*)(S20959C16*), ABISELECT(200,120), "S20959C9");
    check_base_class_offset(lv, (S20959C16*)(S20959C15*)(S20959C14*), ABISELECT(200,120), "S20959C9");
    /*is_ambiguous_... S20959C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C15*)(S20959C14*), 0, "S20959C9");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*)(S20959C15*)(S20959C14*), 0, "S20959C9");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C2*)(S20959C15*)(S20959C14*), 0, "S20959C9");
    check_base_class_offset(lv, (S20959C15*)(S20959C14*), 0, "S20959C9");
    check_base_class_offset(lv, (S20959C14*), 0, "S20959C9");
    test_class_info(&lv, &cd_S20959C9);
    dp->~S20959C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C9(Test_S20959C9, "S20959C9", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN8S20959C9C1Ev();
extern void _ZN8S20959C9D2Ev();
Name_Map name_map_S20959C9[] = {
  NSPAIR(_ZN8S20959C9C1Ev),
  NSPAIR(_ZN8S20959C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C10;
extern VTBL_ENTRY _ZTI9S20959C10[];
extern  VTBL_ENTRY _ZTV9S20959C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C13;
extern VTBL_ENTRY _ZTI9S20959C13[];
extern  VTBL_ENTRY _ZTV9S20959C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C13[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C17;
extern VTBL_ENTRY _ZTI9S20959C17[];
extern  VTBL_ENTRY _ZTV9S20959C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C16;
extern VTBL_ENTRY _ZTI9S20959C16[];
extern  VTBL_ENTRY _ZTV9S20959C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S20959C15;
extern VTBL_ENTRY _ZTI9S20959C15[];
extern  VTBL_ENTRY _ZTV9S20959C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C15[];
extern Class_Descriptor cd_S20959C14;
extern VTBL_ENTRY _ZTI9S20959C14[];
extern  VTBL_ENTRY _ZTV9S20959C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C14[];
static Base_Class bases_S20959C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20959C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20959C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20959C10,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20959C13,    ABISELECT(184,108), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(208,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20959C2,    ABISELECT(208,124), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20959C17,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20959C11,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20959C16,    ABISELECT(200,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20959C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20959C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20959C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20959C9[];
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void _ZN8S20959C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void _ZN8S20959C9D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C9D1Ev,_ZThn8_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C9D0Ev,_ZThn8_N8S20959C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn104_N8S20959C9D1Ev,_ZThn68_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn104_N8S20959C9D0Ev,_ZThn68_N8S20959C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn184_N8S20959C9D1Ev,_ZThn108_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn184_N8S20959C9D0Ev,_ZThn108_N8S20959C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn200_N8S20959C9D1Ev,_ZThn120_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn200_N8S20959C9D0Ev,_ZThn120_N8S20959C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn208_N8S20959C9D1Ev,_ZThn124_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn208_N8S20959C9D0Ev,_ZThn124_N8S20959C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20959C9D1Ev,_ZTv0_n16_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S20959C9D1Ev,_ZThn132_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20959C9D0Ev,_ZTv0_n16_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S20959C9D0Ev,_ZThn132_N8S20959C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C9[] = {
  ABISELECT(224,132),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,124),
  ABISELECT(200,120),
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-200,-120),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-208,-124),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-128,-68),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20959C9D1Ev,_ZTv0_n16_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20959C9D0Ev,_ZTv0_n16_N8S20959C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20959C9[];
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void _ZN9S20959C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void _ZN9S20959C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C14__8S20959C9[] = {
  ABISELECT(224,132),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,124),
  ABISELECT(200,120),
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void _ZN9S20959C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void _ZN9S20959C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C159S20959C14__8S20959C9[] = {
  ABISELECT(224,132),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,124),
  ABISELECT(200,120),
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C29S20959C159S20959C14__A1__8S20959C9[] = {
  ABISELECT(224,132),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C29S20959C159S20959C14__A1__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn200_N9S20959C15D1Ev,_ZThn120_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn200_N9S20959C15D0Ev,_ZThn120_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C159S20959C14__8S20959C9[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-200,-120),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C15D1Ev,_ZThn124_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C15D0Ev,_ZThn124_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C159S20959C14__8S20959C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-208,-124),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20959C15D1Ev,_ZThn8_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20959C15D0Ev,_ZThn8_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C159S20959C14__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S20959C15D1Ev,_ZThn68_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn104_N9S20959C15D0Ev,_ZThn68_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C159S20959C14__8S20959C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn184_N9S20959C15D1Ev,_ZThn108_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn184_N9S20959C15D0Ev,_ZThn108_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C159S20959C14__8S20959C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20959C15D1Ev,_ZThn132_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20959C15D0Ev,_ZThn132_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C159S20959C14__8S20959C9[] = {
  ABISELECT(-224,-132),
  ABISELECT(-128,-68),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn200_N9S20959C14D1Ev,_ZThn120_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn200_N9S20959C14D0Ev,_ZThn120_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C14__8S20959C9[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  ABISELECT(-200,-120),
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20959C14D1Ev,_ZThn124_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20959C14D0Ev,_ZThn124_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C14__8S20959C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-208,-124),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20959C14D1Ev,_ZThn8_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20959C14D0Ev,_ZThn8_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C14__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20959C14D1Ev,_ZThn68_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn104_N9S20959C14D0Ev,_ZThn68_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C14__8S20959C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn184_N9S20959C14D1Ev,_ZThn108_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn184_N9S20959C14D0Ev,_ZThn108_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C14__8S20959C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20959C14D1Ev,_ZThn132_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20959C14D0Ev,_ZThn132_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C14__8S20959C9[] = {
  ABISELECT(-224,-132),
  ABISELECT(-128,-68),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C9[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void _ZN9S20959C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
extern void _ZN9S20959C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__8S20959C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C10__8S20959C9[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__8S20959C9[] = {
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11__8S20959C9[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void _ZN9S20959C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
extern void _ZN9S20959C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__8S20959C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C13__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void _ZN9S20959C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void _ZN9S20959C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__8S20959C9[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-12),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(24,12),
  ABISELECT(-104,-56),
  ABISELECT(-184,-112),
  ABISELECT(8,4),
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C119S20959C16__A1__8S20959C9[] = {
  ABISELECT(-184,-112),
  ABISELECT(-48,-28),
  0,
  ABISELECT(-136,-72),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C119S20959C16__A1__8S20959C9[] = {
  ABISELECT(184,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C16__8S20959C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-8,-4),
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C16__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(184,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C16__8S20959C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(96,52),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C16__8S20959C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(16,12),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C16__8S20959C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(-128,-68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__8S20959C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-60),
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  0,
  ABISELECT(-144,-76),
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2__8S20959C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(192,116),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(192,116),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void _ZN9S20959C17D1Ev();
extern void _ZN9S20959C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20959C17__8S20959C9[] = {
  ABISELECT(-128,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C17[0]),
  (VTBL_ENTRY)&_ZN9S20959C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C17D0Ev,
};
static  VTT_ENTRY vtt_S20959C9[] = {
  {&(_ZTV8S20959C9[16]),  16,82},
  {&(_tg__ZTV9S20959C14__8S20959C9[16]),  16,18},
  {&(_tg__ZTV9S20959C159S20959C14__8S20959C9[16]),  16,18},
  {&(_tg__ZTV8S20959C29S20959C159S20959C14__A1__8S20959C9[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C29S20959C159S20959C14__A1__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__8S20959C29S20959C159S20959C14__A1__8S20959C9[7]),  7,9},
  {&(_tg__ZTV9S20959C16__9S20959C159S20959C14__8S20959C9[15]),  15,17},
  {&(_tg__ZTV8S20959C2__9S20959C159S20959C14__8S20959C9[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C159S20959C14__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__9S20959C159S20959C14__8S20959C9[7]),  7,9},
  {&(_tg__ZTV9S20959C10__9S20959C159S20959C14__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C159S20959C14__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C159S20959C14__8S20959C9[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C159S20959C14__8S20959C9[4]),  4,6},
  {&(_tg__ZTV9S20959C16__9S20959C14__8S20959C9[15]),  15,17},
  {&(_tg__ZTV8S20959C2__9S20959C14__8S20959C9[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C14__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__9S20959C14__8S20959C9[7]),  7,9},
  {&(_tg__ZTV9S20959C10__9S20959C14__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C14__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C14__8S20959C9[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C14__8S20959C9[4]),  4,6},
  {&(_ZTV8S20959C9[25]),  25,82},
  {&(_ZTV8S20959C9[25]),  25,82},
  {&(_ZTV8S20959C9[35]),  35,82},
  {&(_ZTV8S20959C9[35]),  35,82},
  {&(_ZTV8S20959C9[46]),  46,82},
  {&(_ZTV8S20959C9[63]),  63,82},
  {&(_ZTV8S20959C9[74]),  74,82},
  {&(_ZTV8S20959C9[80]),  80,82},
  {&(_tg__ZTV8S20959C3__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C9[4]),  4,6},
  {&(_tg__ZTV9S20959C10__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C10__8S20959C9[8]),  8,10},
  {&(_tg__ZTV8S20959C6__9S20959C10__8S20959C9[5]),  5,7},
  {&(_tg__ZTV9S20959C11__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11__8S20959C9[5]),  5,7},
  {&(_tg__ZTV9S20959C13__8S20959C9[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C13__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__9S20959C13__8S20959C9[7]),  7,9},
  {&(_tg__ZTV9S20959C16__8S20959C9[15]),  15,17},
  {&(_tg__ZTV9S20959C119S20959C16__A1__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C119S20959C16__A1__8S20959C9[5]),  5,7},
  {&(_tg__ZTV8S20959C2__9S20959C16__8S20959C9[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C16__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__9S20959C16__8S20959C9[7]),  7,9},
  {&(_tg__ZTV9S20959C10__9S20959C16__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C16__8S20959C9[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C16__8S20959C9[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C16__8S20959C9[4]),  4,6},
  {&(_tg__ZTV8S20959C2__8S20959C9[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C2__8S20959C9[7]),  7,9},
  {&(_tg__ZTV8S20959C3__8S20959C2__8S20959C9[7]),  7,9},
  {&(_tg__ZTV9S20959C17__8S20959C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20959C9[];
extern  VTBL_ENTRY _ZTV8S20959C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C9[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D0Ev,_ZThn12_N9S20959C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20959C16D1Ev,_ZThn12_N9S20959C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D0Ev,_ZThn4_N9S20959C16D0Ev),
  (VTBL_ENTRY)_ZN9S20959C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20959C16D1Ev,_ZThn4_N9S20959C16D1Ev),
  (VTBL_ENTRY)_ZN9S20959C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C14D0Ev,_ZThn132_N9S20959C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C14D1Ev,_ZThn132_N9S20959C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C15D0Ev,_ZThn132_N9S20959C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20959C15D1Ev,_ZThn132_N9S20959C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20959C15D0Ev,_ZThn108_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20959C15D0Ev,_ZThn68_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C15D0Ev,_ZThn8_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C15D0Ev,_ZThn124_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20959C15D0Ev,_ZThn120_N9S20959C15D0Ev),
  (VTBL_ENTRY)_ZN9S20959C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20959C15D1Ev,_ZThn108_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20959C15D1Ev,_ZThn68_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C15D1Ev,_ZThn8_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C15D1Ev,_ZThn124_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20959C15D1Ev,_ZThn120_N9S20959C15D1Ev),
  (VTBL_ENTRY)_ZN9S20959C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20959C14D0Ev,_ZThn108_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20959C14D0Ev,_ZThn68_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C14D0Ev,_ZThn8_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C14D0Ev,_ZThn124_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20959C14D0Ev,_ZThn120_N9S20959C14D0Ev),
  (VTBL_ENTRY)_ZN9S20959C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20959C14D1Ev,_ZThn108_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20959C14D1Ev,_ZThn68_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C14D1Ev,_ZThn8_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20959C14D1Ev,_ZThn124_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20959C14D1Ev,_ZThn120_N9S20959C14D1Ev),
  (VTBL_ENTRY)_ZN9S20959C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20959C9D0Ev,_ZTv0_n16_N8S20959C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20959C9D0Ev,_ZThn132_N8S20959C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20959C9D1Ev,_ZTv0_n16_N8S20959C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20959C9D1Ev,_ZThn132_N8S20959C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20959C9D0Ev,_ZThn124_N8S20959C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20959C9D0Ev,_ZThn120_N8S20959C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20959C9D0Ev,_ZThn108_N8S20959C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20959C9D0Ev,_ZThn68_N8S20959C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C9D0Ev,_ZThn8_N8S20959C9D0Ev),
  (VTBL_ENTRY)_ZN8S20959C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20959C9D1Ev,_ZThn124_N8S20959C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20959C9D1Ev,_ZThn120_N8S20959C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20959C9D1Ev,_ZThn108_N8S20959C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20959C9D1Ev,_ZThn68_N8S20959C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C9D1Ev,_ZThn8_N8S20959C9D1Ev),
  (VTBL_ENTRY)_ZN8S20959C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C9 = {  "S20959C9", // class name
  bases_S20959C9, 33,
  &(vtc_S20959C9[0]), // expected_vtbl_contents
  &(vtt_S20959C9[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI8S20959C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20959C9),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20959C9),55, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20959C1  : virtual S20959C2 , virtual S20959C9 {
  ::S20959C17 s20959c1f0;
  virtual  ~S20959C1(); // _ZN8S20959C1D2Ev
  S20959C1(); // tgen
};
//SIG(1 S20959C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC3 VBC10{ VBC11{ VBC5 BC7 VBC12{ BC5 BC4} VBC6} FC6} VBC13{ BC7 VBC4 VBC6 VBC12 VBC3 vd FL} BC14{ VBC5 BC15{ VBC16{ VBC2 VBC10 VBC13 VBC17{ BC12 BC4 VBC7 vd} BC11 vd} BC8 BC2}} vd} vd FC17}


 S20959C1 ::~S20959C1(){ note_dtor("S20959C1", this);}
S20959C1 ::S20959C1(){ note_ctor("S20959C1", this);} // tgen

static void Test_S20959C1()
{
  extern Class_Descriptor cd_S20959C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,50)];
    init_test(&cd_S20959C1, buf);
    S20959C1 *dp, &lv = *(dp=new (buf) S20959C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,196), "sizeof(S20959C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20959C1)");
    /*is_ambiguous_... S20959C1::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*), ABISELECT(136,84), "S20959C1");
    check_base_class_offset(lv, (S20959C4*)(S20959C3*), ABISELECT(136,84), "S20959C1");
    check_base_class_offset(lv, (S20959C4*)(S20959C6*), ABISELECT(136,84), "S20959C1");
    /*is_ambiguous_... S20959C13::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C13*), ABISELECT(136,84), "S20959C1");
    /*is_ambiguous_... S20959C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C3*), ABISELECT(160,96), "S20959C1");
    /*is_ambiguous_... S20959C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C6*), ABISELECT(160,96), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*), ABISELECT(160,96), "S20959C1");
    /*is_ambiguous_... S20959C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C14*)(S20959C9*), ABISELECT(160,96), "S20959C1");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C11*)(S20959C16*), ABISELECT(160,96), "S20959C1");
    check_base_class_offset(lv, (S20959C6*)(S20959C3*), ABISELECT(72,36), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*), ABISELECT(72,36), "S20959C1");
    check_base_class_offset(lv, (S20959C6*)(S20959C13*), ABISELECT(72,36), "S20959C1");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C6*)(S20959C11*)(S20959C16*), ABISELECT(72,36), "S20959C1");
    check_base_class_offset(lv, (S2265C38*)(S20959C3*), ABISELECT(168,100), "S20959C1");
    check_base_class_offset(lv, (S2265C38*)(S20959C17*), ABISELECT(168,100), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*), ABISELECT(88,44), "S20959C1");
    check_base_class_offset(lv, (S20959C3*)(S20959C9*), ABISELECT(88,44), "S20959C1");
    check_base_class_offset(lv, (S20959C3*)(S20959C13*), ABISELECT(88,44), "S20959C1");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C3*)(S20959C2*)(S20959C15*)(S20959C14*)(S20959C9*), ABISELECT(88,44), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*), ABISELECT(72,36), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*), 0, "S20959C1");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C2*)(S20959C15*)(S20959C14*)(S20959C9*), 0, "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C2*), ABISELECT(72,36), "S20959C1");
    check_base_class_offset(lv, (S20959C2*)(S20959C16*), ABISELECT(72,36), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*), ABISELECT(192,112), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*), ABISELECT(240,136), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*), ABISELECT(248,140), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C12 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C12*), ABISELECT(248,140), "S20959C1");
    /*is_ambiguous_... S20959C1::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*), ABISELECT(240,136), "S20959C1");
    check_base_class_offset(lv, (S20959C12*)(S20959C13*), ABISELECT(240,136), "S20959C1");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C12*)(S20959C11*)(S20959C16*), ABISELECT(240,136), "S20959C1");
    check_base_class_offset(lv, (S20959C11*)(S20959C10*), ABISELECT(192,112), "S20959C1");
    check_base_class_offset(lv, (S20959C10*)(S20959C9*), ABISELECT(192,112), "S20959C1");
    check_base_class_offset(lv, (S20959C10*)(S20959C16*), ABISELECT(192,112), "S20959C1");
    /*is_ambiguous_... S20959C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C13*), ABISELECT(272,152), "S20959C1");
    check_base_class_offset(lv, (S20959C13*)(S20959C9*), ABISELECT(272,152), "S20959C1");
    check_base_class_offset(lv, (S20959C13*)(S20959C16*), ABISELECT(272,152), "S20959C1");
    /*is_ambiguous_... S20959C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C12*)(S20959C17*), ABISELECT(296,168), "S20959C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(304,172), "S20959C1");
    check_base_class_offset(lv, (S20959C4*)(S20959C12*)(S20959C17*), ABISELECT(304,172), "S20959C1");
    check_base_class_offset(lv, (S20959C12*)(S20959C17*), ABISELECT(296,168), "S20959C1");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20959C4*)(S20959C17*), ABISELECT(328,184), "S20959C1");
    /*is_ambiguous_... S20959C17::S20959C4 */ AMB_check_base_class_offset(lv, (S20959C4*)(S20959C17*), ABISELECT(328,184), "S20959C1");
    check_base_class_offset(lv, (S20959C17*)(S20959C16*), ABISELECT(288,164), "S20959C1");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C11*)(S20959C16*), 0, "S20959C1");
    /*is_ambiguous_... S20959C16::S20959C11 */ AMB_check_base_class_offset(lv, (S20959C11*)(S20959C16*), 0, "S20959C1");
    check_base_class_offset(lv, (S20959C16*)(S20959C15*)(S20959C14*)(S20959C9*), 0, "S20959C1");
    /*is_ambiguous_... S20959C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20959C15*)(S20959C14*)(S20959C9*), ABISELECT(176,104), "S20959C1");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20959C2*)(S20959C15*)(S20959C14*)(S20959C9*), ABISELECT(176,104), "S20959C1");
    /*is_ambiguous_... S20959C15::S20959C2 */ AMB_check_base_class_offset(lv, (S20959C2*)(S20959C15*)(S20959C14*)(S20959C9*), ABISELECT(176,104), "S20959C1");
    check_base_class_offset(lv, (S20959C15*)(S20959C14*)(S20959C9*), ABISELECT(176,104), "S20959C1");
    check_base_class_offset(lv, (S20959C14*)(S20959C9*), ABISELECT(176,104), "S20959C1");
    check_base_class_offset(lv, (S20959C9*), ABISELECT(176,104), "S20959C1");
    check_field_offset(lv, s20959c1f0, ABISELECT(8,4), "S20959C1.s20959c1f0");
    test_class_info(&lv, &cd_S20959C1);
    dp->~S20959C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20959C1(Test_S20959C1, "S20959C1", ABISELECT(352,196));

#else // __cplusplus

extern void _ZN8S20959C1C1Ev();
extern void _ZN8S20959C1D2Ev();
Name_Map name_map_S20959C1[] = {
  NSPAIR(_ZN8S20959C1C1Ev),
  NSPAIR(_ZN8S20959C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C6;
extern VTBL_ENTRY _ZTI8S20959C6[];
extern  VTBL_ENTRY _ZTV8S20959C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C3;
extern VTBL_ENTRY _ZTI8S20959C3[];
extern  VTBL_ENTRY _ZTV8S20959C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C10;
extern VTBL_ENTRY _ZTI9S20959C10[];
extern  VTBL_ENTRY _ZTV9S20959C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C13;
extern VTBL_ENTRY _ZTI9S20959C13[];
extern  VTBL_ENTRY _ZTV9S20959C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C12;
extern VTBL_ENTRY _ZTI9S20959C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20959C4;
extern VTBL_ENTRY _ZTI8S20959C4[];
extern Class_Descriptor cd_S20959C17;
extern VTBL_ENTRY _ZTI9S20959C17[];
extern  VTBL_ENTRY _ZTV9S20959C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C11;
extern VTBL_ENTRY _ZTI9S20959C11[];
extern  VTBL_ENTRY _ZTV9S20959C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C11[];
extern Class_Descriptor cd_S20959C16;
extern VTBL_ENTRY _ZTI9S20959C16[];
extern  VTBL_ENTRY _ZTV9S20959C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20959C2;
extern VTBL_ENTRY _ZTI8S20959C2[];
extern  VTBL_ENTRY _ZTV8S20959C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C2[];
extern Class_Descriptor cd_S20959C15;
extern VTBL_ENTRY _ZTI9S20959C15[];
extern  VTBL_ENTRY _ZTV9S20959C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C15[];
extern Class_Descriptor cd_S20959C14;
extern VTBL_ENTRY _ZTI9S20959C14[];
extern  VTBL_ENTRY _ZTV9S20959C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20959C14[];
extern Class_Descriptor cd_S20959C9;
extern VTBL_ENTRY _ZTI8S20959C9[];
extern  VTBL_ENTRY _ZTV8S20959C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C9[];
static Base_Class bases_S20959C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20959C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20959C3,    ABISELECT(88,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20959C2,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20959C11,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20959C10,    ABISELECT(192,112), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20959C13,    ABISELECT(272,152), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(296,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(304,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20959C12,    ABISELECT(296,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(328,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20959C4,    ABISELECT(328,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20959C17,    ABISELECT(288,164), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20959C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20959C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20959C2,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20959C15,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20959C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20959C9,    ABISELECT(176,104), //bcp->offset
    39, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20959C1[];
extern void ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev)();
extern void _ZN8S20959C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev)();
extern void _ZN8S20959C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20959C1D1Ev,_ZThn36_N8S20959C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S20959C1D0Ev,_ZThn36_N8S20959C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20959C1D1Ev,_ZThn44_N8S20959C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20959C1D0Ev,_ZThn44_N8S20959C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S20959C1D1Ev,_ZThn104_N8S20959C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S20959C1D0Ev,_ZThn104_N8S20959C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S20959C1D1Ev,_ZThn112_N8S20959C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S20959C1D0Ev,_ZThn112_N8S20959C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20959C1D1Ev,_ZThn152_N8S20959C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20959C1D0Ev,_ZThn152_N8S20959C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20959C1D1Ev,_ZTv0_n16_N8S20959C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S20959C1D1Ev,_ZThn164_N8S20959C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20959C1D0Ev,_ZTv0_n16_N8S20959C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S20959C1D0Ev,_ZThn164_N8S20959C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20959C1[] = {
  0,
  ABISELECT(176,104),
  ABISELECT(288,164),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  0,
  ABISELECT(136,84),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-72,-36),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev),
  ABISELECT(112,60),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  ABISELECT(-176,-104),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev),
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-192,-112),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-272,-152),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev),
  ABISELECT(-288,-164),
  ABISELECT(-120,-64),
  ABISELECT(-288,-164),
  (VTBL_ENTRY)&(_ZTI8S20959C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20959C1D1Ev,_ZTv0_n16_N8S20959C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20959C1D0Ev,_ZTv0_n16_N8S20959C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20959C1[];
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__8S20959C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C2__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void _ZN8S20959C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
extern void _ZN8S20959C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C3__8S20959C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20959C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev),
};
extern void _ZN8S20959C6D1Ev();
extern void _ZN8S20959C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C1[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C6[0]),
  (VTBL_ENTRY)&_ZN8S20959C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20959C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void _ZN8S20959C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void _ZN8S20959C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C9__8S20959C1[] = {
  ABISELECT(112,60),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void _ZN9S20959C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void _ZN9S20959C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(112,60),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void _ZN9S20959C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void _ZN9S20959C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C159S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(112,60),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void _ZN8S20959C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
extern void _ZN8S20959C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C29S20959C159S20959C148S20959C9__A1__8S20959C1[] = {
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C29S20959C159S20959C148S20959C9__A1__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__8S20959C29S20959C159S20959C148S20959C9__A1__8S20959C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S20959C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C159S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(288,164),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  ABISELECT(176,104),
  ABISELECT(136,84),
  ABISELECT(160,96),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C159S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C159S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20959C15D1Ev,_ZThn8_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20959C15D0Ev,_ZThn8_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C159S20959C148S20959C9__8S20959C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn96_N9S20959C15D1Ev,_ZThn48_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn96_N9S20959C15D0Ev,_ZThn48_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C159S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S20959C15D1Ev,_ZThn60_N9S20959C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S20959C15D0Ev,_ZThn60_N9S20959C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C159S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-120,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20959C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20959C16__9S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(288,164),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  ABISELECT(176,104),
  ABISELECT(136,84),
  ABISELECT(160,96),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20959C14D1Ev,_ZThn8_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20959C14D0Ev,_ZThn8_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C148S20959C9__8S20959C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S20959C14D1Ev,_ZThn48_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S20959C14D0Ev,_ZThn48_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S20959C14D1Ev,_ZThn60_N9S20959C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S20959C14D0Ev,_ZThn60_N9S20959C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C148S20959C9__8S20959C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-120,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20959C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__8S20959C9__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C2__8S20959C9__8S20959C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20959C9D1Ev,_ZThn8_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20959C9D0Ev,_ZThn8_N8S20959C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__8S20959C9__8S20959C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn96_N8S20959C9D1Ev,_ZThn48_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn96_N8S20959C9D0Ev,_ZThn48_N8S20959C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__8S20959C9__8S20959C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20959C16__8S20959C9__8S20959C1[] = {
  ABISELECT(288,164),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  ABISELECT(176,104),
  ABISELECT(136,84),
  ABISELECT(160,96),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20959C9D1Ev,_ZTv0_n16_N8S20959C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S20959C9D1Ev,_ZThn60_N8S20959C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20959C9D0Ev,_ZTv0_n16_N8S20959C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S20959C9D0Ev,_ZThn60_N8S20959C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__8S20959C9__8S20959C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-120,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20959C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20959C9D1Ev,_ZTv0_n16_N8S20959C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20959C9D0Ev,_ZTv0_n16_N8S20959C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void _ZN9S20959C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
extern void _ZN9S20959C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__8S20959C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C10__8S20959C1[] = {
  ABISELECT(120,76),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI9S20959C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C11__8S20959C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C11__8S20959C1[] = {
  ABISELECT(120,76),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void _ZN9S20959C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
extern void _ZN9S20959C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__8S20959C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C13__8S20959C1[] = {
  ABISELECT(200,116),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(200,116),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C13__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20959C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void _ZN9S20959C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void _ZN9S20959C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C16__8S20959C1[] = {
  ABISELECT(288,164),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  0,
  ABISELECT(136,84),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void _ZN9S20959C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void _ZN9S20959C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C119S20959C16__A1__8S20959C1[] = {
  ABISELECT(72,36),
  ABISELECT(240,136),
  0,
  ABISELECT(136,84),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S20959C11D1Ev,_ZThn36_N9S20959C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev)();
extern void ABISELECT(_ZThn72_N9S20959C11D0Ev,_ZThn36_N9S20959C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C6__9S20959C119S20959C16__A1__8S20959C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20959C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn72_N9S20959C16D1Ev,_ZThn36_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn72_N9S20959C16D0Ev,_ZThn36_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C2__9S20959C16__8S20959C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-72,-36),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn88_N9S20959C16D1Ev,_ZThn44_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn88_N9S20959C16D0Ev,_ZThn44_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20959C3__9S20959C16__8S20959C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20959C16D1Ev,_ZThn112_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20959C16D0Ev,_ZThn112_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C10__9S20959C16__8S20959C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-192,-112),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn272_N9S20959C16D1Ev,_ZThn152_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn272_N9S20959C16D0Ev,_ZThn152_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C13__9S20959C16__8S20959C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-272,-152),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev)();
extern void ABISELECT(_ZThn288_N9S20959C16D1Ev,_ZThn164_N9S20959C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev)();
extern void ABISELECT(_ZThn288_N9S20959C16D0Ev,_ZThn164_N9S20959C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20959C17__9S20959C16__8S20959C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-120,-64),
  ABISELECT(-288,-164),
  (VTBL_ENTRY)&(_ZTI9S20959C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev),
};
extern void _ZN9S20959C17D1Ev();
extern void _ZN9S20959C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20959C17__8S20959C1[] = {
  ABISELECT(-120,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20959C17[0]),
  (VTBL_ENTRY)&_ZN9S20959C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20959C17D0Ev,
};
static  VTT_ENTRY vtt_S20959C1[] = {
  {&(_ZTV8S20959C1[17]),  17,84},
  {&(_ZTV8S20959C1[28]),  28,84},
  {&(_ZTV8S20959C1[37]),  37,84},
  {&(_ZTV8S20959C1[28]),  28,84},
  {&(_ZTV8S20959C1[55]),  55,84},
  {&(_ZTV8S20959C1[65]),  65,84},
  {&(_ZTV8S20959C1[65]),  65,84},
  {&(_ZTV8S20959C1[76]),  76,84},
  {&(_ZTV8S20959C1[17]),  17,84},
  {&(_ZTV8S20959C1[82]),  82,84},
  {&(_tg__ZTV8S20959C2__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C2__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C2__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C3__8S20959C1[5]),  5,7},
  {&(_tg__ZTV8S20959C6__8S20959C1[4]),  4,6},
  {&(_tg__ZTV8S20959C9__8S20959C1[16]),  16,18},
  {&(_tg__ZTV9S20959C148S20959C9__8S20959C1[16]),  16,18},
  {&(_tg__ZTV9S20959C159S20959C148S20959C9__8S20959C1[16]),  16,18},
  {&(_tg__ZTV8S20959C29S20959C159S20959C148S20959C9__A1__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C3__8S20959C29S20959C159S20959C148S20959C9__A1__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C6__8S20959C29S20959C159S20959C148S20959C9__A1__8S20959C1[5]),  5,7},
  {&(_tg__ZTV9S20959C16__9S20959C159S20959C148S20959C9__8S20959C1[15]),  15,17},
  {&(_tg__ZTV8S20959C2__9S20959C159S20959C148S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C159S20959C148S20959C9__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C159S20959C148S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C10__9S20959C159S20959C148S20959C9__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C159S20959C148S20959C9__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C159S20959C148S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C159S20959C148S20959C9__8S20959C1[4]),  4,6},
  {&(_tg__ZTV9S20959C16__9S20959C148S20959C9__8S20959C1[15]),  15,17},
  {&(_tg__ZTV8S20959C2__9S20959C148S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C148S20959C9__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C148S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C10__9S20959C148S20959C9__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C148S20959C9__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C148S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C148S20959C9__8S20959C1[4]),  4,6},
  {&(_tg__ZTV8S20959C3__8S20959C9__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C2__8S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C10__8S20959C9__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C10__8S20959C9__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C13__8S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C16__8S20959C9__8S20959C1[15]),  15,17},
  {&(_tg__ZTV8S20959C2__8S20959C9__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C17__8S20959C9__8S20959C1[4]),  4,6},
  {&(_tg__ZTV9S20959C10__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C10__8S20959C1[8]),  8,10},
  {&(_tg__ZTV8S20959C6__9S20959C10__8S20959C1[5]),  5,7},
  {&(_tg__ZTV9S20959C11__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C11__8S20959C1[5]),  5,7},
  {&(_tg__ZTV9S20959C13__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C6__9S20959C13__8S20959C1[5]),  5,7},
  {&(_tg__ZTV8S20959C3__9S20959C13__8S20959C1[7]),  7,9},
  {&(_tg__ZTV9S20959C16__8S20959C1[15]),  15,17},
  {&(_tg__ZTV9S20959C119S20959C16__A1__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C6__9S20959C119S20959C16__A1__8S20959C1[5]),  5,7},
  {&(_tg__ZTV8S20959C2__9S20959C16__8S20959C1[9]),  9,11},
  {&(_tg__ZTV8S20959C3__9S20959C16__8S20959C1[7]),  7,9},
  {&(_tg__ZTV8S20959C2__9S20959C16__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C10__9S20959C16__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C10__9S20959C16__8S20959C1[8]),  8,10},
  {&(_tg__ZTV9S20959C13__9S20959C16__8S20959C1[9]),  9,11},
  {&(_tg__ZTV9S20959C17__9S20959C16__8S20959C1[4]),  4,6},
  {&(_tg__ZTV9S20959C17__8S20959C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20959C1[];
extern  VTBL_ENTRY _ZTV8S20959C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20959C1[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D0Ev,_ZTv0_n16_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20959C16D0Ev,_ZThn164_N9S20959C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C16D1Ev,_ZTv0_n16_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20959C16D1Ev,_ZThn164_N9S20959C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D0Ev,_ZTv0_n20_N9S20959C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S20959C16D0Ev,_ZThn152_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20959C16D0Ev,_ZThn112_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20959C16D0Ev,_ZThn44_N9S20959C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20959C16D0Ev,_ZThn36_N9S20959C16D0Ev),
  (VTBL_ENTRY)_ZN9S20959C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C16D1Ev,_ZTv0_n20_N9S20959C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S20959C16D1Ev,_ZThn152_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20959C16D1Ev,_ZThn112_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20959C16D1Ev,_ZThn44_N9S20959C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20959C16D1Ev,_ZThn36_N9S20959C16D1Ev),
  (VTBL_ENTRY)_ZN9S20959C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D0Ev,_ZTv0_n20_N9S20959C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C13D1Ev,_ZTv0_n20_N9S20959C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D0Ev,_ZTv0_n20_N9S20959C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20959C11D0Ev,_ZThn36_N9S20959C11D0Ev),
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  (VTBL_ENTRY)_ZN9S20959C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C11D1Ev,_ZTv0_n20_N9S20959C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20959C11D1Ev,_ZThn36_N9S20959C11D1Ev),
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  (VTBL_ENTRY)_ZN9S20959C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D0Ev,_ZTv0_n20_N9S20959C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C10D1Ev,_ZTv0_n20_N9S20959C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20959C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20959C9D0Ev,_ZTv0_n16_N8S20959C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20959C9D0Ev,_ZThn60_N8S20959C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20959C9D1Ev,_ZTv0_n16_N8S20959C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20959C9D1Ev,_ZThn60_N8S20959C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C14D0Ev,_ZTv0_n16_N9S20959C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C14D0Ev,_ZThn60_N9S20959C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C14D1Ev,_ZTv0_n16_N9S20959C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C14D1Ev,_ZThn60_N9S20959C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D0Ev,_ZTv0_n16_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C15D0Ev,_ZThn60_N9S20959C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20959C15D1Ev,_ZTv0_n16_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20959C15D1Ev,_ZThn60_N9S20959C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D0Ev,_ZTv0_n20_N9S20959C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20959C15D0Ev,_ZThn48_N9S20959C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C15D0Ev,_ZThn8_N9S20959C15D0Ev),
  (VTBL_ENTRY)_ZN9S20959C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C15D1Ev,_ZTv0_n20_N9S20959C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20959C15D1Ev,_ZThn48_N9S20959C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C15D1Ev,_ZThn8_N9S20959C15D1Ev),
  (VTBL_ENTRY)_ZN9S20959C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C14D0Ev,_ZTv0_n20_N9S20959C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20959C14D0Ev,_ZThn48_N9S20959C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C14D0Ev,_ZThn8_N9S20959C14D0Ev),
  (VTBL_ENTRY)_ZN9S20959C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20959C14D1Ev,_ZTv0_n20_N9S20959C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20959C14D1Ev,_ZThn48_N9S20959C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20959C14D1Ev,_ZThn8_N9S20959C14D1Ev),
  (VTBL_ENTRY)_ZN9S20959C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C9D0Ev,_ZTv0_n20_N8S20959C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20959C9D0Ev,_ZThn48_N8S20959C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C9D0Ev,_ZThn8_N8S20959C9D0Ev),
  (VTBL_ENTRY)_ZN8S20959C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C9D1Ev,_ZTv0_n20_N8S20959C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20959C9D1Ev,_ZThn48_N8S20959C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C9D1Ev,_ZThn8_N8S20959C9D1Ev),
  (VTBL_ENTRY)_ZN8S20959C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D0Ev,_ZTv0_n20_N8S20959C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C3D1Ev,_ZTv0_n20_N8S20959C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D0Ev,_ZTv0_n20_N8S20959C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D0Ev,_ZThn8_N8S20959C2D0Ev),
  (VTBL_ENTRY)_ZN8S20959C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C2D1Ev,_ZTv0_n20_N8S20959C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20959C2D1Ev,_ZThn8_N8S20959C2D1Ev),
  (VTBL_ENTRY)_ZN8S20959C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20959C1D0Ev,_ZTv0_n16_N8S20959C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S20959C1D0Ev,_ZThn164_N8S20959C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20959C1D1Ev,_ZTv0_n16_N8S20959C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S20959C1D1Ev,_ZThn164_N8S20959C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C1D0Ev,_ZTv0_n20_N8S20959C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20959C1D0Ev,_ZThn152_N8S20959C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20959C1D0Ev,_ZThn112_N8S20959C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20959C1D0Ev,_ZThn104_N8S20959C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20959C1D0Ev,_ZThn44_N8S20959C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20959C1D0Ev,_ZThn36_N8S20959C1D0Ev),
  (VTBL_ENTRY)_ZN8S20959C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20959C1D1Ev,_ZTv0_n20_N8S20959C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20959C1D1Ev,_ZThn152_N8S20959C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20959C1D1Ev,_ZThn112_N8S20959C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20959C1D1Ev,_ZThn104_N8S20959C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20959C1D1Ev,_ZThn44_N8S20959C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20959C1D1Ev,_ZThn36_N8S20959C1D1Ev),
  (VTBL_ENTRY)_ZN8S20959C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20959C1 = {  "S20959C1", // class name
  bases_S20959C1, 34,
  &(vtc_S20959C1[0]), // expected_vtbl_contents
  &(vtt_S20959C1[0]), // expected_vtt_contents
  ABISELECT(352,196), // object size
  NSPAIRA(_ZTI8S20959C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20959C1),84, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20959C1),65, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C4  : S5217C60_nt {
  void *s20958c4f0[2];
};
//SIG(-1 S20958C4) C1{ BC2{ m Fp} Fp[2]}



static void Test_S20958C4()
{
  extern Class_Descriptor cd_S20958C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20958C4, buf);
    S20958C4 &lv = *(new (buf) S20958C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20958C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C4)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S20958C4");
    check_field_offset(lv, s20958c4f0, ABISELECT(8,4), "S20958C4.s20958c4f0");
    test_class_info(&lv, &cd_S20958C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C4(Test_S20958C4, "S20958C4", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S20958C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20958C4[];
Class_Descriptor cd_S20958C4 = {  "S20958C4", // class name
  bases_S20958C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20958C4),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C6  : virtual S5217C60_nt , virtual S20958C4 {
  virtual  ~S20958C6(); // _ZN8S20958C6D2Ev
  S20958C6(); // tgen
};
//SIG(-1 S20958C6) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S20958C6 ::~S20958C6(){ note_dtor("S20958C6", this);}
S20958C6 ::S20958C6(){ note_ctor("S20958C6", this);} // tgen

static void Test_S20958C6()
{
  extern Class_Descriptor cd_S20958C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20958C6, buf);
    S20958C6 *dp, &lv = *(dp=new (buf) S20958C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20958C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C6)");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20958C6");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(16,8), "S20958C6");
    check_base_class_offset(lv, (S20958C4*), ABISELECT(16,8), "S20958C6");
    test_class_info(&lv, &cd_S20958C6);
    dp->~S20958C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C6(Test_S20958C6, "S20958C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20958C6C1Ev();
extern void _ZN8S20958C6D2Ev();
Name_Map name_map_S20958C6[] = {
  NSPAIR(_ZN8S20958C6C1Ev),
  NSPAIR(_ZN8S20958C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
static Base_Class bases_S20958C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20958C6[];
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY vtc_S20958C6[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern VTBL_ENTRY _ZTV8S20958C6[];
static  VTT_ENTRY vtt_S20958C6[] = {
  {&(_ZTV8S20958C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
Class_Descriptor cd_S20958C6 = {  "S20958C6", // class name
  bases_S20958C6, 3,
  &(vtc_S20958C6[0]), // expected_vtbl_contents
  &(vtt_S20958C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20958C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20958C6),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20958C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C3  : virtual S20958C4 , virtual S5217C60_nt , virtual S20958C6 , virtual S2265C38 {
  int s20958c3f0[9];
  virtual  ~S20958C3(); // _ZN8S20958C3D2Ev
  S20958C3(); // tgen
};
//SIG(-1 S20958C3) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S20958C3 ::~S20958C3(){ note_dtor("S20958C3", this);}
S20958C3 ::S20958C3(){ note_ctor("S20958C3", this);} // tgen

static void Test_S20958C3()
{
  extern Class_Descriptor cd_S20958C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S20958C3, buf);
    S20958C3 *dp, &lv = *(dp=new (buf) S20958C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S20958C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C3)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(48,40), "S20958C3");
    check_base_class_offset(lv, (S20958C4*), ABISELECT(48,40), "S20958C3");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(48,40), "S20958C3");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S20958C3");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(72,52), "S20958C3");
    check_base_class_offset(lv, (S20958C6*), 0, "S20958C3");
    check_base_class_offset(lv, (S2265C38*), 0, "S20958C3");
    check_field_offset(lv, s20958c3f0, ABISELECT(8,4), "S20958C3.s20958c3f0");
    test_class_info(&lv, &cd_S20958C3);
    dp->~S20958C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C3(Test_S20958C3, "S20958C3", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S20958C3C1Ev();
extern void _ZN8S20958C3D2Ev();
Name_Map name_map_S20958C3[] = {
  NSPAIR(_ZN8S20958C3C1Ev),
  NSPAIR(_ZN8S20958C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20958C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20958C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20958C3[];
extern void _ZN8S20958C3D1Ev();
extern void _ZN8S20958C3D0Ev();
static  VTBL_ENTRY vtc_S20958C3[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&_ZN8S20958C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S20958C3[];
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
static  VTT_ENTRY vtt_S20958C3[] = {
  {&(_ZTV8S20958C3[7]),  7,9},
  {&(_ZTV8S20958C3[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
Class_Descriptor cd_S20958C3 = {  "S20958C3", // class name
  bases_S20958C3, 5,
  &(vtc_S20958C3[0]), // expected_vtbl_contents
  &(vtt_S20958C3[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S20958C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20958C3),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20958C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C2  : virtual S20958C3 , S2265C38 , virtual S2265C28 {
  void *s20958c2f0;
  ~S20958C2(); // tgen
  S20958C2(); // tgen
};
//SIG(-1 S20958C2) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S20958C2 ::~S20958C2(){ note_dtor("S20958C2", this);} // tgen
S20958C2 ::S20958C2(){ note_ctor("S20958C2", this);} // tgen

static void Test_S20958C2()
{
  extern Class_Descriptor cd_S20958C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S20958C2, buf);
    S20958C2 *dp, &lv = *(dp=new (buf) S20958C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S20958C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C2)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(64,48), "S20958C2");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(64,48), "S20958C2");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(64,48), "S20958C2");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(88,60), "S20958C2");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(88,60), "S20958C2");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), 0, "S20958C2");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(96,64), "S20958C2");
    check_base_class_offset(lv, (S20958C3*), ABISELECT(16,8), "S20958C2");
    /*is_ambiguous_... S20958C2::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20958C2");
    check_base_class_offset(lv, (S2265C28*), 0, "S20958C2");
    check_field_offset(lv, s20958c2f0, ABISELECT(8,4), "S20958C2.s20958c2f0");
    test_class_info(&lv, &cd_S20958C2);
    dp->~S20958C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C2(Test_S20958C2, "S20958C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN8S20958C2C1Ev();
extern void _ZN8S20958C2D1Ev();
Name_Map name_map_S20958C2[] = {
  NSPAIR(_ZN8S20958C2C1Ev),
  NSPAIR(_ZN8S20958C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20958C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20958C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20958C2[];
extern void _ZN8S20958C2D1Ev();
extern void _ZN8S20958C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C2[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&_ZN8S20958C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C2D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20958C2[];
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3__8S20958C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
static  VTT_ENTRY vtt_S20958C2[] = {
  {&(_ZTV8S20958C2[9]),  9,20},
  {&(_ZTV8S20958C2[18]),  18,20},
  {&(_ZTV8S20958C2[9]),  9,20},
  {&(_tg__ZTV8S20958C3__8S20958C2[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3__8S20958C2[5]),  5,7},
  {&(_tg__ZTV8S20958C6__8S20958C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C2 = {  "S20958C2", // class name
  bases_S20958C2, 8,
  &(vtc_S20958C2[0]), // expected_vtbl_contents
  &(vtt_S20958C2[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI8S20958C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20958C2),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20958C2),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C12  : S5217C60_nt , S20958C4 {
};
//SIG(-1 S20958C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S20958C12()
{
  extern Class_Descriptor cd_S20958C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20958C12, buf);
    S20958C12 &lv = *(new (buf) S20958C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20958C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C12)");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S20958C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(8,4), "S20958C12");
    check_base_class_offset(lv, (S20958C4*), ABISELECT(8,4), "S20958C12");
    test_class_info(&lv, &cd_S20958C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C12(Test_S20958C12, "S20958C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
static Base_Class bases_S20958C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C12[];
Class_Descriptor cd_S20958C12 = {  "S20958C12", // class name
  bases_S20958C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20958C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C11  : virtual S5217C60_nt , S2265C38 , virtual S20958C12 , virtual S20958C6 {
  ~S20958C11(); // tgen
  S20958C11(); // tgen
};
//SIG(-1 S20958C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S20958C11 ::~S20958C11(){ note_dtor("S20958C11", this);} // tgen
S20958C11 ::S20958C11(){ note_ctor("S20958C11", this);} // tgen

static void Test_S20958C11()
{
  extern Class_Descriptor cd_S20958C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20958C11, buf);
    S20958C11 *dp, &lv = *(dp=new (buf) S20958C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20958C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C11)");
    /*is_ambiguous_... S20958C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20958C11");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(8,4), "S20958C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S20958C11");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(16,8), "S20958C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(24,12), "S20958C11");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(24,12), "S20958C11");
    check_base_class_offset(lv, (S20958C12*), ABISELECT(16,8), "S20958C11");
    /*is_ambiguous_... S20958C11::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(48,24), "S20958C11");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(48,24), "S20958C11");
    check_base_class_offset(lv, (S20958C6*), 0, "S20958C11");
    test_class_info(&lv, &cd_S20958C11);
    dp->~S20958C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C11(Test_S20958C11, "S20958C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20958C11C1Ev();
extern void _ZN9S20958C11D1Ev();
Name_Map name_map_S20958C11[] = {
  NSPAIR(_ZN9S20958C11C1Ev),
  NSPAIR(_ZN9S20958C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
static Base_Class bases_S20958C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20958C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C11[];
extern void _ZN9S20958C11D1Ev();
extern void _ZN9S20958C11D0Ev();
static  VTBL_ENTRY vtc_S20958C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&_ZN9S20958C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S20958C11[];
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
static  VTT_ENTRY vtt_S20958C11[] = {
  {&(_ZTV9S20958C11[7]),  7,9},
  {&(_ZTV9S20958C11[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
Class_Descriptor cd_S20958C11 = {  "S20958C11", // class name
  bases_S20958C11, 9,
  &(vtc_S20958C11[0]), // expected_vtbl_contents
  &(vtt_S20958C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20958C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20958C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C10  : virtual S20958C11 {
  ::S20958C6 s20958c10f0;
  ~S20958C10(); // tgen
  S20958C10(); // tgen
};
//SIG(-1 S20958C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S20958C10 ::~S20958C10(){ note_dtor("S20958C10", this);} // tgen
S20958C10 ::S20958C10(){ note_ctor("S20958C10", this);} // tgen

static void Test_S20958C10()
{
  extern Class_Descriptor cd_S20958C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20958C10, buf);
    S20958C10 *dp, &lv = *(dp=new (buf) S20958C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20958C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C10)");
    /*is_ambiguous_... S20958C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(48,24), "S20958C10");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(48,24), "S20958C10");
    check_base_class_offset(lv, (S2265C38*)(S20958C11*), 0, "S20958C10");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(56,28), "S20958C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(64,32), "S20958C10");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(64,32), "S20958C10");
    check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(56,28), "S20958C10");
    /*is_ambiguous_... S20958C10::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(88,44), "S20958C10");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(88,44), "S20958C10");
    check_base_class_offset(lv, (S20958C6*)(S20958C11*), 0, "S20958C10");
    check_base_class_offset(lv, (S20958C11*), 0, "S20958C10");
    check_field_offset(lv, s20958c10f0, ABISELECT(8,4), "S20958C10.s20958c10f0");
    test_class_info(&lv, &cd_S20958C10);
    dp->~S20958C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C10(Test_S20958C10, "S20958C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S20958C10C1Ev();
extern void _ZN9S20958C10D1Ev();
Name_Map name_map_S20958C10[] = {
  NSPAIR(_ZN9S20958C10C1Ev),
  NSPAIR(_ZN9S20958C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
static Base_Class bases_S20958C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20958C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20958C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C10[];
extern void _ZN9S20958C10D1Ev();
extern void _ZN9S20958C10D0Ev();
static  VTBL_ENTRY vtc_S20958C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&_ZN9S20958C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S20958C10[];
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__9S20958C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
static  VTT_ENTRY vtt_S20958C10[] = {
  {&(_ZTV9S20958C10[8]),  8,10},
  {&(_ZTV9S20958C10[8]),  8,10},
  {&(_ZTV9S20958C10[8]),  8,10},
  {&(_tg__ZTV9S20958C11__9S20958C10[7]),  7,9},
  {&(_tg__ZTV9S20958C11__9S20958C10[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20958C10[];
extern  VTBL_ENTRY _ZTV9S20958C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C10[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C10 = {  "S20958C10", // class name
  bases_S20958C10, 10,
  &(vtc_S20958C10[0]), // expected_vtbl_contents
  &(vtt_S20958C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S20958C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20958C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C13  : S2265C38 , virtual S20958C4 , virtual S20958C6 , virtual S20958C12 , virtual S20958C3 {
  long s20958c13f0;
  virtual  ~S20958C13(); // _ZN9S20958C13D2Ev
  S20958C13(); // tgen
};
//SIG(-1 S20958C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S20958C13 ::~S20958C13(){ note_dtor("S20958C13", this);}
S20958C13 ::S20958C13(){ note_ctor("S20958C13", this);} // tgen

static void Test_S20958C13()
{
  extern Class_Descriptor cd_S20958C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S20958C13, buf);
    S20958C13 *dp, &lv = *(dp=new (buf) S20958C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S20958C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C13)");
    /*is_ambiguous_... S20958C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20958C13");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(16,8), "S20958C13");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*), ABISELECT(16,8), "S20958C13");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(16,8), "S20958C13");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(16,8), "S20958C13");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(40,20), "S20958C13");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(40,20), "S20958C13");
    check_base_class_offset(lv, (S20958C6*), 0, "S20958C13");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), 0, "S20958C13");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(48,24), "S20958C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(56,28), "S20958C13");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(56,28), "S20958C13");
    check_base_class_offset(lv, (S20958C12*), ABISELECT(48,24), "S20958C13");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(124,80), "S20958C13");
    check_base_class_offset(lv, (S20958C3*), ABISELECT(80,40), "S20958C13");
    check_field_offset(lv, s20958c13f0, ABISELECT(8,4), "S20958C13.s20958c13f0");
    test_class_info(&lv, &cd_S20958C13);
    dp->~S20958C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C13(Test_S20958C13, "S20958C13", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN9S20958C13C1Ev();
extern void _ZN9S20958C13D2Ev();
Name_Map name_map_S20958C13[] = {
  NSPAIR(_ZN9S20958C13C1Ev),
  NSPAIR(_ZN9S20958C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
static Base_Class bases_S20958C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20958C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C13[];
extern void _ZN9S20958C13D1Ev();
extern void _ZN9S20958C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S20958C13D1Ev,_ZThn40_N9S20958C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S20958C13D0Ev,_ZThn40_N9S20958C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C13[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&_ZN9S20958C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20958C13[];
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C13[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3__9S20958C13[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
static  VTT_ENTRY vtt_S20958C13[] = {
  {&(_ZTV9S20958C13[9]),  9,20},
  {&(_ZTV9S20958C13[9]),  9,20},
  {&(_ZTV9S20958C13[18]),  18,20},
  {&(_tg__ZTV8S20958C6__9S20958C13[4]),  4,6},
  {&(_tg__ZTV8S20958C3__9S20958C13[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3__9S20958C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20958C13[];
extern  VTBL_ENTRY _ZTV9S20958C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C13[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20958C13D0Ev,_ZThn40_N9S20958C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20958C13D1Ev,_ZThn40_N9S20958C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C13 = {  "S20958C13", // class name
  bases_S20958C13, 11,
  &(vtc_S20958C13[0]), // expected_vtbl_contents
  &(vtt_S20958C13[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S20958C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20958C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C17  : S20958C12 , S20958C4 , virtual S2265C38 {
  virtual  ~S20958C17(); // _ZN9S20958C17D2Ev
  S20958C17(); // tgen
};
//SIG(-1 S20958C17) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S20958C17 ::~S20958C17(){ note_dtor("S20958C17", this);}
S20958C17 ::S20958C17(){ note_ctor("S20958C17", this);} // tgen

static void Test_S20958C17()
{
  extern Class_Descriptor cd_S20958C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20958C17, buf);
    S20958C17 *dp, &lv = *(dp=new (buf) S20958C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20958C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C17)");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(8,4), "S20958C17");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(16,8), "S20958C17");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(16,8), "S20958C17");
    check_base_class_offset(lv, (S20958C12*), ABISELECT(8,4), "S20958C17");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(40,20), "S20958C17");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*), ABISELECT(40,20), "S20958C17");
    check_base_class_offset(lv, (S2265C38*), 0, "S20958C17");
    test_class_info(&lv, &cd_S20958C17);
    dp->~S20958C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C17(Test_S20958C17, "S20958C17", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20958C17C1Ev();
extern void _ZN9S20958C17D2Ev();
Name_Map name_map_S20958C17[] = {
  NSPAIR(_ZN9S20958C17C1Ev),
  NSPAIR(_ZN9S20958C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20958C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C17[];
extern void _ZN9S20958C17D1Ev();
extern void _ZN9S20958C17D0Ev();
static  VTBL_ENTRY vtc_S20958C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C17[0]),
  (VTBL_ENTRY)&_ZN9S20958C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C17D0Ev,
};
extern VTBL_ENTRY _ZTV9S20958C17[];
static  VTT_ENTRY vtt_S20958C17[] = {
  {&(_ZTV9S20958C17[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20958C17[];
extern  VTBL_ENTRY _ZTV9S20958C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C17[];
Class_Descriptor cd_S20958C17 = {  "S20958C17", // class name
  bases_S20958C17, 7,
  &(vtc_S20958C17[0]), // expected_vtbl_contents
  &(vtt_S20958C17[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20958C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20958C17),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C17),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C16  : virtual S20958C2 , virtual S20958C10 , virtual S20958C13 , virtual S20958C17 , S20958C11 {
  virtual  ~S20958C16(); // _ZN9S20958C16D2Ev
  S20958C16(); // tgen
};
//SIG(-1 S20958C16) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd Fl} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S20958C16 ::~S20958C16(){ note_dtor("S20958C16", this);}
S20958C16 ::S20958C16(){ note_ctor("S20958C16", this);} // tgen

static void Test_S20958C16()
{
  extern Class_Descriptor cd_S20958C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S20958C16, buf);
    S20958C16 *dp, &lv = *(dp=new (buf) S20958C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S20958C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C16)");
    /*is_ambiguous_... S20958C16::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(72,52), "S20958C16");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(72,52), "S20958C16");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(72,52), "S20958C16");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C13*), ABISELECT(72,52), "S20958C16");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(96,64), "S20958C16");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(96,64), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(96,64), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(96,64), "S20958C16");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), ABISELECT(8,4), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*), ABISELECT(8,4), "S20958C16");
    check_base_class_offset(lv, (S20958C6*)(S20958C13*), ABISELECT(8,4), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*), ABISELECT(8,4), "S20958C16");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(104,68), "S20958C16");
    check_base_class_offset(lv, (S2265C38*)(S20958C17*), ABISELECT(104,68), "S20958C16");
    check_base_class_offset(lv, (S20958C3*)(S20958C2*), ABISELECT(24,12), "S20958C16");
    check_base_class_offset(lv, (S20958C3*)(S20958C13*), ABISELECT(24,12), "S20958C16");
    /*is_ambiguous_... S20958C2::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*), ABISELECT(8,4), "S20958C16");
    check_base_class_offset(lv, (S2265C28*)(S20958C2*), 0, "S20958C16");
    check_base_class_offset(lv, (S20958C2*), ABISELECT(8,4), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*), ABISELECT(112,72), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(160,96), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(168,100), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C12 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(168,100), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(160,96), "S20958C16");
    check_base_class_offset(lv, (S20958C12*)(S20958C13*), ABISELECT(160,96), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(160,96), "S20958C16");
    check_base_class_offset(lv, (S20958C11*)(S20958C10*), ABISELECT(112,72), "S20958C16");
    check_base_class_offset(lv, (S20958C10*), ABISELECT(112,72), "S20958C16");
    /*is_ambiguous_... S20958C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C13*), ABISELECT(192,112), "S20958C16");
    check_base_class_offset(lv, (S20958C13*), ABISELECT(192,112), "S20958C16");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*)(S20958C17*), ABISELECT(216,124), "S20958C16");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(224,128), "S20958C16");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(224,128), "S20958C16");
    check_base_class_offset(lv, (S20958C12*)(S20958C17*), ABISELECT(216,124), "S20958C16");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C17*), ABISELECT(248,140), "S20958C16");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C17*), ABISELECT(248,140), "S20958C16");
    check_base_class_offset(lv, (S20958C17*), ABISELECT(208,120), "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*), 0, "S20958C16");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C11*), 0, "S20958C16");
    test_class_info(&lv, &cd_S20958C16);
    dp->~S20958C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C16(Test_S20958C16, "S20958C16", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN9S20958C16C1Ev();
extern void _ZN9S20958C16D2Ev();
Name_Map name_map_S20958C16[] = {
  NSPAIR(_ZN9S20958C16C1Ev),
  NSPAIR(_ZN9S20958C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C10;
extern VTBL_ENTRY _ZTI9S20958C10[];
extern  VTBL_ENTRY _ZTV9S20958C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C13;
extern VTBL_ENTRY _ZTI9S20958C13[];
extern  VTBL_ENTRY _ZTV9S20958C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C17;
extern VTBL_ENTRY _ZTI9S20958C17[];
extern  VTBL_ENTRY _ZTV9S20958C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
static Base_Class bases_S20958C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20958C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20958C2,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20958C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20958C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20958C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20958C17,    ABISELECT(208,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20958C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C16[];
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void _ZN9S20958C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void _ZN9S20958C16D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20958C16D1Ev,_ZThn72_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20958C16D0Ev,_ZThn72_N9S20958C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20958C16D1Ev,_ZThn112_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20958C16D0Ev,_ZThn112_N9S20958C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C16D1Ev,_ZThn120_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C16D0Ev,_ZThn120_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C16[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20958C16[];
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__A__9S20958C16[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C11D1Ev,_ZThn4_N9S20958C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C11D0Ev,_ZThn4_N9S20958C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11__A__9S20958C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2__9S20958C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3__9S20958C16[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C16[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void _ZN9S20958C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
extern void _ZN9S20958C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C16[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C10__9S20958C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__9S20958C16[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11__9S20958C16[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void _ZN9S20958C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
extern void _ZN9S20958C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C16[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C13__9S20958C16[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C13__9S20958C16[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void _ZN9S20958C17D1Ev();
extern void _ZN9S20958C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C16[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C17[0]),
  (VTBL_ENTRY)&_ZN9S20958C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C17D0Ev,
};
static  VTT_ENTRY vtt_S20958C16[] = {
  {&(_ZTV9S20958C16[15]),  15,64},
  {&(_tg__ZTV9S20958C11__A__9S20958C16[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11__A__9S20958C16[5]),  5,7},
  {&(_ZTV9S20958C16[26]),  26,64},
  {&(_ZTV9S20958C16[35]),  35,64},
  {&(_ZTV9S20958C16[26]),  26,64},
  {&(_ZTV9S20958C16[45]),  45,64},
  {&(_ZTV9S20958C16[45]),  45,64},
  {&(_ZTV9S20958C16[56]),  56,64},
  {&(_ZTV9S20958C16[62]),  62,64},
  {&(_tg__ZTV8S20958C2__9S20958C16[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C2__9S20958C16[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C16[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C16[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3__9S20958C16[5]),  5,7},
  {&(_tg__ZTV8S20958C6__9S20958C16[4]),  4,6},
  {&(_tg__ZTV9S20958C10__9S20958C16[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C16[8]),  8,10},
  {&(_tg__ZTV8S20958C6__9S20958C10__9S20958C16[5]),  5,7},
  {&(_tg__ZTV9S20958C11__9S20958C16[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11__9S20958C16[5]),  5,7},
  {&(_tg__ZTV9S20958C13__9S20958C16[9]),  9,11},
  {&(_tg__ZTV8S20958C6__9S20958C13__9S20958C16[5]),  5,7},
  {&(_tg__ZTV8S20958C3__9S20958C13__9S20958C16[7]),  7,9},
  {&(_tg__ZTV9S20958C17__9S20958C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20958C16[];
extern  VTBL_ENTRY _ZTV9S20958C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C16[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C11D0Ev,_ZThn4_N9S20958C11D0Ev),
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C11D1Ev,_ZThn4_N9S20958C11D1Ev),
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C16D0Ev,_ZThn120_N9S20958C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C16D1Ev,_ZThn120_N9S20958C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20958C16D0Ev,_ZThn112_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C16D0Ev,_ZThn72_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev),
  (VTBL_ENTRY)_ZN9S20958C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20958C16D1Ev,_ZThn112_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C16D1Ev,_ZThn72_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev),
  (VTBL_ENTRY)_ZN9S20958C16D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C16 = {  "S20958C16", // class name
  bases_S20958C16, 27,
  &(vtc_S20958C16[0]), // expected_vtbl_contents
  &(vtt_S20958C16[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI9S20958C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20958C16),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C16),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C15  : virtual S20958C16 , S2265C28 , S20958C2 {
  ~S20958C15(); // tgen
  S20958C15(); // tgen
};
//SIG(-1 S20958C15) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd Fl} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} BC9 BC3}


S20958C15 ::~S20958C15(){ note_dtor("S20958C15", this);} // tgen
S20958C15 ::S20958C15(){ note_ctor("S20958C15", this);} // tgen

static void Test_S20958C15()
{
  extern Class_Descriptor cd_S20958C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20958C15, buf);
    S20958C15 *dp, &lv = *(dp=new (buf) S20958C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20958C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C15)");
    /*is_ambiguous_... S20958C15::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(88,60), "S20958C15");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(88,60), "S20958C15");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(88,60), "S20958C15");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C13*), ABISELECT(88,60), "S20958C15");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(112,72), "S20958C15");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(112,72), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(112,72), "S20958C15");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*)(S20958C16*), ABISELECT(112,72), "S20958C15");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), ABISELECT(24,12), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*), ABISELECT(24,12), "S20958C15");
    check_base_class_offset(lv, (S20958C6*)(S20958C13*), ABISELECT(24,12), "S20958C15");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*)(S20958C16*), ABISELECT(24,12), "S20958C15");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(120,76), "S20958C15");
    check_base_class_offset(lv, (S2265C38*)(S20958C17*), ABISELECT(120,76), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*), ABISELECT(40,20), "S20958C15");
    check_base_class_offset(lv, (S20958C3*)(S20958C13*), ABISELECT(40,20), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*), ABISELECT(40,20), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*), ABISELECT(24,12), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*), ABISELECT(120,76), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*), ABISELECT(120,76), "S20958C15");
    check_base_class_offset(lv, (S20958C2*)(S20958C16*), ABISELECT(24,12), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*), ABISELECT(128,80), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(176,104), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(184,108), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C12 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(184,108), "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(176,104), "S20958C15");
    check_base_class_offset(lv, (S20958C12*)(S20958C13*), ABISELECT(176,104), "S20958C15");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*)(S20958C16*), ABISELECT(176,104), "S20958C15");
    check_base_class_offset(lv, (S20958C11*)(S20958C10*), ABISELECT(128,80), "S20958C15");
    check_base_class_offset(lv, (S20958C10*)(S20958C16*), ABISELECT(128,80), "S20958C15");
    /*is_ambiguous_... S20958C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C13*), ABISELECT(208,120), "S20958C15");
    check_base_class_offset(lv, (S20958C13*)(S20958C16*), ABISELECT(208,120), "S20958C15");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*)(S20958C17*), ABISELECT(232,132), "S20958C15");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(240,136), "S20958C15");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(240,136), "S20958C15");
    check_base_class_offset(lv, (S20958C12*)(S20958C17*), ABISELECT(232,132), "S20958C15");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C17*), ABISELECT(264,148), "S20958C15");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C17*), ABISELECT(264,148), "S20958C15");
    check_base_class_offset(lv, (S20958C17*)(S20958C16*), ABISELECT(224,128), "S20958C15");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*)(S20958C16*), ABISELECT(16,8), "S20958C15");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C11*)(S20958C16*), ABISELECT(16,8), "S20958C15");
    check_base_class_offset(lv, (S20958C16*), ABISELECT(16,8), "S20958C15");
    /*is_ambiguous_... S20958C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*), 0, "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*), 0, "S20958C15");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C2*), 0, "S20958C15");
    test_class_info(&lv, &cd_S20958C15);
    dp->~S20958C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C15(Test_S20958C15, "S20958C15", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN9S20958C15C1Ev();
extern void _ZN9S20958C15D1Ev();
Name_Map name_map_S20958C15[] = {
  NSPAIR(_ZN9S20958C15C1Ev),
  NSPAIR(_ZN9S20958C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C10;
extern VTBL_ENTRY _ZTI9S20958C10[];
extern  VTBL_ENTRY _ZTV9S20958C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C13;
extern VTBL_ENTRY _ZTI9S20958C13[];
extern  VTBL_ENTRY _ZTV9S20958C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C17;
extern VTBL_ENTRY _ZTI9S20958C17[];
extern  VTBL_ENTRY _ZTV9S20958C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C16;
extern VTBL_ENTRY _ZTI9S20958C16[];
extern  VTBL_ENTRY _ZTV9S20958C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
static Base_Class bases_S20958C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20958C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(40,20), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20958C2,    ABISELECT(24,12), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20958C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20958C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20958C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20958C17,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20958C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20958C16,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20958C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C15[];
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void _ZN9S20958C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void _ZN9S20958C15D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20958C15D1Ev,_ZThn8_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20958C15D0Ev,_ZThn8_N9S20958C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C15D1Ev,_ZThn12_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C15D0Ev,_ZThn12_N9S20958C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S20958C15D1Ev,_ZThn20_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S20958C15D0Ev,_ZThn20_N9S20958C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20958C15D1Ev,_ZThn80_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20958C15D0Ev,_ZThn80_N9S20958C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C15D1Ev,_ZThn120_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C15D0Ev,_ZThn120_N9S20958C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20958C15D1Ev,_ZThn128_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20958C15D0Ev,_ZThn128_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C15[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(72,52),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20958C15[];
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__A__9S20958C15[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S20958C2D1Ev,_ZThn20_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S20958C2D0Ev,_ZThn20_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2__A__9S20958C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20958C2D1Ev,_ZThn12_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20958C2D0Ev,_ZThn12_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C2__A__9S20958C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void _ZN9S20958C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void _ZN9S20958C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C15[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C119S20958C16__A1__9S20958C15[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C11D1Ev,_ZThn4_N9S20958C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C11D0Ev,_ZThn4_N9S20958C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C119S20958C16__A1__9S20958C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C16__9S20958C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C16__9S20958C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S20958C16D1Ev,_ZThn72_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S20958C16D0Ev,_ZThn72_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C16__9S20958C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20958C16D1Ev,_ZThn112_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20958C16D0Ev,_ZThn112_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C16__9S20958C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C16D1Ev,_ZThn120_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C16D0Ev,_ZThn120_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C16__9S20958C15[] = {
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C15[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2__9S20958C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3__9S20958C15[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C15[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void _ZN9S20958C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
extern void _ZN9S20958C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C15[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C10__9S20958C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__9S20958C15[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11__9S20958C15[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void _ZN9S20958C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
extern void _ZN9S20958C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C15[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C13__9S20958C15[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C13__9S20958C15[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void _ZN9S20958C17D1Ev();
extern void _ZN9S20958C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C15[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C17[0]),
  (VTBL_ENTRY)&_ZN9S20958C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C17D0Ev,
};
static  VTT_ENTRY vtt_S20958C15[] = {
  {&(_ZTV9S20958C15[16]),  16,82},
  {&(_tg__ZTV8S20958C2__A__9S20958C15[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C2__A__9S20958C15[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C2__A__9S20958C15[5]),  5,7},
  {&(_ZTV9S20958C15[33]),  33,82},
  {&(_ZTV9S20958C15[44]),  44,82},
  {&(_ZTV9S20958C15[53]),  53,82},
  {&(_ZTV9S20958C15[44]),  44,82},
  {&(_ZTV9S20958C15[63]),  63,82},
  {&(_ZTV9S20958C15[63]),  63,82},
  {&(_ZTV9S20958C15[74]),  74,82},
  {&(_ZTV9S20958C15[80]),  80,82},
  {&(_tg__ZTV9S20958C16__9S20958C15[15]),  15,17},
  {&(_tg__ZTV9S20958C119S20958C16__A1__9S20958C15[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C119S20958C16__A1__9S20958C15[5]),  5,7},
  {&(_tg__ZTV8S20958C2__9S20958C16__9S20958C15[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C16__9S20958C15[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C16__9S20958C15[9]),  9,11},
  {&(_tg__ZTV9S20958C10__9S20958C16__9S20958C15[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C16__9S20958C15[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C16__9S20958C15[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C16__9S20958C15[4]),  4,6},
  {&(_tg__ZTV8S20958C2__9S20958C15[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C2__9S20958C15[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C15[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C15[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3__9S20958C15[5]),  5,7},
  {&(_tg__ZTV8S20958C6__9S20958C15[4]),  4,6},
  {&(_tg__ZTV9S20958C10__9S20958C15[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C15[8]),  8,10},
  {&(_tg__ZTV8S20958C6__9S20958C10__9S20958C15[5]),  5,7},
  {&(_tg__ZTV9S20958C11__9S20958C15[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11__9S20958C15[5]),  5,7},
  {&(_tg__ZTV9S20958C13__9S20958C15[9]),  9,11},
  {&(_tg__ZTV8S20958C6__9S20958C13__9S20958C15[5]),  5,7},
  {&(_tg__ZTV8S20958C3__9S20958C13__9S20958C15[7]),  7,9},
  {&(_tg__ZTV9S20958C17__9S20958C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20958C15[];
extern  VTBL_ENTRY _ZTV9S20958C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C15[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C16D0Ev,_ZThn120_N9S20958C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C16D1Ev,_ZThn120_N9S20958C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C11D0Ev,_ZThn4_N9S20958C11D0Ev),
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C11D1Ev,_ZThn4_N9S20958C11D1Ev),
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20958C16D0Ev,_ZThn112_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C16D0Ev,_ZThn72_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev),
  (VTBL_ENTRY)_ZN9S20958C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20958C16D1Ev,_ZThn112_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C16D1Ev,_ZThn72_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev),
  (VTBL_ENTRY)_ZN9S20958C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20958C2D0Ev,_ZThn12_N8S20958C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20958C2D0Ev,_ZThn20_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20958C2D1Ev,_ZThn12_N8S20958C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20958C2D1Ev,_ZThn20_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C15D0Ev,_ZThn128_N9S20958C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C15D1Ev,_ZThn128_N9S20958C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C15D0Ev,_ZThn120_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20958C15D0Ev,_ZThn80_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20958C15D0Ev,_ZThn20_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C15D0Ev,_ZThn12_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C15D0Ev,_ZThn8_N9S20958C15D0Ev),
  (VTBL_ENTRY)_ZN9S20958C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C15D1Ev,_ZThn120_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20958C15D1Ev,_ZThn80_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20958C15D1Ev,_ZThn20_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C15D1Ev,_ZThn12_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C15D1Ev,_ZThn8_N9S20958C15D1Ev),
  (VTBL_ENTRY)_ZN9S20958C15D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C15 = {  "S20958C15", // class name
  bases_S20958C15, 31,
  &(vtc_S20958C15[0]), // expected_vtbl_contents
  &(vtt_S20958C15[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI9S20958C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20958C15),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C15),37, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C14  : virtual S5217C60_nt , S20958C15 {
  ~S20958C14(); // tgen
  S20958C14(); // tgen
};
//SIG(-1 S20958C14) C1{ VBC2{ m Fp} BC3{ VBC4{ VBC5{ VBC6{ VBC7{ BC2 Fp[2]} VBC2 VBC8{ VBC2 VBC7 vd} VBC9{ m} vd Fi[9]} BC9 VBC10{ m} Fp} VBC11{ VBC12{ VBC2 BC9 VBC13{ BC2 BC7} VBC8} FC8} VBC14{ BC9 VBC7 VBC8 VBC13 VBC6 vd Fl} VBC15{ BC13 BC7 VBC9 vd} BC12 vd} BC10 BC5}}


S20958C14 ::~S20958C14(){ note_dtor("S20958C14", this);} // tgen
S20958C14 ::S20958C14(){ note_ctor("S20958C14", this);} // tgen

static void Test_S20958C14()
{
  extern Class_Descriptor cd_S20958C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20958C14, buf);
    S20958C14 *dp, &lv = *(dp=new (buf) S20958C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20958C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C14)");
    /*is_ambiguous_... S20958C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S20958C14");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(16,8), "S20958C14");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(16,8), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(16,8), "S20958C14");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*)(S20958C16*), ABISELECT(16,8), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(96,64), "S20958C14");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(96,64), "S20958C14");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(96,64), "S20958C14");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C13*), ABISELECT(96,64), "S20958C14");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), ABISELECT(32,16), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*), ABISELECT(32,16), "S20958C14");
    check_base_class_offset(lv, (S20958C6*)(S20958C13*), ABISELECT(32,16), "S20958C14");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*)(S20958C16*), ABISELECT(32,16), "S20958C14");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(120,76), "S20958C14");
    check_base_class_offset(lv, (S2265C38*)(S20958C17*), ABISELECT(120,76), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*), ABISELECT(48,24), "S20958C14");
    check_base_class_offset(lv, (S20958C3*)(S20958C13*), ABISELECT(48,24), "S20958C14");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*)(S20958C15*), ABISELECT(48,24), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*), ABISELECT(32,16), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*), ABISELECT(120,76), "S20958C14");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*)(S20958C15*), ABISELECT(120,76), "S20958C14");
    check_base_class_offset(lv, (S20958C2*)(S20958C16*), ABISELECT(32,16), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*), ABISELECT(128,80), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(176,104), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(184,108), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C12 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(184,108), "S20958C14");
    /*is_ambiguous_... S20958C14::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(176,104), "S20958C14");
    check_base_class_offset(lv, (S20958C12*)(S20958C13*), ABISELECT(176,104), "S20958C14");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*)(S20958C16*), ABISELECT(176,104), "S20958C14");
    check_base_class_offset(lv, (S20958C11*)(S20958C10*), ABISELECT(128,80), "S20958C14");
    check_base_class_offset(lv, (S20958C10*)(S20958C16*), ABISELECT(128,80), "S20958C14");
    /*is_ambiguous_... S20958C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C13*), ABISELECT(208,120), "S20958C14");
    check_base_class_offset(lv, (S20958C13*)(S20958C16*), ABISELECT(208,120), "S20958C14");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*)(S20958C17*), ABISELECT(232,132), "S20958C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(240,136), "S20958C14");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(240,136), "S20958C14");
    check_base_class_offset(lv, (S20958C12*)(S20958C17*), ABISELECT(232,132), "S20958C14");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C17*), ABISELECT(264,148), "S20958C14");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C17*), ABISELECT(264,148), "S20958C14");
    check_base_class_offset(lv, (S20958C17*)(S20958C16*), ABISELECT(224,128), "S20958C14");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*)(S20958C16*), ABISELECT(24,12), "S20958C14");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C11*)(S20958C16*), ABISELECT(24,12), "S20958C14");
    check_base_class_offset(lv, (S20958C16*)(S20958C15*), ABISELECT(24,12), "S20958C14");
    /*is_ambiguous_... S20958C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C15*), 0, "S20958C14");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*)(S20958C15*), 0, "S20958C14");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C2*)(S20958C15*), 0, "S20958C14");
    check_base_class_offset(lv, (S20958C15*), 0, "S20958C14");
    test_class_info(&lv, &cd_S20958C14);
    dp->~S20958C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C14(Test_S20958C14, "S20958C14", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN9S20958C14C1Ev();
extern void _ZN9S20958C14D1Ev();
Name_Map name_map_S20958C14[] = {
  NSPAIR(_ZN9S20958C14C1Ev),
  NSPAIR(_ZN9S20958C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C10;
extern VTBL_ENTRY _ZTI9S20958C10[];
extern  VTBL_ENTRY _ZTV9S20958C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C13;
extern VTBL_ENTRY _ZTI9S20958C13[];
extern  VTBL_ENTRY _ZTV9S20958C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C17;
extern VTBL_ENTRY _ZTI9S20958C17[];
extern  VTBL_ENTRY _ZTV9S20958C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C16;
extern VTBL_ENTRY _ZTI9S20958C16[];
extern  VTBL_ENTRY _ZTV9S20958C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S20958C15;
extern VTBL_ENTRY _ZTI9S20958C15[];
extern  VTBL_ENTRY _ZTV9S20958C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C15[];
static Base_Class bases_S20958C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20958C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20958C2,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20958C11,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20958C10,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20958C13,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20958C17,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20958C11,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20958C16,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20958C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20958C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20958C14[];
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void _ZN9S20958C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void _ZN9S20958C14D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C14D1Ev,_ZThn12_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C14D0Ev,_ZThn12_N9S20958C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20958C14D1Ev,_ZThn16_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn32_N9S20958C14D0Ev,_ZThn16_N9S20958C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S20958C14D1Ev,_ZThn24_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S20958C14D0Ev,_ZThn24_N9S20958C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn128_N9S20958C14D1Ev,_ZThn80_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn128_N9S20958C14D0Ev,_ZThn80_N9S20958C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C14D1Ev,_ZThn120_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C14D0Ev,_ZThn120_N9S20958C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20958C14D1Ev,_ZThn128_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20958C14D0Ev,_ZThn128_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C14[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20958C14[];
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void _ZN9S20958C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void _ZN9S20958C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C15__9S20958C14[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C29S20958C15__A1__9S20958C14[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20958C2D1Ev,_ZThn24_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20958C2D0Ev,_ZThn24_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C29S20958C15__A1__9S20958C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20958C2D1Ev,_ZThn16_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20958C2D0Ev,_ZThn16_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C29S20958C15__A1__9S20958C14[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C15D1Ev,_ZThn12_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C15D0Ev,_ZThn12_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C15__9S20958C14[] = {
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn32_N9S20958C15D1Ev,_ZThn16_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn32_N9S20958C15D0Ev,_ZThn16_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C15__9S20958C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S20958C15D1Ev,_ZThn24_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S20958C15D0Ev,_ZThn24_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C15__9S20958C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn128_N9S20958C15D1Ev,_ZThn80_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn128_N9S20958C15D0Ev,_ZThn80_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C15__9S20958C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C15D1Ev,_ZThn120_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C15D0Ev,_ZThn120_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C15__9S20958C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20958C15D1Ev,_ZThn128_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20958C15D0Ev,_ZThn128_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C15__9S20958C14[] = {
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void _ZN9S20958C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void _ZN9S20958C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C14[] = {
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C119S20958C16__A1__9S20958C14[] = {
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C11D1Ev,_ZThn4_N9S20958C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C11D0Ev,_ZThn4_N9S20958C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C119S20958C16__A1__9S20958C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C16__9S20958C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C16__9S20958C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn104_N9S20958C16D1Ev,_ZThn68_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn104_N9S20958C16D0Ev,_ZThn68_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C16__9S20958C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S20958C16D1Ev,_ZThn108_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S20958C16D0Ev,_ZThn108_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C16__9S20958C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-184,-108),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn200_N9S20958C16D1Ev,_ZThn116_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn200_N9S20958C16D0Ev,_ZThn116_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C16__9S20958C14[] = {
  ABISELECT(-200,-116),
  ABISELECT(-104,-52),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C14[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2__9S20958C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3__9S20958C14[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C14[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void _ZN9S20958C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
extern void _ZN9S20958C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C14[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C10__9S20958C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__9S20958C14[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11__9S20958C14[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void _ZN9S20958C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
extern void _ZN9S20958C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C14[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C13__9S20958C14[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C13__9S20958C14[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void _ZN9S20958C17D1Ev();
extern void _ZN9S20958C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C14[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C17[0]),
  (VTBL_ENTRY)&_ZN9S20958C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C17D0Ev,
};
static  VTT_ENTRY vtt_S20958C14[] = {
  {&(_ZTV9S20958C14[16]),  16,82},
  {&(_tg__ZTV9S20958C15__9S20958C14[16]),  16,18},
  {&(_tg__ZTV8S20958C29S20958C15__A1__9S20958C14[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C29S20958C15__A1__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C29S20958C15__A1__9S20958C14[5]),  5,7},
  {&(_tg__ZTV9S20958C16__9S20958C15__9S20958C14[15]),  15,17},
  {&(_tg__ZTV8S20958C2__9S20958C15__9S20958C14[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C15__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C15__9S20958C14[9]),  9,11},
  {&(_tg__ZTV9S20958C10__9S20958C15__9S20958C14[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C15__9S20958C14[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C15__9S20958C14[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C15__9S20958C14[4]),  4,6},
  {&(_ZTV9S20958C14[33]),  33,82},
  {&(_ZTV9S20958C14[44]),  44,82},
  {&(_ZTV9S20958C14[53]),  53,82},
  {&(_ZTV9S20958C14[44]),  44,82},
  {&(_ZTV9S20958C14[63]),  63,82},
  {&(_ZTV9S20958C14[63]),  63,82},
  {&(_ZTV9S20958C14[74]),  74,82},
  {&(_ZTV9S20958C14[80]),  80,82},
  {&(_tg__ZTV9S20958C16__9S20958C14[15]),  15,17},
  {&(_tg__ZTV9S20958C119S20958C16__A1__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C119S20958C16__A1__9S20958C14[5]),  5,7},
  {&(_tg__ZTV8S20958C2__9S20958C16__9S20958C14[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C16__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C16__9S20958C14[9]),  9,11},
  {&(_tg__ZTV9S20958C10__9S20958C16__9S20958C14[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C16__9S20958C14[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C16__9S20958C14[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C16__9S20958C14[4]),  4,6},
  {&(_tg__ZTV8S20958C2__9S20958C14[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C2__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C14[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3__9S20958C14[5]),  5,7},
  {&(_tg__ZTV8S20958C6__9S20958C14[4]),  4,6},
  {&(_tg__ZTV9S20958C10__9S20958C14[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C14[8]),  8,10},
  {&(_tg__ZTV8S20958C6__9S20958C10__9S20958C14[5]),  5,7},
  {&(_tg__ZTV9S20958C11__9S20958C14[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11__9S20958C14[5]),  5,7},
  {&(_tg__ZTV9S20958C13__9S20958C14[9]),  9,11},
  {&(_tg__ZTV8S20958C6__9S20958C13__9S20958C14[5]),  5,7},
  {&(_tg__ZTV8S20958C3__9S20958C13__9S20958C14[7]),  7,9},
  {&(_tg__ZTV9S20958C17__9S20958C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20958C14[];
extern  VTBL_ENTRY _ZTV9S20958C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C14[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20958C16D0Ev,_ZThn116_N9S20958C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20958C16D1Ev,_ZThn116_N9S20958C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C11D0Ev,_ZThn4_N9S20958C11D0Ev),
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C11D1Ev,_ZThn4_N9S20958C11D1Ev),
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20958C16D0Ev,_ZThn108_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20958C16D0Ev,_ZThn68_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev),
  (VTBL_ENTRY)_ZN9S20958C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20958C16D1Ev,_ZThn108_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20958C16D1Ev,_ZThn68_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev),
  (VTBL_ENTRY)_ZN9S20958C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C15D0Ev,_ZThn128_N9S20958C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C15D1Ev,_ZThn128_N9S20958C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20958C2D0Ev,_ZThn16_N8S20958C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20958C2D0Ev,_ZThn24_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20958C2D1Ev,_ZThn16_N8S20958C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20958C2D1Ev,_ZThn24_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C15D0Ev,_ZThn120_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20958C15D0Ev,_ZThn80_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20958C15D0Ev,_ZThn24_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20958C15D0Ev,_ZThn16_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C15D0Ev,_ZThn12_N9S20958C15D0Ev),
  (VTBL_ENTRY)_ZN9S20958C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C15D1Ev,_ZThn120_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20958C15D1Ev,_ZThn80_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20958C15D1Ev,_ZThn24_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20958C15D1Ev,_ZThn16_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C15D1Ev,_ZThn12_N9S20958C15D1Ev),
  (VTBL_ENTRY)_ZN9S20958C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C14D0Ev,_ZThn128_N9S20958C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C14D1Ev,_ZThn128_N9S20958C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C14D0Ev,_ZThn120_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20958C14D0Ev,_ZThn80_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20958C14D0Ev,_ZThn24_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20958C14D0Ev,_ZThn16_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C14D0Ev,_ZThn12_N9S20958C14D0Ev),
  (VTBL_ENTRY)_ZN9S20958C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C14D1Ev,_ZThn120_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S20958C14D1Ev,_ZThn80_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20958C14D1Ev,_ZThn24_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20958C14D1Ev,_ZThn16_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C14D1Ev,_ZThn12_N9S20958C14D1Ev),
  (VTBL_ENTRY)_ZN9S20958C14D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C14 = {  "S20958C14", // class name
  bases_S20958C14, 32,
  &(vtc_S20958C14[0]), // expected_vtbl_contents
  &(vtt_S20958C14[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI9S20958C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20958C14),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20958C14),46, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C9  : virtual S20958C3 , virtual S20958C10 , virtual S20958C13 , S20958C14 {
  virtual  ~S20958C9(); // _ZN8S20958C9D2Ev
  S20958C9(); // tgen
};
//SIG(-1 S20958C9) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} VBC7{ VBC8{ VBC4 BC6 VBC9{ BC4 BC3} VBC5} FC5} VBC10{ BC6 VBC3 VBC5 VBC9 VBC2 vd Fl} BC11{ VBC4 BC12{ VBC13{ VBC14{ VBC2 BC6 VBC15{ m} Fp} VBC7 VBC10 VBC16{ BC9 BC3 VBC6 vd} BC8 vd} BC15 BC14}} vd}


 S20958C9 ::~S20958C9(){ note_dtor("S20958C9", this);}
S20958C9 ::S20958C9(){ note_ctor("S20958C9", this);} // tgen

static void Test_S20958C9()
{
  extern Class_Descriptor cd_S20958C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20958C9, buf);
    S20958C9 *dp, &lv = *(dp=new (buf) S20958C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20958C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C9)");
    /*is_ambiguous_... S20958C9::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(64,48), "S20958C9");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(64,48), "S20958C9");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(64,48), "S20958C9");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C13*), ABISELECT(64,48), "S20958C9");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(88,60), "S20958C9");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(88,60), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(88,60), "S20958C9");
    /*is_ambiguous_... S20958C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C14*), ABISELECT(88,60), "S20958C9");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*)(S20958C16*), ABISELECT(88,60), "S20958C9");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), ABISELECT(16,8), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*), ABISELECT(16,8), "S20958C9");
    check_base_class_offset(lv, (S20958C6*)(S20958C13*), ABISELECT(16,8), "S20958C9");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*)(S20958C16*), ABISELECT(16,8), "S20958C9");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(96,64), "S20958C9");
    check_base_class_offset(lv, (S2265C38*)(S20958C17*), ABISELECT(96,64), "S20958C9");
    check_base_class_offset(lv, (S20958C3*), ABISELECT(16,8), "S20958C9");
    check_base_class_offset(lv, (S20958C3*)(S20958C13*), ABISELECT(16,8), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*), ABISELECT(16,8), "S20958C9");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*)(S20958C15*)(S20958C14*), ABISELECT(16,8), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*), ABISELECT(104,68), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(152,92), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(160,96), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C12 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(160,96), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(152,92), "S20958C9");
    check_base_class_offset(lv, (S20958C12*)(S20958C13*), ABISELECT(152,92), "S20958C9");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*)(S20958C16*), ABISELECT(152,92), "S20958C9");
    check_base_class_offset(lv, (S20958C11*)(S20958C10*), ABISELECT(104,68), "S20958C9");
    check_base_class_offset(lv, (S20958C10*), ABISELECT(104,68), "S20958C9");
    check_base_class_offset(lv, (S20958C10*)(S20958C16*), ABISELECT(104,68), "S20958C9");
    /*is_ambiguous_... S20958C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C13*), ABISELECT(184,108), "S20958C9");
    check_base_class_offset(lv, (S20958C13*), ABISELECT(184,108), "S20958C9");
    check_base_class_offset(lv, (S20958C13*)(S20958C16*), ABISELECT(184,108), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*), ABISELECT(208,120), "S20958C9");
    /*is_ambiguous_... S20958C9::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*), ABISELECT(224,128), "S20958C9");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*)(S20958C15*)(S20958C14*), ABISELECT(224,128), "S20958C9");
    check_base_class_offset(lv, (S20958C2*)(S20958C16*), ABISELECT(208,120), "S20958C9");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*)(S20958C17*), ABISELECT(232,132), "S20958C9");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(240,136), "S20958C9");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(240,136), "S20958C9");
    check_base_class_offset(lv, (S20958C12*)(S20958C17*), ABISELECT(232,132), "S20958C9");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C17*), ABISELECT(264,148), "S20958C9");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C17*), ABISELECT(264,148), "S20958C9");
    check_base_class_offset(lv, (S20958C17*)(S20958C16*), ABISELECT(224,128), "S20958C9");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*)(S20958C16*), ABISELECT(200,116), "S20958C9");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C11*)(S20958C16*), ABISELECT(200,116), "S20958C9");
    check_base_class_offset(lv, (S20958C16*)(S20958C15*)(S20958C14*), ABISELECT(200,116), "S20958C9");
    /*is_ambiguous_... S20958C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C15*)(S20958C14*), 0, "S20958C9");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*)(S20958C15*)(S20958C14*), 0, "S20958C9");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C2*)(S20958C15*)(S20958C14*), 0, "S20958C9");
    check_base_class_offset(lv, (S20958C15*)(S20958C14*), 0, "S20958C9");
    check_base_class_offset(lv, (S20958C14*), 0, "S20958C9");
    test_class_info(&lv, &cd_S20958C9);
    dp->~S20958C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C9(Test_S20958C9, "S20958C9", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S20958C9C1Ev();
extern void _ZN8S20958C9D2Ev();
Name_Map name_map_S20958C9[] = {
  NSPAIR(_ZN8S20958C9C1Ev),
  NSPAIR(_ZN8S20958C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C10;
extern VTBL_ENTRY _ZTI9S20958C10[];
extern  VTBL_ENTRY _ZTV9S20958C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C13;
extern VTBL_ENTRY _ZTI9S20958C13[];
extern  VTBL_ENTRY _ZTV9S20958C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C13[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C17;
extern VTBL_ENTRY _ZTI9S20958C17[];
extern  VTBL_ENTRY _ZTV9S20958C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C16;
extern VTBL_ENTRY _ZTI9S20958C16[];
extern  VTBL_ENTRY _ZTV9S20958C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S20958C15;
extern VTBL_ENTRY _ZTI9S20958C15[];
extern  VTBL_ENTRY _ZTV9S20958C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C15[];
extern Class_Descriptor cd_S20958C14;
extern VTBL_ENTRY _ZTI9S20958C14[];
extern  VTBL_ENTRY _ZTV9S20958C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C14[];
static Base_Class bases_S20958C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20958C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20958C11,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20958C10,    ABISELECT(104,68), //bcp->offset
    27, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20958C13,    ABISELECT(184,108), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20958C2,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20958C17,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(200,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20958C11,    ABISELECT(200,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20958C16,    ABISELECT(200,116), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20958C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20958C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20958C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20958C9[];
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void _ZN8S20958C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void _ZN8S20958C9D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C9D1Ev,_ZThn8_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C9D0Ev,_ZThn8_N8S20958C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn104_N8S20958C9D1Ev,_ZThn68_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn104_N8S20958C9D0Ev,_ZThn68_N8S20958C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn184_N8S20958C9D1Ev,_ZThn108_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn184_N8S20958C9D0Ev,_ZThn108_N8S20958C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn200_N8S20958C9D1Ev,_ZThn116_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn200_N8S20958C9D0Ev,_ZThn116_N8S20958C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn208_N8S20958C9D1Ev,_ZThn120_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn208_N8S20958C9D0Ev,_ZThn120_N8S20958C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20958C9D1Ev,_ZTv0_n16_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn224_N8S20958C9D1Ev,_ZThn128_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20958C9D0Ev,_ZTv0_n16_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn224_N8S20958C9D0Ev,_ZThn128_N8S20958C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C9[] = {
  ABISELECT(224,128),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,120),
  ABISELECT(200,116),
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-200,-116),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-128,-64),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20958C9D1Ev,_ZTv0_n16_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20958C9D0Ev,_ZTv0_n16_N8S20958C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20958C9[];
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void _ZN9S20958C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void _ZN9S20958C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C14__8S20958C9[] = {
  ABISELECT(224,128),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,120),
  ABISELECT(200,116),
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void _ZN9S20958C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void _ZN9S20958C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C159S20958C14__8S20958C9[] = {
  ABISELECT(224,128),
  ABISELECT(184,108),
  ABISELECT(152,92),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(208,120),
  ABISELECT(200,116),
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C29S20958C159S20958C14__A1__8S20958C9[] = {
  ABISELECT(224,128),
  ABISELECT(96,64),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C29S20958C159S20958C14__A1__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn200_N9S20958C15D1Ev,_ZThn116_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn200_N9S20958C15D0Ev,_ZThn116_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C159S20958C14__8S20958C9[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-200,-116),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C15D1Ev,_ZThn120_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C15D0Ev,_ZThn120_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C159S20958C14__8S20958C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20958C15D1Ev,_ZThn8_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20958C15D0Ev,_ZThn8_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C159S20958C14__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S20958C15D1Ev,_ZThn68_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn104_N9S20958C15D0Ev,_ZThn68_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C159S20958C14__8S20958C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn184_N9S20958C15D1Ev,_ZThn108_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn184_N9S20958C15D0Ev,_ZThn108_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C159S20958C14__8S20958C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20958C15D1Ev,_ZThn128_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn224_N9S20958C15D0Ev,_ZThn128_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C159S20958C14__8S20958C9[] = {
  ABISELECT(-224,-128),
  ABISELECT(-128,-64),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn200_N9S20958C14D1Ev,_ZThn116_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn200_N9S20958C14D0Ev,_ZThn116_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C14__8S20958C9[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  ABISELECT(-200,-116),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn208_N9S20958C14D1Ev,_ZThn120_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn208_N9S20958C14D0Ev,_ZThn120_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C14__8S20958C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20958C14D1Ev,_ZThn8_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20958C14D0Ev,_ZThn8_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C14__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20958C14D1Ev,_ZThn68_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn104_N9S20958C14D0Ev,_ZThn68_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C14__8S20958C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn184_N9S20958C14D1Ev,_ZThn108_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn184_N9S20958C14D0Ev,_ZThn108_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C14__8S20958C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(-184,-108),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20958C14D1Ev,_ZThn128_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20958C14D0Ev,_ZThn128_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C14__8S20958C9[] = {
  ABISELECT(-224,-128),
  ABISELECT(-128,-64),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C9[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void _ZN9S20958C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
extern void _ZN9S20958C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__8S20958C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C10__8S20958C9[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__8S20958C9[] = {
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11__8S20958C9[] = {
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void _ZN9S20958C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
extern void _ZN9S20958C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__8S20958C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C13__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void _ZN9S20958C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void _ZN9S20958C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__8S20958C9[] = {
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  ABISELECT(24,12),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(8,4),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C119S20958C16__A1__8S20958C9[] = {
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C119S20958C16__A1__8S20958C9[] = {
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C16__8S20958C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  ABISELECT(-8,-4),
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C16__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C16__8S20958C9[] = {
  0,
  ABISELECT(-88,-60),
  ABISELECT(48,24),
  ABISELECT(96,48),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C16__8S20958C9[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-168,-100),
  ABISELECT(16,8),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C16__8S20958C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__8S20958C9[] = {
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  0,
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2__8S20958C9[] = {
  ABISELECT(80,56),
  0,
  ABISELECT(192,112),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void _ZN9S20958C17D1Ev();
extern void _ZN9S20958C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20958C17__8S20958C9[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C17[0]),
  (VTBL_ENTRY)&_ZN9S20958C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C17D0Ev,
};
static  VTT_ENTRY vtt_S20958C9[] = {
  {&(_ZTV8S20958C9[16]),  16,82},
  {&(_tg__ZTV9S20958C14__8S20958C9[16]),  16,18},
  {&(_tg__ZTV9S20958C159S20958C14__8S20958C9[16]),  16,18},
  {&(_tg__ZTV8S20958C29S20958C159S20958C14__A1__8S20958C9[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C29S20958C159S20958C14__A1__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__8S20958C29S20958C159S20958C14__A1__8S20958C9[7]),  7,9},
  {&(_tg__ZTV9S20958C16__9S20958C159S20958C14__8S20958C9[15]),  15,17},
  {&(_tg__ZTV8S20958C2__9S20958C159S20958C14__8S20958C9[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C159S20958C14__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__9S20958C159S20958C14__8S20958C9[7]),  7,9},
  {&(_tg__ZTV9S20958C10__9S20958C159S20958C14__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C159S20958C14__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C159S20958C14__8S20958C9[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C159S20958C14__8S20958C9[4]),  4,6},
  {&(_tg__ZTV9S20958C16__9S20958C14__8S20958C9[15]),  15,17},
  {&(_tg__ZTV8S20958C2__9S20958C14__8S20958C9[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C14__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__9S20958C14__8S20958C9[7]),  7,9},
  {&(_tg__ZTV9S20958C10__9S20958C14__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C14__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C14__8S20958C9[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C14__8S20958C9[4]),  4,6},
  {&(_ZTV8S20958C9[25]),  25,82},
  {&(_ZTV8S20958C9[25]),  25,82},
  {&(_ZTV8S20958C9[35]),  35,82},
  {&(_ZTV8S20958C9[35]),  35,82},
  {&(_ZTV8S20958C9[46]),  46,82},
  {&(_ZTV8S20958C9[63]),  63,82},
  {&(_ZTV8S20958C9[74]),  74,82},
  {&(_ZTV8S20958C9[80]),  80,82},
  {&(_tg__ZTV8S20958C3__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C9[4]),  4,6},
  {&(_tg__ZTV9S20958C10__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C10__8S20958C9[8]),  8,10},
  {&(_tg__ZTV8S20958C6__9S20958C10__8S20958C9[5]),  5,7},
  {&(_tg__ZTV9S20958C11__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11__8S20958C9[5]),  5,7},
  {&(_tg__ZTV9S20958C13__8S20958C9[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C13__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__9S20958C13__8S20958C9[7]),  7,9},
  {&(_tg__ZTV9S20958C16__8S20958C9[15]),  15,17},
  {&(_tg__ZTV9S20958C119S20958C16__A1__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C119S20958C16__A1__8S20958C9[5]),  5,7},
  {&(_tg__ZTV8S20958C2__9S20958C16__8S20958C9[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C16__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__9S20958C16__8S20958C9[7]),  7,9},
  {&(_tg__ZTV9S20958C10__9S20958C16__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C16__8S20958C9[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C16__8S20958C9[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C16__8S20958C9[4]),  4,6},
  {&(_tg__ZTV8S20958C2__8S20958C9[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C2__8S20958C9[7]),  7,9},
  {&(_tg__ZTV8S20958C3__8S20958C2__8S20958C9[7]),  7,9},
  {&(_tg__ZTV9S20958C17__8S20958C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20958C9[];
extern  VTBL_ENTRY _ZTV8S20958C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C9[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D0Ev,_ZThn12_N9S20958C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20958C16D1Ev,_ZThn12_N9S20958C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D0Ev,_ZThn4_N9S20958C16D0Ev),
  (VTBL_ENTRY)_ZN9S20958C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20958C16D1Ev,_ZThn4_N9S20958C16D1Ev),
  (VTBL_ENTRY)_ZN9S20958C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C14D0Ev,_ZThn128_N9S20958C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C14D1Ev,_ZThn128_N9S20958C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C15D0Ev,_ZThn128_N9S20958C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20958C15D1Ev,_ZThn128_N9S20958C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20958C15D0Ev,_ZThn108_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20958C15D0Ev,_ZThn68_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C15D0Ev,_ZThn8_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C15D0Ev,_ZThn120_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20958C15D0Ev,_ZThn116_N9S20958C15D0Ev),
  (VTBL_ENTRY)_ZN9S20958C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20958C15D1Ev,_ZThn108_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20958C15D1Ev,_ZThn68_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C15D1Ev,_ZThn8_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C15D1Ev,_ZThn120_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20958C15D1Ev,_ZThn116_N9S20958C15D1Ev),
  (VTBL_ENTRY)_ZN9S20958C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20958C14D0Ev,_ZThn108_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20958C14D0Ev,_ZThn68_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C14D0Ev,_ZThn8_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C14D0Ev,_ZThn120_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20958C14D0Ev,_ZThn116_N9S20958C14D0Ev),
  (VTBL_ENTRY)_ZN9S20958C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20958C14D1Ev,_ZThn108_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20958C14D1Ev,_ZThn68_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C14D1Ev,_ZThn8_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn208_N9S20958C14D1Ev,_ZThn120_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S20958C14D1Ev,_ZThn116_N9S20958C14D1Ev),
  (VTBL_ENTRY)_ZN9S20958C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20958C9D0Ev,_ZTv0_n16_N8S20958C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20958C9D0Ev,_ZThn128_N8S20958C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20958C9D1Ev,_ZTv0_n16_N8S20958C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20958C9D1Ev,_ZThn128_N8S20958C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20958C9D0Ev,_ZThn120_N8S20958C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20958C9D0Ev,_ZThn116_N8S20958C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20958C9D0Ev,_ZThn108_N8S20958C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20958C9D0Ev,_ZThn68_N8S20958C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C9D0Ev,_ZThn8_N8S20958C9D0Ev),
  (VTBL_ENTRY)_ZN8S20958C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20958C9D1Ev,_ZThn120_N8S20958C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20958C9D1Ev,_ZThn116_N8S20958C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20958C9D1Ev,_ZThn108_N8S20958C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20958C9D1Ev,_ZThn68_N8S20958C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C9D1Ev,_ZThn8_N8S20958C9D1Ev),
  (VTBL_ENTRY)_ZN8S20958C9D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C9 = {  "S20958C9", // class name
  bases_S20958C9, 33,
  &(vtc_S20958C9[0]), // expected_vtbl_contents
  &(vtt_S20958C9[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S20958C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20958C9),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20958C9),55, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20958C1  : virtual S20958C2 , virtual S20958C9 {
  ::S20958C17 s20958c1f0;
  virtual  ~S20958C1(); // _ZN8S20958C1D2Ev
  S20958C1(); // tgen
};
//SIG(1 S20958C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC3 VBC10{ VBC11{ VBC5 BC7 VBC12{ BC5 BC4} VBC6} FC6} VBC13{ BC7 VBC4 VBC6 VBC12 VBC3 vd Fl} BC14{ VBC5 BC15{ VBC16{ VBC2 VBC10 VBC13 VBC17{ BC12 BC4 VBC7 vd} BC11 vd} BC8 BC2}} vd} vd FC17}


 S20958C1 ::~S20958C1(){ note_dtor("S20958C1", this);}
S20958C1 ::S20958C1(){ note_ctor("S20958C1", this);} // tgen

static void Test_S20958C1()
{
  extern Class_Descriptor cd_S20958C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,49)];
    init_test(&cd_S20958C1, buf);
    S20958C1 *dp, &lv = *(dp=new (buf) S20958C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,192), "sizeof(S20958C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20958C1)");
    /*is_ambiguous_... S20958C1::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*), ABISELECT(136,84), "S20958C1");
    check_base_class_offset(lv, (S20958C4*)(S20958C3*), ABISELECT(136,84), "S20958C1");
    check_base_class_offset(lv, (S20958C4*)(S20958C6*), ABISELECT(136,84), "S20958C1");
    /*is_ambiguous_... S20958C13::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C13*), ABISELECT(136,84), "S20958C1");
    /*is_ambiguous_... S20958C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C3*), ABISELECT(160,96), "S20958C1");
    /*is_ambiguous_... S20958C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C6*), ABISELECT(160,96), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*), ABISELECT(160,96), "S20958C1");
    /*is_ambiguous_... S20958C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C14*)(S20958C9*), ABISELECT(160,96), "S20958C1");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C11*)(S20958C16*), ABISELECT(160,96), "S20958C1");
    check_base_class_offset(lv, (S20958C6*)(S20958C3*), ABISELECT(72,36), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*), ABISELECT(72,36), "S20958C1");
    check_base_class_offset(lv, (S20958C6*)(S20958C13*), ABISELECT(72,36), "S20958C1");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C6*)(S20958C11*)(S20958C16*), ABISELECT(72,36), "S20958C1");
    check_base_class_offset(lv, (S2265C38*)(S20958C3*), ABISELECT(168,100), "S20958C1");
    check_base_class_offset(lv, (S2265C38*)(S20958C17*), ABISELECT(168,100), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*), ABISELECT(88,44), "S20958C1");
    check_base_class_offset(lv, (S20958C3*)(S20958C9*), ABISELECT(88,44), "S20958C1");
    check_base_class_offset(lv, (S20958C3*)(S20958C13*), ABISELECT(88,44), "S20958C1");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C3*)(S20958C2*)(S20958C15*)(S20958C14*)(S20958C9*), ABISELECT(88,44), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*), ABISELECT(72,36), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*), 0, "S20958C1");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C2*)(S20958C15*)(S20958C14*)(S20958C9*), 0, "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C2*), ABISELECT(72,36), "S20958C1");
    check_base_class_offset(lv, (S20958C2*)(S20958C16*), ABISELECT(72,36), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*), ABISELECT(192,112), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*), ABISELECT(240,136), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*), ABISELECT(248,140), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C12 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C12*), ABISELECT(248,140), "S20958C1");
    /*is_ambiguous_... S20958C1::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*), ABISELECT(240,136), "S20958C1");
    check_base_class_offset(lv, (S20958C12*)(S20958C13*), ABISELECT(240,136), "S20958C1");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C12*)(S20958C11*)(S20958C16*), ABISELECT(240,136), "S20958C1");
    check_base_class_offset(lv, (S20958C11*)(S20958C10*), ABISELECT(192,112), "S20958C1");
    check_base_class_offset(lv, (S20958C10*)(S20958C9*), ABISELECT(192,112), "S20958C1");
    check_base_class_offset(lv, (S20958C10*)(S20958C16*), ABISELECT(192,112), "S20958C1");
    /*is_ambiguous_... S20958C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C13*), ABISELECT(272,152), "S20958C1");
    check_base_class_offset(lv, (S20958C13*)(S20958C9*), ABISELECT(272,152), "S20958C1");
    check_base_class_offset(lv, (S20958C13*)(S20958C16*), ABISELECT(272,152), "S20958C1");
    /*is_ambiguous_... S20958C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C12*)(S20958C17*), ABISELECT(296,164), "S20958C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(304,168), "S20958C1");
    check_base_class_offset(lv, (S20958C4*)(S20958C12*)(S20958C17*), ABISELECT(304,168), "S20958C1");
    check_base_class_offset(lv, (S20958C12*)(S20958C17*), ABISELECT(296,164), "S20958C1");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20958C4*)(S20958C17*), ABISELECT(328,180), "S20958C1");
    /*is_ambiguous_... S20958C17::S20958C4 */ AMB_check_base_class_offset(lv, (S20958C4*)(S20958C17*), ABISELECT(328,180), "S20958C1");
    check_base_class_offset(lv, (S20958C17*)(S20958C16*), ABISELECT(288,160), "S20958C1");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C11*)(S20958C16*), 0, "S20958C1");
    /*is_ambiguous_... S20958C16::S20958C11 */ AMB_check_base_class_offset(lv, (S20958C11*)(S20958C16*), 0, "S20958C1");
    check_base_class_offset(lv, (S20958C16*)(S20958C15*)(S20958C14*)(S20958C9*), 0, "S20958C1");
    /*is_ambiguous_... S20958C15::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20958C15*)(S20958C14*)(S20958C9*), ABISELECT(176,104), "S20958C1");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20958C2*)(S20958C15*)(S20958C14*)(S20958C9*), ABISELECT(176,104), "S20958C1");
    /*is_ambiguous_... S20958C15::S20958C2 */ AMB_check_base_class_offset(lv, (S20958C2*)(S20958C15*)(S20958C14*)(S20958C9*), ABISELECT(176,104), "S20958C1");
    check_base_class_offset(lv, (S20958C15*)(S20958C14*)(S20958C9*), ABISELECT(176,104), "S20958C1");
    check_base_class_offset(lv, (S20958C14*)(S20958C9*), ABISELECT(176,104), "S20958C1");
    check_base_class_offset(lv, (S20958C9*), ABISELECT(176,104), "S20958C1");
    check_field_offset(lv, s20958c1f0, ABISELECT(8,4), "S20958C1.s20958c1f0");
    test_class_info(&lv, &cd_S20958C1);
    dp->~S20958C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20958C1(Test_S20958C1, "S20958C1", ABISELECT(352,192));

#else // __cplusplus

extern void _ZN8S20958C1C1Ev();
extern void _ZN8S20958C1D2Ev();
Name_Map name_map_S20958C1[] = {
  NSPAIR(_ZN8S20958C1C1Ev),
  NSPAIR(_ZN8S20958C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C6;
extern VTBL_ENTRY _ZTI8S20958C6[];
extern  VTBL_ENTRY _ZTV8S20958C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C3;
extern VTBL_ENTRY _ZTI8S20958C3[];
extern  VTBL_ENTRY _ZTV8S20958C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C10;
extern VTBL_ENTRY _ZTI9S20958C10[];
extern  VTBL_ENTRY _ZTV9S20958C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C13;
extern VTBL_ENTRY _ZTI9S20958C13[];
extern  VTBL_ENTRY _ZTV9S20958C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C12;
extern VTBL_ENTRY _ZTI9S20958C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20958C4;
extern VTBL_ENTRY _ZTI8S20958C4[];
extern Class_Descriptor cd_S20958C17;
extern VTBL_ENTRY _ZTI9S20958C17[];
extern  VTBL_ENTRY _ZTV9S20958C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C17[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C11;
extern VTBL_ENTRY _ZTI9S20958C11[];
extern  VTBL_ENTRY _ZTV9S20958C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C11[];
extern Class_Descriptor cd_S20958C16;
extern VTBL_ENTRY _ZTI9S20958C16[];
extern  VTBL_ENTRY _ZTV9S20958C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C16[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20958C2;
extern VTBL_ENTRY _ZTI8S20958C2[];
extern  VTBL_ENTRY _ZTV8S20958C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C2[];
extern Class_Descriptor cd_S20958C15;
extern VTBL_ENTRY _ZTI9S20958C15[];
extern  VTBL_ENTRY _ZTV9S20958C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C15[];
extern Class_Descriptor cd_S20958C14;
extern VTBL_ENTRY _ZTI9S20958C14[];
extern  VTBL_ENTRY _ZTV9S20958C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20958C14[];
extern Class_Descriptor cd_S20958C9;
extern VTBL_ENTRY _ZTI8S20958C9[];
extern  VTBL_ENTRY _ZTV8S20958C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C9[];
static Base_Class bases_S20958C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20958C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20958C3,    ABISELECT(88,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20958C2,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20958C11,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20958C10,    ABISELECT(192,112), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(272,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20958C13,    ABISELECT(272,152), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(296,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(304,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(304,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20958C12,    ABISELECT(296,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(328,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20958C4,    ABISELECT(328,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20958C17,    ABISELECT(288,160), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20958C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20958C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20958C2,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20958C15,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20958C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20958C9,    ABISELECT(176,104), //bcp->offset
    39, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20958C1[];
extern void ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev)();
extern void _ZN8S20958C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev)();
extern void _ZN8S20958C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20958C1D1Ev,_ZThn36_N8S20958C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S20958C1D0Ev,_ZThn36_N8S20958C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20958C1D1Ev,_ZThn44_N8S20958C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20958C1D0Ev,_ZThn44_N8S20958C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S20958C1D1Ev,_ZThn104_N8S20958C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S20958C1D0Ev,_ZThn104_N8S20958C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S20958C1D1Ev,_ZThn112_N8S20958C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S20958C1D0Ev,_ZThn112_N8S20958C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20958C1D1Ev,_ZThn152_N8S20958C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20958C1D0Ev,_ZThn152_N8S20958C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20958C1D1Ev,_ZTv0_n16_N8S20958C1D1Ev)();
extern void ABISELECT(_ZThn288_N8S20958C1D1Ev,_ZThn160_N8S20958C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20958C1D0Ev,_ZTv0_n16_N8S20958C1D0Ev)();
extern void ABISELECT(_ZThn288_N8S20958C1D0Ev,_ZThn160_N8S20958C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20958C1[] = {
  0,
  ABISELECT(176,104),
  ABISELECT(288,160),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  0,
  ABISELECT(136,84),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-72,-36),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev),
  ABISELECT(112,56),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  ABISELECT(-176,-104),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev),
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-192,-112),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev),
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-272,-152),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev),
  ABISELECT(-288,-160),
  ABISELECT(-120,-60),
  ABISELECT(-288,-160),
  (VTBL_ENTRY)&(_ZTI8S20958C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20958C1D1Ev,_ZTv0_n16_N8S20958C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20958C1D0Ev,_ZTv0_n16_N8S20958C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20958C1[];
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__8S20958C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C2__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void _ZN8S20958C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
extern void _ZN8S20958C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C3__8S20958C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20958C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev),
};
extern void _ZN8S20958C6D1Ev();
extern void _ZN8S20958C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C1[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C6[0]),
  (VTBL_ENTRY)&_ZN8S20958C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20958C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void _ZN8S20958C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void _ZN8S20958C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C9__8S20958C1[] = {
  ABISELECT(112,56),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void _ZN9S20958C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void _ZN9S20958C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(112,56),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void _ZN9S20958C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void _ZN9S20958C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C159S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(112,56),
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-104,-68),
  ABISELECT(-176,-104),
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void _ZN8S20958C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
extern void _ZN8S20958C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C29S20958C159S20958C148S20958C9__A1__8S20958C1[] = {
  ABISELECT(-176,-104),
  ABISELECT(-8,-4),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C29S20958C159S20958C148S20958C9__A1__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__8S20958C29S20958C159S20958C148S20958C9__A1__8S20958C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S20958C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C159S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(288,160),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  ABISELECT(176,104),
  ABISELECT(136,84),
  ABISELECT(160,96),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C159S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C159S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S20958C15D1Ev,_ZThn8_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S20958C15D0Ev,_ZThn8_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C159S20958C148S20958C9__8S20958C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn96_N9S20958C15D1Ev,_ZThn48_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn96_N9S20958C15D0Ev,_ZThn48_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C159S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S20958C15D1Ev,_ZThn56_N9S20958C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S20958C15D0Ev,_ZThn56_N9S20958C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C159S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20958C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20958C16__9S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(288,160),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  ABISELECT(176,104),
  ABISELECT(136,84),
  ABISELECT(160,96),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20958C14D1Ev,_ZThn8_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn16_N9S20958C14D0Ev,_ZThn8_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C148S20958C9__8S20958C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn96_N9S20958C14D1Ev,_ZThn48_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn96_N9S20958C14D0Ev,_ZThn48_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S20958C14D1Ev,_ZThn56_N9S20958C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S20958C14D0Ev,_ZThn56_N9S20958C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C148S20958C9__8S20958C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20958C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__8S20958C9__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(88,60),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(88,60),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C2__8S20958C9__8S20958C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20958C9D1Ev,_ZThn8_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20958C9D0Ev,_ZThn8_N8S20958C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__8S20958C9__8S20958C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn96_N8S20958C9D1Ev,_ZThn48_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn96_N8S20958C9D0Ev,_ZThn48_N8S20958C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__8S20958C9__8S20958C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-96,-48),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20958C16__8S20958C9__8S20958C1[] = {
  ABISELECT(288,160),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  ABISELECT(176,104),
  ABISELECT(136,84),
  ABISELECT(160,96),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20958C9D1Ev,_ZTv0_n16_N8S20958C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S20958C9D1Ev,_ZThn56_N8S20958C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20958C9D0Ev,_ZTv0_n16_N8S20958C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S20958C9D0Ev,_ZThn56_N8S20958C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__8S20958C9__8S20958C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20958C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20958C9D1Ev,_ZTv0_n16_N8S20958C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20958C9D0Ev,_ZTv0_n16_N8S20958C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void _ZN9S20958C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
extern void _ZN9S20958C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__8S20958C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C10__8S20958C1[] = {
  ABISELECT(120,76),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI9S20958C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C11__8S20958C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C11__8S20958C1[] = {
  ABISELECT(120,76),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void _ZN9S20958C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
extern void _ZN9S20958C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__8S20958C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  0,
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C13__8S20958C1[] = {
  ABISELECT(200,116),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(200,116),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C13__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(184,108),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20958C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void _ZN9S20958C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void _ZN9S20958C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C16__8S20958C1[] = {
  ABISELECT(288,160),
  ABISELECT(272,152),
  ABISELECT(192,112),
  ABISELECT(192,112),
  0,
  ABISELECT(168,100),
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(72,36),
  ABISELECT(240,136),
  0,
  ABISELECT(136,84),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void _ZN9S20958C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void _ZN9S20958C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C119S20958C16__A1__8S20958C1[] = {
  ABISELECT(72,36),
  ABISELECT(240,136),
  0,
  ABISELECT(136,84),
  ABISELECT(160,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S20958C11D1Ev,_ZThn36_N9S20958C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev)();
extern void ABISELECT(_ZThn72_N9S20958C11D0Ev,_ZThn36_N9S20958C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C6__9S20958C119S20958C16__A1__8S20958C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20958C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn72_N9S20958C16D1Ev,_ZThn36_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn72_N9S20958C16D0Ev,_ZThn36_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C2__9S20958C16__8S20958C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-72,-36),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn88_N9S20958C16D1Ev,_ZThn44_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn88_N9S20958C16D0Ev,_ZThn44_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20958C3__9S20958C16__8S20958C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn192_N9S20958C16D1Ev,_ZThn112_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn192_N9S20958C16D0Ev,_ZThn112_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C10__9S20958C16__8S20958C1[] = {
  0,
  ABISELECT(-120,-76),
  ABISELECT(48,24),
  ABISELECT(-192,-112),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn272_N9S20958C16D1Ev,_ZThn152_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn272_N9S20958C16D0Ev,_ZThn152_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C13__9S20958C16__8S20958C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-184,-108),
  ABISELECT(-32,-16),
  ABISELECT(-200,-116),
  ABISELECT(-272,-152),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  ABISELECT(-272,-152),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev)();
extern void ABISELECT(_ZThn288_N9S20958C16D1Ev,_ZThn160_N9S20958C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev)();
extern void ABISELECT(_ZThn288_N9S20958C16D0Ev,_ZThn160_N9S20958C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20958C17__9S20958C16__8S20958C1[] = {
  ABISELECT(-288,-160),
  ABISELECT(-120,-60),
  ABISELECT(-288,-160),
  (VTBL_ENTRY)&(_ZTI9S20958C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev),
};
extern void _ZN9S20958C17D1Ev();
extern void _ZN9S20958C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20958C17__8S20958C1[] = {
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20958C17[0]),
  (VTBL_ENTRY)&_ZN9S20958C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20958C17D0Ev,
};
static  VTT_ENTRY vtt_S20958C1[] = {
  {&(_ZTV8S20958C1[17]),  17,84},
  {&(_ZTV8S20958C1[28]),  28,84},
  {&(_ZTV8S20958C1[37]),  37,84},
  {&(_ZTV8S20958C1[28]),  28,84},
  {&(_ZTV8S20958C1[55]),  55,84},
  {&(_ZTV8S20958C1[65]),  65,84},
  {&(_ZTV8S20958C1[65]),  65,84},
  {&(_ZTV8S20958C1[76]),  76,84},
  {&(_ZTV8S20958C1[17]),  17,84},
  {&(_ZTV8S20958C1[82]),  82,84},
  {&(_tg__ZTV8S20958C2__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C2__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C2__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C3__8S20958C1[5]),  5,7},
  {&(_tg__ZTV8S20958C6__8S20958C1[4]),  4,6},
  {&(_tg__ZTV8S20958C9__8S20958C1[16]),  16,18},
  {&(_tg__ZTV9S20958C148S20958C9__8S20958C1[16]),  16,18},
  {&(_tg__ZTV9S20958C159S20958C148S20958C9__8S20958C1[16]),  16,18},
  {&(_tg__ZTV8S20958C29S20958C159S20958C148S20958C9__A1__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C3__8S20958C29S20958C159S20958C148S20958C9__A1__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C6__8S20958C29S20958C159S20958C148S20958C9__A1__8S20958C1[5]),  5,7},
  {&(_tg__ZTV9S20958C16__9S20958C159S20958C148S20958C9__8S20958C1[15]),  15,17},
  {&(_tg__ZTV8S20958C2__9S20958C159S20958C148S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C159S20958C148S20958C9__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C159S20958C148S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C10__9S20958C159S20958C148S20958C9__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C159S20958C148S20958C9__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C159S20958C148S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C159S20958C148S20958C9__8S20958C1[4]),  4,6},
  {&(_tg__ZTV9S20958C16__9S20958C148S20958C9__8S20958C1[15]),  15,17},
  {&(_tg__ZTV8S20958C2__9S20958C148S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C148S20958C9__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C148S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C10__9S20958C148S20958C9__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C148S20958C9__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C148S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C148S20958C9__8S20958C1[4]),  4,6},
  {&(_tg__ZTV8S20958C3__8S20958C9__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C2__8S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C10__8S20958C9__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C10__8S20958C9__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C13__8S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C16__8S20958C9__8S20958C1[15]),  15,17},
  {&(_tg__ZTV8S20958C2__8S20958C9__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C17__8S20958C9__8S20958C1[4]),  4,6},
  {&(_tg__ZTV9S20958C10__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C10__8S20958C1[8]),  8,10},
  {&(_tg__ZTV8S20958C6__9S20958C10__8S20958C1[5]),  5,7},
  {&(_tg__ZTV9S20958C11__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C11__8S20958C1[5]),  5,7},
  {&(_tg__ZTV9S20958C13__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C6__9S20958C13__8S20958C1[5]),  5,7},
  {&(_tg__ZTV8S20958C3__9S20958C13__8S20958C1[7]),  7,9},
  {&(_tg__ZTV9S20958C16__8S20958C1[15]),  15,17},
  {&(_tg__ZTV9S20958C119S20958C16__A1__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C6__9S20958C119S20958C16__A1__8S20958C1[5]),  5,7},
  {&(_tg__ZTV8S20958C2__9S20958C16__8S20958C1[9]),  9,11},
  {&(_tg__ZTV8S20958C3__9S20958C16__8S20958C1[7]),  7,9},
  {&(_tg__ZTV8S20958C2__9S20958C16__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C10__9S20958C16__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C10__9S20958C16__8S20958C1[8]),  8,10},
  {&(_tg__ZTV9S20958C13__9S20958C16__8S20958C1[9]),  9,11},
  {&(_tg__ZTV9S20958C17__9S20958C16__8S20958C1[4]),  4,6},
  {&(_tg__ZTV9S20958C17__8S20958C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20958C1[];
extern  VTBL_ENTRY _ZTV8S20958C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20958C1[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D0Ev,_ZTv0_n16_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20958C16D0Ev,_ZThn160_N9S20958C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C16D1Ev,_ZTv0_n16_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N9S20958C16D1Ev,_ZThn160_N9S20958C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D0Ev,_ZTv0_n20_N9S20958C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S20958C16D0Ev,_ZThn152_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20958C16D0Ev,_ZThn112_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20958C16D0Ev,_ZThn44_N9S20958C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20958C16D0Ev,_ZThn36_N9S20958C16D0Ev),
  (VTBL_ENTRY)_ZN9S20958C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C16D1Ev,_ZTv0_n20_N9S20958C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S20958C16D1Ev,_ZThn152_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20958C16D1Ev,_ZThn112_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20958C16D1Ev,_ZThn44_N9S20958C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20958C16D1Ev,_ZThn36_N9S20958C16D1Ev),
  (VTBL_ENTRY)_ZN9S20958C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D0Ev,_ZTv0_n20_N9S20958C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C13D1Ev,_ZTv0_n20_N9S20958C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D0Ev,_ZTv0_n20_N9S20958C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20958C11D0Ev,_ZThn36_N9S20958C11D0Ev),
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  (VTBL_ENTRY)_ZN9S20958C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C11D1Ev,_ZTv0_n20_N9S20958C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20958C11D1Ev,_ZThn36_N9S20958C11D1Ev),
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  (VTBL_ENTRY)_ZN9S20958C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D0Ev,_ZTv0_n20_N9S20958C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C10D1Ev,_ZTv0_n20_N9S20958C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S20958C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20958C9D0Ev,_ZTv0_n16_N8S20958C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20958C9D0Ev,_ZThn56_N8S20958C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20958C9D1Ev,_ZTv0_n16_N8S20958C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20958C9D1Ev,_ZThn56_N8S20958C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C14D0Ev,_ZTv0_n16_N9S20958C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C14D0Ev,_ZThn56_N9S20958C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C14D1Ev,_ZTv0_n16_N9S20958C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C14D1Ev,_ZThn56_N9S20958C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D0Ev,_ZTv0_n16_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C15D0Ev,_ZThn56_N9S20958C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20958C15D1Ev,_ZTv0_n16_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S20958C15D1Ev,_ZThn56_N9S20958C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D0Ev,_ZTv0_n20_N9S20958C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20958C15D0Ev,_ZThn48_N9S20958C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C15D0Ev,_ZThn8_N9S20958C15D0Ev),
  (VTBL_ENTRY)_ZN9S20958C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C15D1Ev,_ZTv0_n20_N9S20958C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20958C15D1Ev,_ZThn48_N9S20958C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C15D1Ev,_ZThn8_N9S20958C15D1Ev),
  (VTBL_ENTRY)_ZN9S20958C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C14D0Ev,_ZTv0_n20_N9S20958C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20958C14D0Ev,_ZThn48_N9S20958C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C14D0Ev,_ZThn8_N9S20958C14D0Ev),
  (VTBL_ENTRY)_ZN9S20958C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20958C14D1Ev,_ZTv0_n20_N9S20958C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20958C14D1Ev,_ZThn48_N9S20958C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20958C14D1Ev,_ZThn8_N9S20958C14D1Ev),
  (VTBL_ENTRY)_ZN9S20958C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C9D0Ev,_ZTv0_n20_N8S20958C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20958C9D0Ev,_ZThn48_N8S20958C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C9D0Ev,_ZThn8_N8S20958C9D0Ev),
  (VTBL_ENTRY)_ZN8S20958C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C9D1Ev,_ZTv0_n20_N8S20958C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20958C9D1Ev,_ZThn48_N8S20958C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C9D1Ev,_ZThn8_N8S20958C9D1Ev),
  (VTBL_ENTRY)_ZN8S20958C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D0Ev,_ZTv0_n20_N8S20958C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C3D1Ev,_ZTv0_n20_N8S20958C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D0Ev,_ZTv0_n20_N8S20958C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D0Ev,_ZThn8_N8S20958C2D0Ev),
  (VTBL_ENTRY)_ZN8S20958C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C2D1Ev,_ZTv0_n20_N8S20958C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20958C2D1Ev,_ZThn8_N8S20958C2D1Ev),
  (VTBL_ENTRY)_ZN8S20958C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20958C1D0Ev,_ZTv0_n16_N8S20958C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S20958C1D0Ev,_ZThn160_N8S20958C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20958C1D1Ev,_ZTv0_n16_N8S20958C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S20958C1D1Ev,_ZThn160_N8S20958C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C1D0Ev,_ZTv0_n20_N8S20958C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20958C1D0Ev,_ZThn152_N8S20958C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20958C1D0Ev,_ZThn112_N8S20958C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20958C1D0Ev,_ZThn104_N8S20958C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20958C1D0Ev,_ZThn44_N8S20958C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20958C1D0Ev,_ZThn36_N8S20958C1D0Ev),
  (VTBL_ENTRY)_ZN8S20958C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20958C1D1Ev,_ZTv0_n20_N8S20958C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20958C1D1Ev,_ZThn152_N8S20958C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20958C1D1Ev,_ZThn112_N8S20958C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20958C1D1Ev,_ZThn104_N8S20958C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20958C1D1Ev,_ZThn44_N8S20958C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20958C1D1Ev,_ZThn36_N8S20958C1D1Ev),
  (VTBL_ENTRY)_ZN8S20958C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20958C1 = {  "S20958C1", // class name
  bases_S20958C1, 34,
  &(vtc_S20958C1[0]), // expected_vtbl_contents
  &(vtt_S20958C1[0]), // expected_vtt_contents
  ABISELECT(352,192), // object size
  NSPAIRA(_ZTI8S20958C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20958C1),84, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20958C1),65, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1775C3  : S1778C4_nt {
  virtual void  v12(); // _ZN7S1775C33v12Ev
  virtual void  v13(); // _ZN7S1775C33v13Ev
  virtual void  v14(); // _ZN7S1775C33v14Ev
  virtual void  v15(); // _ZN7S1775C33v15Ev
  virtual void  v16(); // _ZN7S1775C33v16Ev
  virtual void  v17(); // _ZN7S1775C33v17Ev
  virtual void  v18(); // _ZN7S1775C33v18Ev
  virtual void  v19(); // _ZN7S1775C33v19Ev
  virtual void  v20(); // _ZN7S1775C33v20Ev
  virtual void  v21(); // _ZN7S1775C33v21Ev
  virtual void  v22(); // _ZN7S1775C33v22Ev
  virtual void  v23(); // _ZN7S1775C33v23Ev
  virtual void  v24(); // _ZN7S1775C33v24Ev
  virtual void  v25(); // _ZN7S1775C33v25Ev
  virtual void  v26(); // _ZN7S1775C33v26Ev
  virtual void  v27(); // _ZN7S1775C33v27Ev
  virtual void  v28(); // _ZN7S1775C33v28Ev
  virtual void  v29(); // _ZN7S1775C33v29Ev
  virtual void  v30(); // _ZN7S1775C33v30Ev
  virtual void  v31(); // _ZN7S1775C33v31Ev
  virtual void  v32(); // _ZN7S1775C33v32Ev
  virtual void  v33(); // _ZN7S1775C33v33Ev
  virtual void  v34(); // _ZN7S1775C33v34Ev
  virtual void  v35(); // _ZN7S1775C33v35Ev
  virtual void  v36(); // _ZN7S1775C33v36Ev
  virtual void  v37(); // _ZN7S1775C33v37Ev
  virtual void  v38(); // _ZN7S1775C33v38Ev
  virtual void  v39(); // _ZN7S1775C33v39Ev
  virtual void  v40(); // _ZN7S1775C33v40Ev
  virtual void  v41(); // _ZN7S1775C33v41Ev
  virtual void  v42(); // _ZN7S1775C33v42Ev
  virtual void  v43(); // _ZN7S1775C33v43Ev
  virtual void  v44(); // _ZN7S1775C33v44Ev
  virtual void  v45(); // _ZN7S1775C33v45Ev
  virtual void  v46(); // _ZN7S1775C33v46Ev
  virtual void  v47(); // _ZN7S1775C33v47Ev
  virtual void  v48(); // _ZN7S1775C33v48Ev
  virtual void  v49(); // _ZN7S1775C33v49Ev
  virtual void  v50(); // _ZN7S1775C33v50Ev
  virtual void  v51(); // _ZN7S1775C33v51Ev
  virtual void  v52(); // _ZN7S1775C33v52Ev
  virtual void  v53(); // _ZN7S1775C33v53Ev
  virtual void  v54(); // _ZN7S1775C33v54Ev
  virtual void  v55(); // _ZN7S1775C33v55Ev
  virtual void  v56(); // _ZN7S1775C33v56Ev
  virtual void  v57(); // _ZN7S1775C33v57Ev
  virtual void  v58(); // _ZN7S1775C33v58Ev
  virtual void  v59(); // _ZN7S1775C33v59Ev
  virtual void  v60(); // _ZN7S1775C33v60Ev
  virtual void  v61(); // _ZN7S1775C33v61Ev
  ~S1775C3(); // tgen
  S1775C3(); // tgen
};
//SIG(-1 S1775C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1775C3 ::v12(){vfunc_called(this, "_ZN7S1775C33v12Ev");}
void  S1775C3 ::v13(){vfunc_called(this, "_ZN7S1775C33v13Ev");}
void  S1775C3 ::v14(){vfunc_called(this, "_ZN7S1775C33v14Ev");}
void  S1775C3 ::v15(){vfunc_called(this, "_ZN7S1775C33v15Ev");}
void  S1775C3 ::v16(){vfunc_called(this, "_ZN7S1775C33v16Ev");}
void  S1775C3 ::v17(){vfunc_called(this, "_ZN7S1775C33v17Ev");}
void  S1775C3 ::v18(){vfunc_called(this, "_ZN7S1775C33v18Ev");}
void  S1775C3 ::v19(){vfunc_called(this, "_ZN7S1775C33v19Ev");}
void  S1775C3 ::v20(){vfunc_called(this, "_ZN7S1775C33v20Ev");}
void  S1775C3 ::v21(){vfunc_called(this, "_ZN7S1775C33v21Ev");}
void  S1775C3 ::v22(){vfunc_called(this, "_ZN7S1775C33v22Ev");}
void  S1775C3 ::v23(){vfunc_called(this, "_ZN7S1775C33v23Ev");}
void  S1775C3 ::v24(){vfunc_called(this, "_ZN7S1775C33v24Ev");}
void  S1775C3 ::v25(){vfunc_called(this, "_ZN7S1775C33v25Ev");}
void  S1775C3 ::v26(){vfunc_called(this, "_ZN7S1775C33v26Ev");}
void  S1775C3 ::v27(){vfunc_called(this, "_ZN7S1775C33v27Ev");}
void  S1775C3 ::v28(){vfunc_called(this, "_ZN7S1775C33v28Ev");}
void  S1775C3 ::v29(){vfunc_called(this, "_ZN7S1775C33v29Ev");}
void  S1775C3 ::v30(){vfunc_called(this, "_ZN7S1775C33v30Ev");}
void  S1775C3 ::v31(){vfunc_called(this, "_ZN7S1775C33v31Ev");}
void  S1775C3 ::v32(){vfunc_called(this, "_ZN7S1775C33v32Ev");}
void  S1775C3 ::v33(){vfunc_called(this, "_ZN7S1775C33v33Ev");}
void  S1775C3 ::v34(){vfunc_called(this, "_ZN7S1775C33v34Ev");}
void  S1775C3 ::v35(){vfunc_called(this, "_ZN7S1775C33v35Ev");}
void  S1775C3 ::v36(){vfunc_called(this, "_ZN7S1775C33v36Ev");}
void  S1775C3 ::v37(){vfunc_called(this, "_ZN7S1775C33v37Ev");}
void  S1775C3 ::v38(){vfunc_called(this, "_ZN7S1775C33v38Ev");}
void  S1775C3 ::v39(){vfunc_called(this, "_ZN7S1775C33v39Ev");}
void  S1775C3 ::v40(){vfunc_called(this, "_ZN7S1775C33v40Ev");}
void  S1775C3 ::v41(){vfunc_called(this, "_ZN7S1775C33v41Ev");}
void  S1775C3 ::v42(){vfunc_called(this, "_ZN7S1775C33v42Ev");}
void  S1775C3 ::v43(){vfunc_called(this, "_ZN7S1775C33v43Ev");}
void  S1775C3 ::v44(){vfunc_called(this, "_ZN7S1775C33v44Ev");}
void  S1775C3 ::v45(){vfunc_called(this, "_ZN7S1775C33v45Ev");}
void  S1775C3 ::v46(){vfunc_called(this, "_ZN7S1775C33v46Ev");}
void  S1775C3 ::v47(){vfunc_called(this, "_ZN7S1775C33v47Ev");}
void  S1775C3 ::v48(){vfunc_called(this, "_ZN7S1775C33v48Ev");}
void  S1775C3 ::v49(){vfunc_called(this, "_ZN7S1775C33v49Ev");}
void  S1775C3 ::v50(){vfunc_called(this, "_ZN7S1775C33v50Ev");}
void  S1775C3 ::v51(){vfunc_called(this, "_ZN7S1775C33v51Ev");}
void  S1775C3 ::v52(){vfunc_called(this, "_ZN7S1775C33v52Ev");}
void  S1775C3 ::v53(){vfunc_called(this, "_ZN7S1775C33v53Ev");}
void  S1775C3 ::v54(){vfunc_called(this, "_ZN7S1775C33v54Ev");}
void  S1775C3 ::v55(){vfunc_called(this, "_ZN7S1775C33v55Ev");}
void  S1775C3 ::v56(){vfunc_called(this, "_ZN7S1775C33v56Ev");}
void  S1775C3 ::v57(){vfunc_called(this, "_ZN7S1775C33v57Ev");}
void  S1775C3 ::v58(){vfunc_called(this, "_ZN7S1775C33v58Ev");}
void  S1775C3 ::v59(){vfunc_called(this, "_ZN7S1775C33v59Ev");}
void  S1775C3 ::v60(){vfunc_called(this, "_ZN7S1775C33v60Ev");}
void  S1775C3 ::v61(){vfunc_called(this, "_ZN7S1775C33v61Ev");}
S1775C3 ::~S1775C3(){ note_dtor("S1775C3", this);} // tgen
S1775C3 ::S1775C3(){ note_ctor("S1775C3", this);} // tgen

static void Test_S1775C3()
{
  extern Class_Descriptor cd_S1775C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1775C3, buf);
    S1775C3 *dp, &lv = *(dp=new (buf) S1775C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1775C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1775C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1775C3");
    test_class_info(&lv, &cd_S1775C3);
    dp->~S1775C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1775C3(Test_S1775C3, "S1775C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1775C3C1Ev();
extern void _ZN7S1775C3D1Ev();
Name_Map name_map_S1775C3[] = {
  NSPAIR(_ZN7S1775C3C1Ev),
  NSPAIR(_ZN7S1775C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1775C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1775C3[];
extern void _ZN7S1775C3D1Ev();
extern void _ZN7S1775C3D0Ev();
extern void _ZN7S1775C33v12Ev();
extern void _ZN7S1775C33v13Ev();
extern void _ZN7S1775C33v14Ev();
extern void _ZN7S1775C33v15Ev();
extern void _ZN7S1775C33v16Ev();
extern void _ZN7S1775C33v17Ev();
extern void _ZN7S1775C33v18Ev();
extern void _ZN7S1775C33v19Ev();
extern void _ZN7S1775C33v20Ev();
extern void _ZN7S1775C33v21Ev();
extern void _ZN7S1775C33v22Ev();
extern void _ZN7S1775C33v23Ev();
extern void _ZN7S1775C33v24Ev();
extern void _ZN7S1775C33v25Ev();
extern void _ZN7S1775C33v26Ev();
extern void _ZN7S1775C33v27Ev();
extern void _ZN7S1775C33v28Ev();
extern void _ZN7S1775C33v29Ev();
extern void _ZN7S1775C33v30Ev();
extern void _ZN7S1775C33v31Ev();
extern void _ZN7S1775C33v32Ev();
extern void _ZN7S1775C33v33Ev();
extern void _ZN7S1775C33v34Ev();
extern void _ZN7S1775C33v35Ev();
extern void _ZN7S1775C33v36Ev();
extern void _ZN7S1775C33v37Ev();
extern void _ZN7S1775C33v38Ev();
extern void _ZN7S1775C33v39Ev();
extern void _ZN7S1775C33v40Ev();
extern void _ZN7S1775C33v41Ev();
extern void _ZN7S1775C33v42Ev();
extern void _ZN7S1775C33v43Ev();
extern void _ZN7S1775C33v44Ev();
extern void _ZN7S1775C33v45Ev();
extern void _ZN7S1775C33v46Ev();
extern void _ZN7S1775C33v47Ev();
extern void _ZN7S1775C33v48Ev();
extern void _ZN7S1775C33v49Ev();
extern void _ZN7S1775C33v50Ev();
extern void _ZN7S1775C33v51Ev();
extern void _ZN7S1775C33v52Ev();
extern void _ZN7S1775C33v53Ev();
extern void _ZN7S1775C33v54Ev();
extern void _ZN7S1775C33v55Ev();
extern void _ZN7S1775C33v56Ev();
extern void _ZN7S1775C33v57Ev();
extern void _ZN7S1775C33v58Ev();
extern void _ZN7S1775C33v59Ev();
extern void _ZN7S1775C33v60Ev();
extern void _ZN7S1775C33v61Ev();
static  VTBL_ENTRY vtc_S1775C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1775C3[0]),
  (VTBL_ENTRY)&_ZN7S1775C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1775C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v61Ev,
};
extern VTBL_ENTRY _ZTI7S1775C3[];
extern  VTBL_ENTRY _ZTV7S1775C3[];
Class_Descriptor cd_S1775C3 = {  "S1775C3", // class name
  bases_S1775C3, 1,
  &(vtc_S1775C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1775C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1775C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1775C2  : S1775C3 {
  virtual void  v62(); // _ZN7S1775C23v62Ev
  ~S1775C2(); // tgen
  S1775C2(); // tgen
};
//SIG(-1 S1775C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1775C2 ::v62(){vfunc_called(this, "_ZN7S1775C23v62Ev");}
S1775C2 ::~S1775C2(){ note_dtor("S1775C2", this);} // tgen
S1775C2 ::S1775C2(){ note_ctor("S1775C2", this);} // tgen

static void Test_S1775C2()
{
  extern Class_Descriptor cd_S1775C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1775C2, buf);
    S1775C2 *dp, &lv = *(dp=new (buf) S1775C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1775C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1775C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1775C3*), 0, "S1775C2");
    check_base_class_offset(lv, (S1775C3*), 0, "S1775C2");
    test_class_info(&lv, &cd_S1775C2);
    dp->~S1775C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1775C2(Test_S1775C2, "S1775C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1775C2C1Ev();
extern void _ZN7S1775C2D1Ev();
Name_Map name_map_S1775C2[] = {
  NSPAIR(_ZN7S1775C2C1Ev),
  NSPAIR(_ZN7S1775C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1775C3;
extern VTBL_ENTRY _ZTI7S1775C3[];
extern  VTBL_ENTRY _ZTV7S1775C3[];
static Base_Class bases_S1775C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1775C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1775C2[];
extern void _ZN7S1775C2D1Ev();
extern void _ZN7S1775C2D0Ev();
extern void _ZN7S1775C33v12Ev();
extern void _ZN7S1775C33v13Ev();
extern void _ZN7S1775C33v14Ev();
extern void _ZN7S1775C33v15Ev();
extern void _ZN7S1775C33v16Ev();
extern void _ZN7S1775C33v17Ev();
extern void _ZN7S1775C33v18Ev();
extern void _ZN7S1775C33v19Ev();
extern void _ZN7S1775C33v20Ev();
extern void _ZN7S1775C33v21Ev();
extern void _ZN7S1775C33v22Ev();
extern void _ZN7S1775C33v23Ev();
extern void _ZN7S1775C33v24Ev();
extern void _ZN7S1775C33v25Ev();
extern void _ZN7S1775C33v26Ev();
extern void _ZN7S1775C33v27Ev();
extern void _ZN7S1775C33v28Ev();
extern void _ZN7S1775C33v29Ev();
extern void _ZN7S1775C33v30Ev();
extern void _ZN7S1775C33v31Ev();
extern void _ZN7S1775C33v32Ev();
extern void _ZN7S1775C33v33Ev();
extern void _ZN7S1775C33v34Ev();
extern void _ZN7S1775C33v35Ev();
extern void _ZN7S1775C33v36Ev();
extern void _ZN7S1775C33v37Ev();
extern void _ZN7S1775C33v38Ev();
extern void _ZN7S1775C33v39Ev();
extern void _ZN7S1775C33v40Ev();
extern void _ZN7S1775C33v41Ev();
extern void _ZN7S1775C33v42Ev();
extern void _ZN7S1775C33v43Ev();
extern void _ZN7S1775C33v44Ev();
extern void _ZN7S1775C33v45Ev();
extern void _ZN7S1775C33v46Ev();
extern void _ZN7S1775C33v47Ev();
extern void _ZN7S1775C33v48Ev();
extern void _ZN7S1775C33v49Ev();
extern void _ZN7S1775C33v50Ev();
extern void _ZN7S1775C33v51Ev();
extern void _ZN7S1775C33v52Ev();
extern void _ZN7S1775C33v53Ev();
extern void _ZN7S1775C33v54Ev();
extern void _ZN7S1775C33v55Ev();
extern void _ZN7S1775C33v56Ev();
extern void _ZN7S1775C33v57Ev();
extern void _ZN7S1775C33v58Ev();
extern void _ZN7S1775C33v59Ev();
extern void _ZN7S1775C33v60Ev();
extern void _ZN7S1775C33v61Ev();
extern void _ZN7S1775C23v62Ev();
static  VTBL_ENTRY vtc_S1775C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1775C2[0]),
  (VTBL_ENTRY)&_ZN7S1775C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1775C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1775C23v62Ev,
};
extern VTBL_ENTRY _ZTI7S1775C2[];
extern  VTBL_ENTRY _ZTV7S1775C2[];
Class_Descriptor cd_S1775C2 = {  "S1775C2", // class name
  bases_S1775C2, 2,
  &(vtc_S1775C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1775C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1775C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1775C1  : S1775C2 {
  virtual void  v1(); // _ZN7S1775C12v1Ev
  virtual void  v2(); // _ZN7S1775C12v2Ev
  virtual void  v3(); // _ZN7S1775C12v3Ev
  virtual void  v4(); // _ZN7S1775C12v4Ev
  virtual void  v5(); // _ZN7S1775C12v5Ev
  virtual void  v6(); // _ZN7S1775C12v6Ev
  virtual void  v7(); // _ZN7S1775C12v7Ev
  virtual void  v8(); // _ZN7S1775C12v8Ev
  virtual void  v9(); // _ZN7S1775C12v9Ev
  virtual void  v10(); // _ZN7S1775C13v10Ev
  virtual void  v11(); // _ZN7S1775C13v11Ev
  ~S1775C1(); // tgen
  S1775C1(); // tgen
};
//SIG(1 S1775C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61} v62} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


void  S1775C1 ::v1(){vfunc_called(this, "_ZN7S1775C12v1Ev");}
void  S1775C1 ::v2(){vfunc_called(this, "_ZN7S1775C12v2Ev");}
void  S1775C1 ::v3(){vfunc_called(this, "_ZN7S1775C12v3Ev");}
void  S1775C1 ::v4(){vfunc_called(this, "_ZN7S1775C12v4Ev");}
void  S1775C1 ::v5(){vfunc_called(this, "_ZN7S1775C12v5Ev");}
void  S1775C1 ::v6(){vfunc_called(this, "_ZN7S1775C12v6Ev");}
void  S1775C1 ::v7(){vfunc_called(this, "_ZN7S1775C12v7Ev");}
void  S1775C1 ::v8(){vfunc_called(this, "_ZN7S1775C12v8Ev");}
void  S1775C1 ::v9(){vfunc_called(this, "_ZN7S1775C12v9Ev");}
void  S1775C1 ::v10(){vfunc_called(this, "_ZN7S1775C13v10Ev");}
void  S1775C1 ::v11(){vfunc_called(this, "_ZN7S1775C13v11Ev");}
S1775C1 ::~S1775C1(){ note_dtor("S1775C1", this);} // tgen
S1775C1 ::S1775C1(){ note_ctor("S1775C1", this);} // tgen

static void Test_S1775C1()
{
  extern Class_Descriptor cd_S1775C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1775C1, buf);
    S1775C1 *dp, &lv = *(dp=new (buf) S1775C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1775C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1775C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1775C3*)(S1775C2*), 0, "S1775C1");
    check_base_class_offset(lv, (S1775C3*)(S1775C2*), 0, "S1775C1");
    check_base_class_offset(lv, (S1775C2*), 0, "S1775C1");
    test_class_info(&lv, &cd_S1775C1);
    dp->~S1775C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1775C1(Test_S1775C1, "S1775C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1775C1C1Ev();
extern void _ZN7S1775C1D1Ev();
Name_Map name_map_S1775C1[] = {
  NSPAIR(_ZN7S1775C1C1Ev),
  NSPAIR(_ZN7S1775C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1775C3;
extern VTBL_ENTRY _ZTI7S1775C3[];
extern  VTBL_ENTRY _ZTV7S1775C3[];
extern Class_Descriptor cd_S1775C2;
extern VTBL_ENTRY _ZTI7S1775C2[];
extern  VTBL_ENTRY _ZTV7S1775C2[];
static Base_Class bases_S1775C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1775C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1775C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1775C1[];
extern void _ZN7S1775C1D1Ev();
extern void _ZN7S1775C1D0Ev();
extern void _ZN7S1775C33v12Ev();
extern void _ZN7S1775C33v13Ev();
extern void _ZN7S1775C33v14Ev();
extern void _ZN7S1775C33v15Ev();
extern void _ZN7S1775C33v16Ev();
extern void _ZN7S1775C33v17Ev();
extern void _ZN7S1775C33v18Ev();
extern void _ZN7S1775C33v19Ev();
extern void _ZN7S1775C33v20Ev();
extern void _ZN7S1775C33v21Ev();
extern void _ZN7S1775C33v22Ev();
extern void _ZN7S1775C33v23Ev();
extern void _ZN7S1775C33v24Ev();
extern void _ZN7S1775C33v25Ev();
extern void _ZN7S1775C33v26Ev();
extern void _ZN7S1775C33v27Ev();
extern void _ZN7S1775C33v28Ev();
extern void _ZN7S1775C33v29Ev();
extern void _ZN7S1775C33v30Ev();
extern void _ZN7S1775C33v31Ev();
extern void _ZN7S1775C33v32Ev();
extern void _ZN7S1775C33v33Ev();
extern void _ZN7S1775C33v34Ev();
extern void _ZN7S1775C33v35Ev();
extern void _ZN7S1775C33v36Ev();
extern void _ZN7S1775C33v37Ev();
extern void _ZN7S1775C33v38Ev();
extern void _ZN7S1775C33v39Ev();
extern void _ZN7S1775C33v40Ev();
extern void _ZN7S1775C33v41Ev();
extern void _ZN7S1775C33v42Ev();
extern void _ZN7S1775C33v43Ev();
extern void _ZN7S1775C33v44Ev();
extern void _ZN7S1775C33v45Ev();
extern void _ZN7S1775C33v46Ev();
extern void _ZN7S1775C33v47Ev();
extern void _ZN7S1775C33v48Ev();
extern void _ZN7S1775C33v49Ev();
extern void _ZN7S1775C33v50Ev();
extern void _ZN7S1775C33v51Ev();
extern void _ZN7S1775C33v52Ev();
extern void _ZN7S1775C33v53Ev();
extern void _ZN7S1775C33v54Ev();
extern void _ZN7S1775C33v55Ev();
extern void _ZN7S1775C33v56Ev();
extern void _ZN7S1775C33v57Ev();
extern void _ZN7S1775C33v58Ev();
extern void _ZN7S1775C33v59Ev();
extern void _ZN7S1775C33v60Ev();
extern void _ZN7S1775C33v61Ev();
extern void _ZN7S1775C23v62Ev();
extern void _ZN7S1775C12v1Ev();
extern void _ZN7S1775C12v2Ev();
extern void _ZN7S1775C12v3Ev();
extern void _ZN7S1775C12v4Ev();
extern void _ZN7S1775C12v5Ev();
extern void _ZN7S1775C12v6Ev();
extern void _ZN7S1775C12v7Ev();
extern void _ZN7S1775C12v8Ev();
extern void _ZN7S1775C12v9Ev();
extern void _ZN7S1775C13v10Ev();
extern void _ZN7S1775C13v11Ev();
static  VTBL_ENTRY vtc_S1775C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1775C1[0]),
  (VTBL_ENTRY)&_ZN7S1775C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1775C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1775C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1775C23v62Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1775C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1775C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1775C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S1775C1[];
extern  VTBL_ENTRY _ZTV7S1775C1[];
Class_Descriptor cd_S1775C1 = {  "S1775C1", // class name
  bases_S1775C1, 3,
  &(vtc_S1775C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1775C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1775C1),66, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4273C3  {
  virtual  ~S4273C3(); // _ZN7S4273C3D1Ev
  virtual void  v14(); // _ZN7S4273C33v14Ev
  virtual void  v15(); // _ZN7S4273C33v15Ev
  virtual void  v16(); // _ZN7S4273C33v16Ev
  S4273C3(); // tgen
};
//SIG(-1 S4273C3) C1{ vd v1 v2 v3}


 S4273C3 ::~S4273C3(){ note_dtor("S4273C3", this);}
void  S4273C3 ::v14(){vfunc_called(this, "_ZN7S4273C33v14Ev");}
void  S4273C3 ::v15(){vfunc_called(this, "_ZN7S4273C33v15Ev");}
void  S4273C3 ::v16(){vfunc_called(this, "_ZN7S4273C33v16Ev");}
S4273C3 ::S4273C3(){ note_ctor("S4273C3", this);} // tgen

static void Test_S4273C3()
{
  extern Class_Descriptor cd_S4273C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4273C3, buf);
    S4273C3 *dp, &lv = *(dp=new (buf) S4273C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4273C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4273C3)");
    test_class_info(&lv, &cd_S4273C3);
    dp->~S4273C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4273C3(Test_S4273C3, "S4273C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4273C3C1Ev();
extern void _ZN7S4273C3D1Ev();
Name_Map name_map_S4273C3[] = {
  NSPAIR(_ZN7S4273C3C1Ev),
  NSPAIR(_ZN7S4273C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4273C3[];
extern void _ZN7S4273C3D1Ev();
extern void _ZN7S4273C3D0Ev();
extern void _ZN7S4273C33v14Ev();
extern void _ZN7S4273C33v15Ev();
extern void _ZN7S4273C33v16Ev();
static  VTBL_ENTRY vtc_S4273C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4273C3[0]),
  (VTBL_ENTRY)&_ZN7S4273C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4273C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S4273C3[];
extern  VTBL_ENTRY _ZTV7S4273C3[];
Class_Descriptor cd_S4273C3 = {  "S4273C3", // class name
  0,0,//no base classes
  &(vtc_S4273C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4273C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4273C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4273C4  {
  virtual  ~S4273C4(); // _ZN7S4273C4D1Ev
  virtual void  v17(); // _ZN7S4273C43v17Ev
  virtual void  v18(); // _ZN7S4273C43v18Ev
  S4273C4(); // tgen
};
//SIG(-1 S4273C4) C1{ vd v1 v2}


 S4273C4 ::~S4273C4(){ note_dtor("S4273C4", this);}
void  S4273C4 ::v17(){vfunc_called(this, "_ZN7S4273C43v17Ev");}
void  S4273C4 ::v18(){vfunc_called(this, "_ZN7S4273C43v18Ev");}
S4273C4 ::S4273C4(){ note_ctor("S4273C4", this);} // tgen

static void Test_S4273C4()
{
  extern Class_Descriptor cd_S4273C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4273C4, buf);
    S4273C4 *dp, &lv = *(dp=new (buf) S4273C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4273C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4273C4)");
    test_class_info(&lv, &cd_S4273C4);
    dp->~S4273C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4273C4(Test_S4273C4, "S4273C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4273C4C1Ev();
extern void _ZN7S4273C4D1Ev();
Name_Map name_map_S4273C4[] = {
  NSPAIR(_ZN7S4273C4C1Ev),
  NSPAIR(_ZN7S4273C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4273C4[];
extern void _ZN7S4273C4D1Ev();
extern void _ZN7S4273C4D0Ev();
extern void _ZN7S4273C43v17Ev();
extern void _ZN7S4273C43v18Ev();
static  VTBL_ENTRY vtc_S4273C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4273C4[0]),
  (VTBL_ENTRY)&_ZN7S4273C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4273C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4273C43v17Ev,
  (VTBL_ENTRY)&_ZN7S4273C43v18Ev,
};
extern VTBL_ENTRY _ZTI7S4273C4[];
extern  VTBL_ENTRY _ZTV7S4273C4[];
Class_Descriptor cd_S4273C4 = {  "S4273C4", // class name
  0,0,//no base classes
  &(vtc_S4273C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4273C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4273C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4273C2  : S4273C3 , S4273C4 {
  void *s4273c2f0;
  ::S1409C9_nt s4273c2f1;
  void *s4273c2f2[3];
  ::S2265C26 s4273c2f3;
  char s4273c2f4[33];
  virtual  ~S4273C2(); // _ZN7S4273C2D1Ev
  virtual void  v19(); // _ZN7S4273C23v19Ev
  virtual void  v20(); // _ZN7S4273C23v20Ev
  virtual void  v21(); // _ZN7S4273C23v21Ev
  virtual void  v22(); // _ZN7S4273C23v22Ev
  virtual void  v23(); // _ZN7S4273C23v23Ev
  virtual void  v24(); // _ZN7S4273C23v24Ev
  virtual void  v25(); // _ZN7S4273C23v25Ev
  virtual void  v26(); // _ZN7S4273C23v26Ev
  virtual void  v27(); // _ZN7S4273C23v27Ev
  virtual void  v28(); // _ZN7S4273C23v28Ev
  virtual void  v29(); // _ZN7S4273C23v29Ev
  virtual void  v30(); // _ZN7S4273C23v30Ev
  virtual void  v31(); // _ZN7S4273C23v31Ev
  virtual void  v32(); // _ZN7S4273C23v32Ev
  virtual void  v33(); // _ZN7S4273C23v33Ev
  virtual void  v34(); // _ZN7S4273C23v34Ev
  virtual void  v35(); // _ZN7S4273C23v35Ev
  virtual void  v36(); // _ZN7S4273C23v36Ev
  virtual void  v37(); // _ZN7S4273C23v37Ev
  virtual void  v38(); // _ZN7S4273C23v38Ev
  virtual void  v39(); // _ZN7S4273C23v39Ev
  virtual void  v40(); // _ZN7S4273C23v40Ev
  S4273C2(); // tgen
};
//SIG(-1 S4273C2) C1{ BC2{ vd v23 v24 v25} BC3{ vd v26 v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC4{ m Fi} Fp[3] FC5{ m Fp Fi FC6{ m} FC7{ m}} Fc[33]}


 S4273C2 ::~S4273C2(){ note_dtor("S4273C2", this);}
void  S4273C2 ::v19(){vfunc_called(this, "_ZN7S4273C23v19Ev");}
void  S4273C2 ::v20(){vfunc_called(this, "_ZN7S4273C23v20Ev");}
void  S4273C2 ::v21(){vfunc_called(this, "_ZN7S4273C23v21Ev");}
void  S4273C2 ::v22(){vfunc_called(this, "_ZN7S4273C23v22Ev");}
void  S4273C2 ::v23(){vfunc_called(this, "_ZN7S4273C23v23Ev");}
void  S4273C2 ::v24(){vfunc_called(this, "_ZN7S4273C23v24Ev");}
void  S4273C2 ::v25(){vfunc_called(this, "_ZN7S4273C23v25Ev");}
void  S4273C2 ::v26(){vfunc_called(this, "_ZN7S4273C23v26Ev");}
void  S4273C2 ::v27(){vfunc_called(this, "_ZN7S4273C23v27Ev");}
void  S4273C2 ::v28(){vfunc_called(this, "_ZN7S4273C23v28Ev");}
void  S4273C2 ::v29(){vfunc_called(this, "_ZN7S4273C23v29Ev");}
void  S4273C2 ::v30(){vfunc_called(this, "_ZN7S4273C23v30Ev");}
void  S4273C2 ::v31(){vfunc_called(this, "_ZN7S4273C23v31Ev");}
void  S4273C2 ::v32(){vfunc_called(this, "_ZN7S4273C23v32Ev");}
void  S4273C2 ::v33(){vfunc_called(this, "_ZN7S4273C23v33Ev");}
void  S4273C2 ::v34(){vfunc_called(this, "_ZN7S4273C23v34Ev");}
void  S4273C2 ::v35(){vfunc_called(this, "_ZN7S4273C23v35Ev");}
void  S4273C2 ::v36(){vfunc_called(this, "_ZN7S4273C23v36Ev");}
void  S4273C2 ::v37(){vfunc_called(this, "_ZN7S4273C23v37Ev");}
void  S4273C2 ::v38(){vfunc_called(this, "_ZN7S4273C23v38Ev");}
void  S4273C2 ::v39(){vfunc_called(this, "_ZN7S4273C23v39Ev");}
void  S4273C2 ::v40(){vfunc_called(this, "_ZN7S4273C23v40Ev");}
S4273C2 ::S4273C2(){ note_ctor("S4273C2", this);} // tgen

static void Test_S4273C2()
{
  extern Class_Descriptor cd_S4273C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S4273C2, buf);
    S4273C2 *dp, &lv = *(dp=new (buf) S4273C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S4273C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4273C2)");
    check_base_class_offset(lv, (S4273C3*), 0, "S4273C2");
    check_base_class_offset(lv, (S4273C4*), ABISELECT(8,4), "S4273C2");
    check_field_offset(lv, s4273c2f0, ABISELECT(16,8), "S4273C2.s4273c2f0");
    check_field_offset(lv, s4273c2f1, ABISELECT(24,12), "S4273C2.s4273c2f1");
    check_field_offset(lv, s4273c2f2, ABISELECT(32,16), "S4273C2.s4273c2f2");
    check_field_offset(lv, s4273c2f3, ABISELECT(56,28), "S4273C2.s4273c2f3");
    check_field_offset(lv, s4273c2f4, ABISELECT(72,40), "S4273C2.s4273c2f4");
    test_class_info(&lv, &cd_S4273C2);
    dp->~S4273C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4273C2(Test_S4273C2, "S4273C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S4273C2C1Ev();
extern void _ZN7S4273C2D1Ev();
Name_Map name_map_S4273C2[] = {
  NSPAIR(_ZN7S4273C2C1Ev),
  NSPAIR(_ZN7S4273C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4273C3;
extern VTBL_ENTRY _ZTI7S4273C3[];
extern  VTBL_ENTRY _ZTV7S4273C3[];
extern Class_Descriptor cd_S4273C4;
extern VTBL_ENTRY _ZTI7S4273C4[];
extern  VTBL_ENTRY _ZTV7S4273C4[];
static Base_Class bases_S4273C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4273C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4273C4,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4273C2[];
extern void _ZN7S4273C2D1Ev();
extern void _ZN7S4273C2D0Ev();
extern void _ZN7S4273C33v14Ev();
extern void _ZN7S4273C33v15Ev();
extern void _ZN7S4273C33v16Ev();
extern void _ZN7S4273C23v19Ev();
extern void _ZN7S4273C23v20Ev();
extern void _ZN7S4273C23v21Ev();
extern void _ZN7S4273C23v22Ev();
extern void _ZN7S4273C23v23Ev();
extern void _ZN7S4273C23v24Ev();
extern void _ZN7S4273C23v25Ev();
extern void _ZN7S4273C23v26Ev();
extern void _ZN7S4273C23v27Ev();
extern void _ZN7S4273C23v28Ev();
extern void _ZN7S4273C23v29Ev();
extern void _ZN7S4273C23v30Ev();
extern void _ZN7S4273C23v31Ev();
extern void _ZN7S4273C23v32Ev();
extern void _ZN7S4273C23v33Ev();
extern void _ZN7S4273C23v34Ev();
extern void _ZN7S4273C23v35Ev();
extern void _ZN7S4273C23v36Ev();
extern void _ZN7S4273C23v37Ev();
extern void _ZN7S4273C23v38Ev();
extern void _ZN7S4273C23v39Ev();
extern void _ZN7S4273C23v40Ev();
extern void ABISELECT(_ZThn8_N7S4273C2D1Ev,_ZThn4_N7S4273C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S4273C2D0Ev,_ZThn4_N7S4273C2D0Ev)();
extern void _ZN7S4273C43v17Ev();
extern void _ZN7S4273C43v18Ev();
static  VTBL_ENTRY vtc_S4273C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4273C2[0]),
  (VTBL_ENTRY)&_ZN7S4273C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4273C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v35Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v40Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S4273C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4273C2D1Ev,_ZThn4_N7S4273C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4273C2D0Ev,_ZThn4_N7S4273C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4273C43v17Ev,
  (VTBL_ENTRY)&_ZN7S4273C43v18Ev,
};
extern VTBL_ENTRY _ZTI7S4273C2[];
extern  VTBL_ENTRY _ZTV7S4273C2[];
Class_Descriptor cd_S4273C2 = {  "S4273C2", // class name
  bases_S4273C2, 2,
  &(vtc_S4273C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S4273C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4273C2),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4273C9  {
  virtual  ~S4273C9(); // _ZN7S4273C9D1Ev
  virtual void  v41(); // _ZN7S4273C93v41Ev
  virtual void  v42(); // _ZN7S4273C93v42Ev
  virtual void  v43(); // _ZN7S4273C93v43Ev
  virtual void  v44(); // _ZN7S4273C93v44Ev
  virtual void  v45(); // _ZN7S4273C93v45Ev
  virtual void  v46(); // _ZN7S4273C93v46Ev
  S4273C9(); // tgen
};
//SIG(-1 S4273C9) C1{ vd v1 v2 v3 v4 v5 v6}


 S4273C9 ::~S4273C9(){ note_dtor("S4273C9", this);}
void  S4273C9 ::v41(){vfunc_called(this, "_ZN7S4273C93v41Ev");}
void  S4273C9 ::v42(){vfunc_called(this, "_ZN7S4273C93v42Ev");}
void  S4273C9 ::v43(){vfunc_called(this, "_ZN7S4273C93v43Ev");}
void  S4273C9 ::v44(){vfunc_called(this, "_ZN7S4273C93v44Ev");}
void  S4273C9 ::v45(){vfunc_called(this, "_ZN7S4273C93v45Ev");}
void  S4273C9 ::v46(){vfunc_called(this, "_ZN7S4273C93v46Ev");}
S4273C9 ::S4273C9(){ note_ctor("S4273C9", this);} // tgen

static void Test_S4273C9()
{
  extern Class_Descriptor cd_S4273C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4273C9, buf);
    S4273C9 *dp, &lv = *(dp=new (buf) S4273C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4273C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4273C9)");
    test_class_info(&lv, &cd_S4273C9);
    dp->~S4273C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4273C9(Test_S4273C9, "S4273C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4273C9C1Ev();
extern void _ZN7S4273C9D1Ev();
Name_Map name_map_S4273C9[] = {
  NSPAIR(_ZN7S4273C9C1Ev),
  NSPAIR(_ZN7S4273C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4273C9[];
extern void _ZN7S4273C9D1Ev();
extern void _ZN7S4273C9D0Ev();
extern void _ZN7S4273C93v41Ev();
extern void _ZN7S4273C93v42Ev();
extern void _ZN7S4273C93v43Ev();
extern void _ZN7S4273C93v44Ev();
extern void _ZN7S4273C93v45Ev();
extern void _ZN7S4273C93v46Ev();
static  VTBL_ENTRY vtc_S4273C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4273C9[0]),
  (VTBL_ENTRY)&_ZN7S4273C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4273C9D0Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v41Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v42Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v43Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v44Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v45Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v46Ev,
};
extern VTBL_ENTRY _ZTI7S4273C9[];
extern  VTBL_ENTRY _ZTV7S4273C9[];
Class_Descriptor cd_S4273C9 = {  "S4273C9", // class name
  0,0,//no base classes
  &(vtc_S4273C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4273C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4273C9),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4273C1  : S4273C2 , S4273C9 {
  void *s4273c1f0;
  virtual  ~S4273C1(); // _ZN7S4273C1D1Ev
  virtual void  v1(); // _ZN7S4273C12v1Ev
  virtual void  v2(); // _ZN7S4273C12v2Ev
  virtual void  v3(); // _ZN7S4273C12v3Ev
  virtual void  v4(); // _ZN7S4273C12v4Ev
  virtual void  v5(); // _ZN7S4273C12v5Ev
  virtual void  v6(); // _ZN7S4273C12v6Ev
  virtual void  v7(); // _ZN7S4273C12v7Ev
  virtual void  v8(); // _ZN7S4273C12v8Ev
  virtual void  v9(); // _ZN7S4273C12v9Ev
  virtual void  v10(); // _ZN7S4273C13v10Ev
  virtual void  v11(); // _ZN7S4273C13v11Ev
  virtual void  v12(); // _ZN7S4273C13v12Ev
  virtual void  v13(); // _ZN7S4273C13v13Ev
  S4273C1(); // tgen
};
//SIG(1 S4273C1) C1{ BC2{ BC3{ vd v14 v15 v16} BC4{ vd v17 v18} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 Fp FC5{ m Fi} Fp[3] FC6{ m Fp Fi FC7{ m} FC8{ m}} Fc[33]} BC9{ vd v41 v42 v43 v44 v45 v46} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp}


 S4273C1 ::~S4273C1(){ note_dtor("S4273C1", this);}
void  S4273C1 ::v1(){vfunc_called(this, "_ZN7S4273C12v1Ev");}
void  S4273C1 ::v2(){vfunc_called(this, "_ZN7S4273C12v2Ev");}
void  S4273C1 ::v3(){vfunc_called(this, "_ZN7S4273C12v3Ev");}
void  S4273C1 ::v4(){vfunc_called(this, "_ZN7S4273C12v4Ev");}
void  S4273C1 ::v5(){vfunc_called(this, "_ZN7S4273C12v5Ev");}
void  S4273C1 ::v6(){vfunc_called(this, "_ZN7S4273C12v6Ev");}
void  S4273C1 ::v7(){vfunc_called(this, "_ZN7S4273C12v7Ev");}
void  S4273C1 ::v8(){vfunc_called(this, "_ZN7S4273C12v8Ev");}
void  S4273C1 ::v9(){vfunc_called(this, "_ZN7S4273C12v9Ev");}
void  S4273C1 ::v10(){vfunc_called(this, "_ZN7S4273C13v10Ev");}
void  S4273C1 ::v11(){vfunc_called(this, "_ZN7S4273C13v11Ev");}
void  S4273C1 ::v12(){vfunc_called(this, "_ZN7S4273C13v12Ev");}
void  S4273C1 ::v13(){vfunc_called(this, "_ZN7S4273C13v13Ev");}
S4273C1 ::S4273C1(){ note_ctor("S4273C1", this);} // tgen

static void Test_S4273C1()
{
  extern Class_Descriptor cd_S4273C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4273C1, buf);
    S4273C1 *dp, &lv = *(dp=new (buf) S4273C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4273C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4273C1)");
    check_base_class_offset(lv, (S4273C3*)(S4273C2*), 0, "S4273C1");
    check_base_class_offset(lv, (S4273C4*)(S4273C2*), ABISELECT(8,4), "S4273C1");
    check_base_class_offset(lv, (S4273C2*), 0, "S4273C1");
    check_base_class_offset(lv, (S4273C9*), ABISELECT(112,76), "S4273C1");
    check_field_offset(lv, s4273c1f0, ABISELECT(120,80), "S4273C1.s4273c1f0");
    test_class_info(&lv, &cd_S4273C1);
    dp->~S4273C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4273C1(Test_S4273C1, "S4273C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4273C1C1Ev();
extern void _ZN7S4273C1D1Ev();
Name_Map name_map_S4273C1[] = {
  NSPAIR(_ZN7S4273C1C1Ev),
  NSPAIR(_ZN7S4273C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4273C3;
extern VTBL_ENTRY _ZTI7S4273C3[];
extern  VTBL_ENTRY _ZTV7S4273C3[];
extern Class_Descriptor cd_S4273C4;
extern VTBL_ENTRY _ZTI7S4273C4[];
extern  VTBL_ENTRY _ZTV7S4273C4[];
extern Class_Descriptor cd_S4273C2;
extern VTBL_ENTRY _ZTI7S4273C2[];
extern  VTBL_ENTRY _ZTV7S4273C2[];
extern Class_Descriptor cd_S4273C9;
extern VTBL_ENTRY _ZTI7S4273C9[];
extern  VTBL_ENTRY _ZTV7S4273C9[];
static Base_Class bases_S4273C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4273C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4273C4,    ABISELECT(8,4), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S4273C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4273C9,    ABISELECT(112,76), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4273C1[];
extern void _ZN7S4273C1D1Ev();
extern void _ZN7S4273C1D0Ev();
extern void _ZN7S4273C33v14Ev();
extern void _ZN7S4273C33v15Ev();
extern void _ZN7S4273C33v16Ev();
extern void _ZN7S4273C23v19Ev();
extern void _ZN7S4273C23v20Ev();
extern void _ZN7S4273C23v21Ev();
extern void _ZN7S4273C23v22Ev();
extern void _ZN7S4273C23v23Ev();
extern void _ZN7S4273C23v24Ev();
extern void _ZN7S4273C23v25Ev();
extern void _ZN7S4273C23v26Ev();
extern void _ZN7S4273C23v27Ev();
extern void _ZN7S4273C23v28Ev();
extern void _ZN7S4273C23v29Ev();
extern void _ZN7S4273C23v30Ev();
extern void _ZN7S4273C23v31Ev();
extern void _ZN7S4273C23v32Ev();
extern void _ZN7S4273C23v33Ev();
extern void _ZN7S4273C23v34Ev();
extern void _ZN7S4273C23v35Ev();
extern void _ZN7S4273C23v36Ev();
extern void _ZN7S4273C23v37Ev();
extern void _ZN7S4273C23v38Ev();
extern void _ZN7S4273C23v39Ev();
extern void _ZN7S4273C23v40Ev();
extern void _ZN7S4273C12v1Ev();
extern void _ZN7S4273C12v2Ev();
extern void _ZN7S4273C12v3Ev();
extern void _ZN7S4273C12v4Ev();
extern void _ZN7S4273C12v5Ev();
extern void _ZN7S4273C12v6Ev();
extern void _ZN7S4273C12v7Ev();
extern void _ZN7S4273C12v8Ev();
extern void _ZN7S4273C12v9Ev();
extern void _ZN7S4273C13v10Ev();
extern void _ZN7S4273C13v11Ev();
extern void _ZN7S4273C13v12Ev();
extern void _ZN7S4273C13v13Ev();
extern void ABISELECT(_ZThn8_N7S4273C1D1Ev,_ZThn4_N7S4273C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S4273C1D0Ev,_ZThn4_N7S4273C1D0Ev)();
extern void _ZN7S4273C43v17Ev();
extern void _ZN7S4273C43v18Ev();
extern void ABISELECT(_ZThn112_N7S4273C1D1Ev,_ZThn76_N7S4273C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S4273C1D0Ev,_ZThn76_N7S4273C1D0Ev)();
extern void _ZN7S4273C93v41Ev();
extern void _ZN7S4273C93v42Ev();
extern void _ZN7S4273C93v43Ev();
extern void _ZN7S4273C93v44Ev();
extern void _ZN7S4273C93v45Ev();
extern void _ZN7S4273C93v46Ev();
static  VTBL_ENTRY vtc_S4273C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4273C1[0]),
  (VTBL_ENTRY)&_ZN7S4273C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4273C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4273C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v19Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v20Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v21Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v22Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v23Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v24Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v27Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v28Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v29Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v30Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v31Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v32Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v33Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v34Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v35Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v36Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v37Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v38Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v39Ev,
  (VTBL_ENTRY)&_ZN7S4273C23v40Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4273C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4273C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4273C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4273C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4273C13v13Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S4273C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4273C1D1Ev,_ZThn4_N7S4273C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4273C1D0Ev,_ZThn4_N7S4273C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4273C43v17Ev,
  (VTBL_ENTRY)&_ZN7S4273C43v18Ev,
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S4273C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S4273C1D1Ev,_ZThn76_N7S4273C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S4273C1D0Ev,_ZThn76_N7S4273C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4273C93v41Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v42Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v43Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v44Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v45Ev,
  (VTBL_ENTRY)&_ZN7S4273C93v46Ev,
};
extern VTBL_ENTRY _ZTI7S4273C1[];
extern  VTBL_ENTRY _ZTV7S4273C1[];
Class_Descriptor cd_S4273C1 = {  "S4273C1", // class name
  bases_S4273C1, 4,
  &(vtc_S4273C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4273C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4273C1),58, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1773C3  : S1778C4_nt {
  virtual void  v11(); // _ZN7S1773C33v11Ev
  virtual void  v12(); // _ZN7S1773C33v12Ev
  virtual void  v13(); // _ZN7S1773C33v13Ev
  virtual void  v14(); // _ZN7S1773C33v14Ev
  virtual void  v15(); // _ZN7S1773C33v15Ev
  virtual void  v16(); // _ZN7S1773C33v16Ev
  virtual void  v17(); // _ZN7S1773C33v17Ev
  virtual void  v18(); // _ZN7S1773C33v18Ev
  virtual void  v19(); // _ZN7S1773C33v19Ev
  virtual void  v20(); // _ZN7S1773C33v20Ev
  virtual void  v21(); // _ZN7S1773C33v21Ev
  virtual void  v22(); // _ZN7S1773C33v22Ev
  virtual void  v23(); // _ZN7S1773C33v23Ev
  virtual void  v24(); // _ZN7S1773C33v24Ev
  virtual void  v25(); // _ZN7S1773C33v25Ev
  virtual void  v26(); // _ZN7S1773C33v26Ev
  virtual void  v27(); // _ZN7S1773C33v27Ev
  virtual void  v28(); // _ZN7S1773C33v28Ev
  virtual void  v29(); // _ZN7S1773C33v29Ev
  virtual void  v30(); // _ZN7S1773C33v30Ev
  virtual void  v31(); // _ZN7S1773C33v31Ev
  virtual void  v32(); // _ZN7S1773C33v32Ev
  virtual void  v33(); // _ZN7S1773C33v33Ev
  virtual void  v34(); // _ZN7S1773C33v34Ev
  virtual void  v35(); // _ZN7S1773C33v35Ev
  virtual void  v36(); // _ZN7S1773C33v36Ev
  virtual void  v37(); // _ZN7S1773C33v37Ev
  virtual void  v38(); // _ZN7S1773C33v38Ev
  virtual void  v39(); // _ZN7S1773C33v39Ev
  virtual void  v40(); // _ZN7S1773C33v40Ev
  virtual void  v41(); // _ZN7S1773C33v41Ev
  virtual void  v42(); // _ZN7S1773C33v42Ev
  virtual void  v43(); // _ZN7S1773C33v43Ev
  virtual void  v44(); // _ZN7S1773C33v44Ev
  virtual void  v45(); // _ZN7S1773C33v45Ev
  virtual void  v46(); // _ZN7S1773C33v46Ev
  virtual void  v47(); // _ZN7S1773C33v47Ev
  virtual void  v48(); // _ZN7S1773C33v48Ev
  virtual void  v49(); // _ZN7S1773C33v49Ev
  virtual void  v50(); // _ZN7S1773C33v50Ev
  virtual void  v51(); // _ZN7S1773C33v51Ev
  virtual void  v52(); // _ZN7S1773C33v52Ev
  virtual void  v53(); // _ZN7S1773C33v53Ev
  virtual void  v54(); // _ZN7S1773C33v54Ev
  virtual void  v55(); // _ZN7S1773C33v55Ev
  virtual void  v56(); // _ZN7S1773C33v56Ev
  virtual void  v57(); // _ZN7S1773C33v57Ev
  virtual void  v58(); // _ZN7S1773C33v58Ev
  virtual void  v59(); // _ZN7S1773C33v59Ev
  virtual void  v60(); // _ZN7S1773C33v60Ev
  ~S1773C3(); // tgen
  S1773C3(); // tgen
};
//SIG(-1 S1773C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1773C3 ::v11(){vfunc_called(this, "_ZN7S1773C33v11Ev");}
void  S1773C3 ::v12(){vfunc_called(this, "_ZN7S1773C33v12Ev");}
void  S1773C3 ::v13(){vfunc_called(this, "_ZN7S1773C33v13Ev");}
void  S1773C3 ::v14(){vfunc_called(this, "_ZN7S1773C33v14Ev");}
void  S1773C3 ::v15(){vfunc_called(this, "_ZN7S1773C33v15Ev");}
void  S1773C3 ::v16(){vfunc_called(this, "_ZN7S1773C33v16Ev");}
void  S1773C3 ::v17(){vfunc_called(this, "_ZN7S1773C33v17Ev");}
void  S1773C3 ::v18(){vfunc_called(this, "_ZN7S1773C33v18Ev");}
void  S1773C3 ::v19(){vfunc_called(this, "_ZN7S1773C33v19Ev");}
void  S1773C3 ::v20(){vfunc_called(this, "_ZN7S1773C33v20Ev");}
void  S1773C3 ::v21(){vfunc_called(this, "_ZN7S1773C33v21Ev");}
void  S1773C3 ::v22(){vfunc_called(this, "_ZN7S1773C33v22Ev");}
void  S1773C3 ::v23(){vfunc_called(this, "_ZN7S1773C33v23Ev");}
void  S1773C3 ::v24(){vfunc_called(this, "_ZN7S1773C33v24Ev");}
void  S1773C3 ::v25(){vfunc_called(this, "_ZN7S1773C33v25Ev");}
void  S1773C3 ::v26(){vfunc_called(this, "_ZN7S1773C33v26Ev");}
void  S1773C3 ::v27(){vfunc_called(this, "_ZN7S1773C33v27Ev");}
void  S1773C3 ::v28(){vfunc_called(this, "_ZN7S1773C33v28Ev");}
void  S1773C3 ::v29(){vfunc_called(this, "_ZN7S1773C33v29Ev");}
void  S1773C3 ::v30(){vfunc_called(this, "_ZN7S1773C33v30Ev");}
void  S1773C3 ::v31(){vfunc_called(this, "_ZN7S1773C33v31Ev");}
void  S1773C3 ::v32(){vfunc_called(this, "_ZN7S1773C33v32Ev");}
void  S1773C3 ::v33(){vfunc_called(this, "_ZN7S1773C33v33Ev");}
void  S1773C3 ::v34(){vfunc_called(this, "_ZN7S1773C33v34Ev");}
void  S1773C3 ::v35(){vfunc_called(this, "_ZN7S1773C33v35Ev");}
void  S1773C3 ::v36(){vfunc_called(this, "_ZN7S1773C33v36Ev");}
void  S1773C3 ::v37(){vfunc_called(this, "_ZN7S1773C33v37Ev");}
void  S1773C3 ::v38(){vfunc_called(this, "_ZN7S1773C33v38Ev");}
void  S1773C3 ::v39(){vfunc_called(this, "_ZN7S1773C33v39Ev");}
void  S1773C3 ::v40(){vfunc_called(this, "_ZN7S1773C33v40Ev");}
void  S1773C3 ::v41(){vfunc_called(this, "_ZN7S1773C33v41Ev");}
void  S1773C3 ::v42(){vfunc_called(this, "_ZN7S1773C33v42Ev");}
void  S1773C3 ::v43(){vfunc_called(this, "_ZN7S1773C33v43Ev");}
void  S1773C3 ::v44(){vfunc_called(this, "_ZN7S1773C33v44Ev");}
void  S1773C3 ::v45(){vfunc_called(this, "_ZN7S1773C33v45Ev");}
void  S1773C3 ::v46(){vfunc_called(this, "_ZN7S1773C33v46Ev");}
void  S1773C3 ::v47(){vfunc_called(this, "_ZN7S1773C33v47Ev");}
void  S1773C3 ::v48(){vfunc_called(this, "_ZN7S1773C33v48Ev");}
void  S1773C3 ::v49(){vfunc_called(this, "_ZN7S1773C33v49Ev");}
void  S1773C3 ::v50(){vfunc_called(this, "_ZN7S1773C33v50Ev");}
void  S1773C3 ::v51(){vfunc_called(this, "_ZN7S1773C33v51Ev");}
void  S1773C3 ::v52(){vfunc_called(this, "_ZN7S1773C33v52Ev");}
void  S1773C3 ::v53(){vfunc_called(this, "_ZN7S1773C33v53Ev");}
void  S1773C3 ::v54(){vfunc_called(this, "_ZN7S1773C33v54Ev");}
void  S1773C3 ::v55(){vfunc_called(this, "_ZN7S1773C33v55Ev");}
void  S1773C3 ::v56(){vfunc_called(this, "_ZN7S1773C33v56Ev");}
void  S1773C3 ::v57(){vfunc_called(this, "_ZN7S1773C33v57Ev");}
void  S1773C3 ::v58(){vfunc_called(this, "_ZN7S1773C33v58Ev");}
void  S1773C3 ::v59(){vfunc_called(this, "_ZN7S1773C33v59Ev");}
void  S1773C3 ::v60(){vfunc_called(this, "_ZN7S1773C33v60Ev");}
S1773C3 ::~S1773C3(){ note_dtor("S1773C3", this);} // tgen
S1773C3 ::S1773C3(){ note_ctor("S1773C3", this);} // tgen

static void Test_S1773C3()
{
  extern Class_Descriptor cd_S1773C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1773C3, buf);
    S1773C3 *dp, &lv = *(dp=new (buf) S1773C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1773C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1773C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1773C3");
    test_class_info(&lv, &cd_S1773C3);
    dp->~S1773C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1773C3(Test_S1773C3, "S1773C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1773C3C1Ev();
extern void _ZN7S1773C3D1Ev();
Name_Map name_map_S1773C3[] = {
  NSPAIR(_ZN7S1773C3C1Ev),
  NSPAIR(_ZN7S1773C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1773C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1773C3[];
extern void _ZN7S1773C3D1Ev();
extern void _ZN7S1773C3D0Ev();
extern void _ZN7S1773C33v11Ev();
extern void _ZN7S1773C33v12Ev();
extern void _ZN7S1773C33v13Ev();
extern void _ZN7S1773C33v14Ev();
extern void _ZN7S1773C33v15Ev();
extern void _ZN7S1773C33v16Ev();
extern void _ZN7S1773C33v17Ev();
extern void _ZN7S1773C33v18Ev();
extern void _ZN7S1773C33v19Ev();
extern void _ZN7S1773C33v20Ev();
extern void _ZN7S1773C33v21Ev();
extern void _ZN7S1773C33v22Ev();
extern void _ZN7S1773C33v23Ev();
extern void _ZN7S1773C33v24Ev();
extern void _ZN7S1773C33v25Ev();
extern void _ZN7S1773C33v26Ev();
extern void _ZN7S1773C33v27Ev();
extern void _ZN7S1773C33v28Ev();
extern void _ZN7S1773C33v29Ev();
extern void _ZN7S1773C33v30Ev();
extern void _ZN7S1773C33v31Ev();
extern void _ZN7S1773C33v32Ev();
extern void _ZN7S1773C33v33Ev();
extern void _ZN7S1773C33v34Ev();
extern void _ZN7S1773C33v35Ev();
extern void _ZN7S1773C33v36Ev();
extern void _ZN7S1773C33v37Ev();
extern void _ZN7S1773C33v38Ev();
extern void _ZN7S1773C33v39Ev();
extern void _ZN7S1773C33v40Ev();
extern void _ZN7S1773C33v41Ev();
extern void _ZN7S1773C33v42Ev();
extern void _ZN7S1773C33v43Ev();
extern void _ZN7S1773C33v44Ev();
extern void _ZN7S1773C33v45Ev();
extern void _ZN7S1773C33v46Ev();
extern void _ZN7S1773C33v47Ev();
extern void _ZN7S1773C33v48Ev();
extern void _ZN7S1773C33v49Ev();
extern void _ZN7S1773C33v50Ev();
extern void _ZN7S1773C33v51Ev();
extern void _ZN7S1773C33v52Ev();
extern void _ZN7S1773C33v53Ev();
extern void _ZN7S1773C33v54Ev();
extern void _ZN7S1773C33v55Ev();
extern void _ZN7S1773C33v56Ev();
extern void _ZN7S1773C33v57Ev();
extern void _ZN7S1773C33v58Ev();
extern void _ZN7S1773C33v59Ev();
extern void _ZN7S1773C33v60Ev();
static  VTBL_ENTRY vtc_S1773C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1773C3[0]),
  (VTBL_ENTRY)&_ZN7S1773C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1773C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v60Ev,
};
extern VTBL_ENTRY _ZTI7S1773C3[];
extern  VTBL_ENTRY _ZTV7S1773C3[];
Class_Descriptor cd_S1773C3 = {  "S1773C3", // class name
  bases_S1773C3, 1,
  &(vtc_S1773C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1773C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1773C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1773C2  : S1773C3 {
  virtual void  v61(); // _ZN7S1773C23v61Ev
  ~S1773C2(); // tgen
  S1773C2(); // tgen
};
//SIG(-1 S1773C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1773C2 ::v61(){vfunc_called(this, "_ZN7S1773C23v61Ev");}
S1773C2 ::~S1773C2(){ note_dtor("S1773C2", this);} // tgen
S1773C2 ::S1773C2(){ note_ctor("S1773C2", this);} // tgen

static void Test_S1773C2()
{
  extern Class_Descriptor cd_S1773C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1773C2, buf);
    S1773C2 *dp, &lv = *(dp=new (buf) S1773C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1773C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1773C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1773C3*), 0, "S1773C2");
    check_base_class_offset(lv, (S1773C3*), 0, "S1773C2");
    test_class_info(&lv, &cd_S1773C2);
    dp->~S1773C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1773C2(Test_S1773C2, "S1773C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1773C2C1Ev();
extern void _ZN7S1773C2D1Ev();
Name_Map name_map_S1773C2[] = {
  NSPAIR(_ZN7S1773C2C1Ev),
  NSPAIR(_ZN7S1773C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1773C3;
extern VTBL_ENTRY _ZTI7S1773C3[];
extern  VTBL_ENTRY _ZTV7S1773C3[];
static Base_Class bases_S1773C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1773C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1773C2[];
extern void _ZN7S1773C2D1Ev();
extern void _ZN7S1773C2D0Ev();
extern void _ZN7S1773C33v11Ev();
extern void _ZN7S1773C33v12Ev();
extern void _ZN7S1773C33v13Ev();
extern void _ZN7S1773C33v14Ev();
extern void _ZN7S1773C33v15Ev();
extern void _ZN7S1773C33v16Ev();
extern void _ZN7S1773C33v17Ev();
extern void _ZN7S1773C33v18Ev();
extern void _ZN7S1773C33v19Ev();
extern void _ZN7S1773C33v20Ev();
extern void _ZN7S1773C33v21Ev();
extern void _ZN7S1773C33v22Ev();
extern void _ZN7S1773C33v23Ev();
extern void _ZN7S1773C33v24Ev();
extern void _ZN7S1773C33v25Ev();
extern void _ZN7S1773C33v26Ev();
extern void _ZN7S1773C33v27Ev();
extern void _ZN7S1773C33v28Ev();
extern void _ZN7S1773C33v29Ev();
extern void _ZN7S1773C33v30Ev();
extern void _ZN7S1773C33v31Ev();
extern void _ZN7S1773C33v32Ev();
extern void _ZN7S1773C33v33Ev();
extern void _ZN7S1773C33v34Ev();
extern void _ZN7S1773C33v35Ev();
extern void _ZN7S1773C33v36Ev();
extern void _ZN7S1773C33v37Ev();
extern void _ZN7S1773C33v38Ev();
extern void _ZN7S1773C33v39Ev();
extern void _ZN7S1773C33v40Ev();
extern void _ZN7S1773C33v41Ev();
extern void _ZN7S1773C33v42Ev();
extern void _ZN7S1773C33v43Ev();
extern void _ZN7S1773C33v44Ev();
extern void _ZN7S1773C33v45Ev();
extern void _ZN7S1773C33v46Ev();
extern void _ZN7S1773C33v47Ev();
extern void _ZN7S1773C33v48Ev();
extern void _ZN7S1773C33v49Ev();
extern void _ZN7S1773C33v50Ev();
extern void _ZN7S1773C33v51Ev();
extern void _ZN7S1773C33v52Ev();
extern void _ZN7S1773C33v53Ev();
extern void _ZN7S1773C33v54Ev();
extern void _ZN7S1773C33v55Ev();
extern void _ZN7S1773C33v56Ev();
extern void _ZN7S1773C33v57Ev();
extern void _ZN7S1773C33v58Ev();
extern void _ZN7S1773C33v59Ev();
extern void _ZN7S1773C33v60Ev();
extern void _ZN7S1773C23v61Ev();
static  VTBL_ENTRY vtc_S1773C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1773C2[0]),
  (VTBL_ENTRY)&_ZN7S1773C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1773C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1773C23v61Ev,
};
extern VTBL_ENTRY _ZTI7S1773C2[];
extern  VTBL_ENTRY _ZTV7S1773C2[];
Class_Descriptor cd_S1773C2 = {  "S1773C2", // class name
  bases_S1773C2, 2,
  &(vtc_S1773C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1773C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1773C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1773C1  : S1773C2 {
  virtual void  v1(); // _ZN7S1773C12v1Ev
  virtual void  v2(); // _ZN7S1773C12v2Ev
  virtual void  v3(); // _ZN7S1773C12v3Ev
  virtual void  v4(); // _ZN7S1773C12v4Ev
  virtual void  v5(); // _ZN7S1773C12v5Ev
  virtual void  v6(); // _ZN7S1773C12v6Ev
  virtual void  v7(); // _ZN7S1773C12v7Ev
  virtual void  v8(); // _ZN7S1773C12v8Ev
  virtual void  v9(); // _ZN7S1773C12v9Ev
  virtual void  v10(); // _ZN7S1773C13v10Ev
  ~S1773C1(); // tgen
  S1773C1(); // tgen
};
//SIG(1 S1773C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60} v61} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S1773C1 ::v1(){vfunc_called(this, "_ZN7S1773C12v1Ev");}
void  S1773C1 ::v2(){vfunc_called(this, "_ZN7S1773C12v2Ev");}
void  S1773C1 ::v3(){vfunc_called(this, "_ZN7S1773C12v3Ev");}
void  S1773C1 ::v4(){vfunc_called(this, "_ZN7S1773C12v4Ev");}
void  S1773C1 ::v5(){vfunc_called(this, "_ZN7S1773C12v5Ev");}
void  S1773C1 ::v6(){vfunc_called(this, "_ZN7S1773C12v6Ev");}
void  S1773C1 ::v7(){vfunc_called(this, "_ZN7S1773C12v7Ev");}
void  S1773C1 ::v8(){vfunc_called(this, "_ZN7S1773C12v8Ev");}
void  S1773C1 ::v9(){vfunc_called(this, "_ZN7S1773C12v9Ev");}
void  S1773C1 ::v10(){vfunc_called(this, "_ZN7S1773C13v10Ev");}
S1773C1 ::~S1773C1(){ note_dtor("S1773C1", this);} // tgen
S1773C1 ::S1773C1(){ note_ctor("S1773C1", this);} // tgen

static void Test_S1773C1()
{
  extern Class_Descriptor cd_S1773C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1773C1, buf);
    S1773C1 *dp, &lv = *(dp=new (buf) S1773C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1773C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1773C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1773C3*)(S1773C2*), 0, "S1773C1");
    check_base_class_offset(lv, (S1773C3*)(S1773C2*), 0, "S1773C1");
    check_base_class_offset(lv, (S1773C2*), 0, "S1773C1");
    test_class_info(&lv, &cd_S1773C1);
    dp->~S1773C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1773C1(Test_S1773C1, "S1773C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1773C1C1Ev();
extern void _ZN7S1773C1D1Ev();
Name_Map name_map_S1773C1[] = {
  NSPAIR(_ZN7S1773C1C1Ev),
  NSPAIR(_ZN7S1773C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1773C3;
extern VTBL_ENTRY _ZTI7S1773C3[];
extern  VTBL_ENTRY _ZTV7S1773C3[];
extern Class_Descriptor cd_S1773C2;
extern VTBL_ENTRY _ZTI7S1773C2[];
extern  VTBL_ENTRY _ZTV7S1773C2[];
static Base_Class bases_S1773C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1773C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1773C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1773C1[];
extern void _ZN7S1773C1D1Ev();
extern void _ZN7S1773C1D0Ev();
extern void _ZN7S1773C33v11Ev();
extern void _ZN7S1773C33v12Ev();
extern void _ZN7S1773C33v13Ev();
extern void _ZN7S1773C33v14Ev();
extern void _ZN7S1773C33v15Ev();
extern void _ZN7S1773C33v16Ev();
extern void _ZN7S1773C33v17Ev();
extern void _ZN7S1773C33v18Ev();
extern void _ZN7S1773C33v19Ev();
extern void _ZN7S1773C33v20Ev();
extern void _ZN7S1773C33v21Ev();
extern void _ZN7S1773C33v22Ev();
extern void _ZN7S1773C33v23Ev();
extern void _ZN7S1773C33v24Ev();
extern void _ZN7S1773C33v25Ev();
extern void _ZN7S1773C33v26Ev();
extern void _ZN7S1773C33v27Ev();
extern void _ZN7S1773C33v28Ev();
extern void _ZN7S1773C33v29Ev();
extern void _ZN7S1773C33v30Ev();
extern void _ZN7S1773C33v31Ev();
extern void _ZN7S1773C33v32Ev();
extern void _ZN7S1773C33v33Ev();
extern void _ZN7S1773C33v34Ev();
extern void _ZN7S1773C33v35Ev();
extern void _ZN7S1773C33v36Ev();
extern void _ZN7S1773C33v37Ev();
extern void _ZN7S1773C33v38Ev();
extern void _ZN7S1773C33v39Ev();
extern void _ZN7S1773C33v40Ev();
extern void _ZN7S1773C33v41Ev();
extern void _ZN7S1773C33v42Ev();
extern void _ZN7S1773C33v43Ev();
extern void _ZN7S1773C33v44Ev();
extern void _ZN7S1773C33v45Ev();
extern void _ZN7S1773C33v46Ev();
extern void _ZN7S1773C33v47Ev();
extern void _ZN7S1773C33v48Ev();
extern void _ZN7S1773C33v49Ev();
extern void _ZN7S1773C33v50Ev();
extern void _ZN7S1773C33v51Ev();
extern void _ZN7S1773C33v52Ev();
extern void _ZN7S1773C33v53Ev();
extern void _ZN7S1773C33v54Ev();
extern void _ZN7S1773C33v55Ev();
extern void _ZN7S1773C33v56Ev();
extern void _ZN7S1773C33v57Ev();
extern void _ZN7S1773C33v58Ev();
extern void _ZN7S1773C33v59Ev();
extern void _ZN7S1773C33v60Ev();
extern void _ZN7S1773C23v61Ev();
extern void _ZN7S1773C12v1Ev();
extern void _ZN7S1773C12v2Ev();
extern void _ZN7S1773C12v3Ev();
extern void _ZN7S1773C12v4Ev();
extern void _ZN7S1773C12v5Ev();
extern void _ZN7S1773C12v6Ev();
extern void _ZN7S1773C12v7Ev();
extern void _ZN7S1773C12v8Ev();
extern void _ZN7S1773C12v9Ev();
extern void _ZN7S1773C13v10Ev();
static  VTBL_ENTRY vtc_S1773C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1773C1[0]),
  (VTBL_ENTRY)&_ZN7S1773C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1773C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1773C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1773C23v61Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1773C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1773C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1773C1[];
extern  VTBL_ENTRY _ZTV7S1773C1[];
Class_Descriptor cd_S1773C1 = {  "S1773C1", // class name
  bases_S1773C1, 3,
  &(vtc_S1773C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1773C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1773C1),65, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1842C3  : S1778C4_nt {
  virtual void  v9(); // _ZN7S1842C32v9Ev
  virtual void  v10(); // _ZN7S1842C33v10Ev
  virtual void  v11(); // _ZN7S1842C33v11Ev
  virtual void  v12(); // _ZN7S1842C33v12Ev
  virtual void  v13(); // _ZN7S1842C33v13Ev
  virtual void  v14(); // _ZN7S1842C33v14Ev
  virtual void  v15(); // _ZN7S1842C33v15Ev
  virtual void  v16(); // _ZN7S1842C33v16Ev
  virtual void  v17(); // _ZN7S1842C33v17Ev
  virtual void  v18(); // _ZN7S1842C33v18Ev
  virtual void  v19(); // _ZN7S1842C33v19Ev
  virtual void  v20(); // _ZN7S1842C33v20Ev
  virtual void  v21(); // _ZN7S1842C33v21Ev
  virtual void  v22(); // _ZN7S1842C33v22Ev
  virtual void  v23(); // _ZN7S1842C33v23Ev
  virtual void  v24(); // _ZN7S1842C33v24Ev
  virtual void  v25(); // _ZN7S1842C33v25Ev
  virtual void  v26(); // _ZN7S1842C33v26Ev
  virtual void  v27(); // _ZN7S1842C33v27Ev
  virtual void  v28(); // _ZN7S1842C33v28Ev
  virtual void  v29(); // _ZN7S1842C33v29Ev
  virtual void  v30(); // _ZN7S1842C33v30Ev
  virtual void  v31(); // _ZN7S1842C33v31Ev
  virtual void  v32(); // _ZN7S1842C33v32Ev
  virtual void  v33(); // _ZN7S1842C33v33Ev
  virtual void  v34(); // _ZN7S1842C33v34Ev
  virtual void  v35(); // _ZN7S1842C33v35Ev
  virtual void  v36(); // _ZN7S1842C33v36Ev
  virtual void  v37(); // _ZN7S1842C33v37Ev
  virtual void  v38(); // _ZN7S1842C33v38Ev
  virtual void  v39(); // _ZN7S1842C33v39Ev
  virtual void  v40(); // _ZN7S1842C33v40Ev
  virtual void  v41(); // _ZN7S1842C33v41Ev
  virtual void  v42(); // _ZN7S1842C33v42Ev
  virtual void  v43(); // _ZN7S1842C33v43Ev
  virtual void  v44(); // _ZN7S1842C33v44Ev
  virtual void  v45(); // _ZN7S1842C33v45Ev
  virtual void  v46(); // _ZN7S1842C33v46Ev
  virtual void  v47(); // _ZN7S1842C33v47Ev
  virtual void  v48(); // _ZN7S1842C33v48Ev
  virtual void  v49(); // _ZN7S1842C33v49Ev
  virtual void  v50(); // _ZN7S1842C33v50Ev
  virtual void  v51(); // _ZN7S1842C33v51Ev
  virtual void  v52(); // _ZN7S1842C33v52Ev
  virtual void  v53(); // _ZN7S1842C33v53Ev
  virtual void  v54(); // _ZN7S1842C33v54Ev
  virtual void  v55(); // _ZN7S1842C33v55Ev
  virtual void  v56(); // _ZN7S1842C33v56Ev
  virtual void  v57(); // _ZN7S1842C33v57Ev
  virtual void  v58(); // _ZN7S1842C33v58Ev
  ~S1842C3(); // tgen
  S1842C3(); // tgen
};
//SIG(-1 S1842C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1842C3 ::v9(){vfunc_called(this, "_ZN7S1842C32v9Ev");}
void  S1842C3 ::v10(){vfunc_called(this, "_ZN7S1842C33v10Ev");}
void  S1842C3 ::v11(){vfunc_called(this, "_ZN7S1842C33v11Ev");}
void  S1842C3 ::v12(){vfunc_called(this, "_ZN7S1842C33v12Ev");}
void  S1842C3 ::v13(){vfunc_called(this, "_ZN7S1842C33v13Ev");}
void  S1842C3 ::v14(){vfunc_called(this, "_ZN7S1842C33v14Ev");}
void  S1842C3 ::v15(){vfunc_called(this, "_ZN7S1842C33v15Ev");}
void  S1842C3 ::v16(){vfunc_called(this, "_ZN7S1842C33v16Ev");}
void  S1842C3 ::v17(){vfunc_called(this, "_ZN7S1842C33v17Ev");}
void  S1842C3 ::v18(){vfunc_called(this, "_ZN7S1842C33v18Ev");}
void  S1842C3 ::v19(){vfunc_called(this, "_ZN7S1842C33v19Ev");}
void  S1842C3 ::v20(){vfunc_called(this, "_ZN7S1842C33v20Ev");}
void  S1842C3 ::v21(){vfunc_called(this, "_ZN7S1842C33v21Ev");}
void  S1842C3 ::v22(){vfunc_called(this, "_ZN7S1842C33v22Ev");}
void  S1842C3 ::v23(){vfunc_called(this, "_ZN7S1842C33v23Ev");}
void  S1842C3 ::v24(){vfunc_called(this, "_ZN7S1842C33v24Ev");}
void  S1842C3 ::v25(){vfunc_called(this, "_ZN7S1842C33v25Ev");}
void  S1842C3 ::v26(){vfunc_called(this, "_ZN7S1842C33v26Ev");}
void  S1842C3 ::v27(){vfunc_called(this, "_ZN7S1842C33v27Ev");}
void  S1842C3 ::v28(){vfunc_called(this, "_ZN7S1842C33v28Ev");}
void  S1842C3 ::v29(){vfunc_called(this, "_ZN7S1842C33v29Ev");}
void  S1842C3 ::v30(){vfunc_called(this, "_ZN7S1842C33v30Ev");}
void  S1842C3 ::v31(){vfunc_called(this, "_ZN7S1842C33v31Ev");}
void  S1842C3 ::v32(){vfunc_called(this, "_ZN7S1842C33v32Ev");}
void  S1842C3 ::v33(){vfunc_called(this, "_ZN7S1842C33v33Ev");}
void  S1842C3 ::v34(){vfunc_called(this, "_ZN7S1842C33v34Ev");}
void  S1842C3 ::v35(){vfunc_called(this, "_ZN7S1842C33v35Ev");}
void  S1842C3 ::v36(){vfunc_called(this, "_ZN7S1842C33v36Ev");}
void  S1842C3 ::v37(){vfunc_called(this, "_ZN7S1842C33v37Ev");}
void  S1842C3 ::v38(){vfunc_called(this, "_ZN7S1842C33v38Ev");}
void  S1842C3 ::v39(){vfunc_called(this, "_ZN7S1842C33v39Ev");}
void  S1842C3 ::v40(){vfunc_called(this, "_ZN7S1842C33v40Ev");}
void  S1842C3 ::v41(){vfunc_called(this, "_ZN7S1842C33v41Ev");}
void  S1842C3 ::v42(){vfunc_called(this, "_ZN7S1842C33v42Ev");}
void  S1842C3 ::v43(){vfunc_called(this, "_ZN7S1842C33v43Ev");}
void  S1842C3 ::v44(){vfunc_called(this, "_ZN7S1842C33v44Ev");}
void  S1842C3 ::v45(){vfunc_called(this, "_ZN7S1842C33v45Ev");}
void  S1842C3 ::v46(){vfunc_called(this, "_ZN7S1842C33v46Ev");}
void  S1842C3 ::v47(){vfunc_called(this, "_ZN7S1842C33v47Ev");}
void  S1842C3 ::v48(){vfunc_called(this, "_ZN7S1842C33v48Ev");}
void  S1842C3 ::v49(){vfunc_called(this, "_ZN7S1842C33v49Ev");}
void  S1842C3 ::v50(){vfunc_called(this, "_ZN7S1842C33v50Ev");}
void  S1842C3 ::v51(){vfunc_called(this, "_ZN7S1842C33v51Ev");}
void  S1842C3 ::v52(){vfunc_called(this, "_ZN7S1842C33v52Ev");}
void  S1842C3 ::v53(){vfunc_called(this, "_ZN7S1842C33v53Ev");}
void  S1842C3 ::v54(){vfunc_called(this, "_ZN7S1842C33v54Ev");}
void  S1842C3 ::v55(){vfunc_called(this, "_ZN7S1842C33v55Ev");}
void  S1842C3 ::v56(){vfunc_called(this, "_ZN7S1842C33v56Ev");}
void  S1842C3 ::v57(){vfunc_called(this, "_ZN7S1842C33v57Ev");}
void  S1842C3 ::v58(){vfunc_called(this, "_ZN7S1842C33v58Ev");}
S1842C3 ::~S1842C3(){ note_dtor("S1842C3", this);} // tgen
S1842C3 ::S1842C3(){ note_ctor("S1842C3", this);} // tgen

static void Test_S1842C3()
{
  extern Class_Descriptor cd_S1842C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1842C3, buf);
    S1842C3 *dp, &lv = *(dp=new (buf) S1842C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1842C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1842C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1842C3");
    test_class_info(&lv, &cd_S1842C3);
    dp->~S1842C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1842C3(Test_S1842C3, "S1842C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1842C3C1Ev();
extern void _ZN7S1842C3D1Ev();
Name_Map name_map_S1842C3[] = {
  NSPAIR(_ZN7S1842C3C1Ev),
  NSPAIR(_ZN7S1842C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1842C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1842C3[];
extern void _ZN7S1842C3D1Ev();
extern void _ZN7S1842C3D0Ev();
extern void _ZN7S1842C32v9Ev();
extern void _ZN7S1842C33v10Ev();
extern void _ZN7S1842C33v11Ev();
extern void _ZN7S1842C33v12Ev();
extern void _ZN7S1842C33v13Ev();
extern void _ZN7S1842C33v14Ev();
extern void _ZN7S1842C33v15Ev();
extern void _ZN7S1842C33v16Ev();
extern void _ZN7S1842C33v17Ev();
extern void _ZN7S1842C33v18Ev();
extern void _ZN7S1842C33v19Ev();
extern void _ZN7S1842C33v20Ev();
extern void _ZN7S1842C33v21Ev();
extern void _ZN7S1842C33v22Ev();
extern void _ZN7S1842C33v23Ev();
extern void _ZN7S1842C33v24Ev();
extern void _ZN7S1842C33v25Ev();
extern void _ZN7S1842C33v26Ev();
extern void _ZN7S1842C33v27Ev();
extern void _ZN7S1842C33v28Ev();
extern void _ZN7S1842C33v29Ev();
extern void _ZN7S1842C33v30Ev();
extern void _ZN7S1842C33v31Ev();
extern void _ZN7S1842C33v32Ev();
extern void _ZN7S1842C33v33Ev();
extern void _ZN7S1842C33v34Ev();
extern void _ZN7S1842C33v35Ev();
extern void _ZN7S1842C33v36Ev();
extern void _ZN7S1842C33v37Ev();
extern void _ZN7S1842C33v38Ev();
extern void _ZN7S1842C33v39Ev();
extern void _ZN7S1842C33v40Ev();
extern void _ZN7S1842C33v41Ev();
extern void _ZN7S1842C33v42Ev();
extern void _ZN7S1842C33v43Ev();
extern void _ZN7S1842C33v44Ev();
extern void _ZN7S1842C33v45Ev();
extern void _ZN7S1842C33v46Ev();
extern void _ZN7S1842C33v47Ev();
extern void _ZN7S1842C33v48Ev();
extern void _ZN7S1842C33v49Ev();
extern void _ZN7S1842C33v50Ev();
extern void _ZN7S1842C33v51Ev();
extern void _ZN7S1842C33v52Ev();
extern void _ZN7S1842C33v53Ev();
extern void _ZN7S1842C33v54Ev();
extern void _ZN7S1842C33v55Ev();
extern void _ZN7S1842C33v56Ev();
extern void _ZN7S1842C33v57Ev();
extern void _ZN7S1842C33v58Ev();
static  VTBL_ENTRY vtc_S1842C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1842C3[0]),
  (VTBL_ENTRY)&_ZN7S1842C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1842C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1842C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v58Ev,
};
extern VTBL_ENTRY _ZTI7S1842C3[];
extern  VTBL_ENTRY _ZTV7S1842C3[];
Class_Descriptor cd_S1842C3 = {  "S1842C3", // class name
  bases_S1842C3, 1,
  &(vtc_S1842C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1842C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1842C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1842C2  : S1842C3 {
  virtual void  v59(); // _ZN7S1842C23v59Ev
  ~S1842C2(); // tgen
  S1842C2(); // tgen
};
//SIG(-1 S1842C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1842C2 ::v59(){vfunc_called(this, "_ZN7S1842C23v59Ev");}
S1842C2 ::~S1842C2(){ note_dtor("S1842C2", this);} // tgen
S1842C2 ::S1842C2(){ note_ctor("S1842C2", this);} // tgen

static void Test_S1842C2()
{
  extern Class_Descriptor cd_S1842C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1842C2, buf);
    S1842C2 *dp, &lv = *(dp=new (buf) S1842C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1842C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1842C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1842C3*), 0, "S1842C2");
    check_base_class_offset(lv, (S1842C3*), 0, "S1842C2");
    test_class_info(&lv, &cd_S1842C2);
    dp->~S1842C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1842C2(Test_S1842C2, "S1842C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1842C2C1Ev();
extern void _ZN7S1842C2D1Ev();
Name_Map name_map_S1842C2[] = {
  NSPAIR(_ZN7S1842C2C1Ev),
  NSPAIR(_ZN7S1842C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1842C3;
extern VTBL_ENTRY _ZTI7S1842C3[];
extern  VTBL_ENTRY _ZTV7S1842C3[];
static Base_Class bases_S1842C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1842C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1842C2[];
extern void _ZN7S1842C2D1Ev();
extern void _ZN7S1842C2D0Ev();
extern void _ZN7S1842C32v9Ev();
extern void _ZN7S1842C33v10Ev();
extern void _ZN7S1842C33v11Ev();
extern void _ZN7S1842C33v12Ev();
extern void _ZN7S1842C33v13Ev();
extern void _ZN7S1842C33v14Ev();
extern void _ZN7S1842C33v15Ev();
extern void _ZN7S1842C33v16Ev();
extern void _ZN7S1842C33v17Ev();
extern void _ZN7S1842C33v18Ev();
extern void _ZN7S1842C33v19Ev();
extern void _ZN7S1842C33v20Ev();
extern void _ZN7S1842C33v21Ev();
extern void _ZN7S1842C33v22Ev();
extern void _ZN7S1842C33v23Ev();
extern void _ZN7S1842C33v24Ev();
extern void _ZN7S1842C33v25Ev();
extern void _ZN7S1842C33v26Ev();
extern void _ZN7S1842C33v27Ev();
extern void _ZN7S1842C33v28Ev();
extern void _ZN7S1842C33v29Ev();
extern void _ZN7S1842C33v30Ev();
extern void _ZN7S1842C33v31Ev();
extern void _ZN7S1842C33v32Ev();
extern void _ZN7S1842C33v33Ev();
extern void _ZN7S1842C33v34Ev();
extern void _ZN7S1842C33v35Ev();
extern void _ZN7S1842C33v36Ev();
extern void _ZN7S1842C33v37Ev();
extern void _ZN7S1842C33v38Ev();
extern void _ZN7S1842C33v39Ev();
extern void _ZN7S1842C33v40Ev();
extern void _ZN7S1842C33v41Ev();
extern void _ZN7S1842C33v42Ev();
extern void _ZN7S1842C33v43Ev();
extern void _ZN7S1842C33v44Ev();
extern void _ZN7S1842C33v45Ev();
extern void _ZN7S1842C33v46Ev();
extern void _ZN7S1842C33v47Ev();
extern void _ZN7S1842C33v48Ev();
extern void _ZN7S1842C33v49Ev();
extern void _ZN7S1842C33v50Ev();
extern void _ZN7S1842C33v51Ev();
extern void _ZN7S1842C33v52Ev();
extern void _ZN7S1842C33v53Ev();
extern void _ZN7S1842C33v54Ev();
extern void _ZN7S1842C33v55Ev();
extern void _ZN7S1842C33v56Ev();
extern void _ZN7S1842C33v57Ev();
extern void _ZN7S1842C33v58Ev();
extern void _ZN7S1842C23v59Ev();
static  VTBL_ENTRY vtc_S1842C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1842C2[0]),
  (VTBL_ENTRY)&_ZN7S1842C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1842C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1842C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1842C23v59Ev,
};
extern VTBL_ENTRY _ZTI7S1842C2[];
extern  VTBL_ENTRY _ZTV7S1842C2[];
Class_Descriptor cd_S1842C2 = {  "S1842C2", // class name
  bases_S1842C2, 2,
  &(vtc_S1842C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1842C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1842C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1842C1  : S1842C2 {
  virtual void  v1(); // _ZN7S1842C12v1Ev
  virtual void  v2(); // _ZN7S1842C12v2Ev
  virtual void  v3(); // _ZN7S1842C12v3Ev
  virtual void  v4(); // _ZN7S1842C12v4Ev
  virtual void  v5(); // _ZN7S1842C12v5Ev
  virtual void  v6(); // _ZN7S1842C12v6Ev
  virtual void  v7(); // _ZN7S1842C12v7Ev
  virtual void  v8(); // _ZN7S1842C12v8Ev
  ~S1842C1(); // tgen
  S1842C1(); // tgen
};
//SIG(1 S1842C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58} v59} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1842C1 ::v1(){vfunc_called(this, "_ZN7S1842C12v1Ev");}
void  S1842C1 ::v2(){vfunc_called(this, "_ZN7S1842C12v2Ev");}
void  S1842C1 ::v3(){vfunc_called(this, "_ZN7S1842C12v3Ev");}
void  S1842C1 ::v4(){vfunc_called(this, "_ZN7S1842C12v4Ev");}
void  S1842C1 ::v5(){vfunc_called(this, "_ZN7S1842C12v5Ev");}
void  S1842C1 ::v6(){vfunc_called(this, "_ZN7S1842C12v6Ev");}
void  S1842C1 ::v7(){vfunc_called(this, "_ZN7S1842C12v7Ev");}
void  S1842C1 ::v8(){vfunc_called(this, "_ZN7S1842C12v8Ev");}
S1842C1 ::~S1842C1(){ note_dtor("S1842C1", this);} // tgen
S1842C1 ::S1842C1(){ note_ctor("S1842C1", this);} // tgen

static void Test_S1842C1()
{
  extern Class_Descriptor cd_S1842C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1842C1, buf);
    S1842C1 *dp, &lv = *(dp=new (buf) S1842C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1842C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1842C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1842C3*)(S1842C2*), 0, "S1842C1");
    check_base_class_offset(lv, (S1842C3*)(S1842C2*), 0, "S1842C1");
    check_base_class_offset(lv, (S1842C2*), 0, "S1842C1");
    test_class_info(&lv, &cd_S1842C1);
    dp->~S1842C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1842C1(Test_S1842C1, "S1842C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1842C1C1Ev();
extern void _ZN7S1842C1D1Ev();
Name_Map name_map_S1842C1[] = {
  NSPAIR(_ZN7S1842C1C1Ev),
  NSPAIR(_ZN7S1842C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1842C3;
extern VTBL_ENTRY _ZTI7S1842C3[];
extern  VTBL_ENTRY _ZTV7S1842C3[];
extern Class_Descriptor cd_S1842C2;
extern VTBL_ENTRY _ZTI7S1842C2[];
extern  VTBL_ENTRY _ZTV7S1842C2[];
static Base_Class bases_S1842C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1842C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1842C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1842C1[];
extern void _ZN7S1842C1D1Ev();
extern void _ZN7S1842C1D0Ev();
extern void _ZN7S1842C32v9Ev();
extern void _ZN7S1842C33v10Ev();
extern void _ZN7S1842C33v11Ev();
extern void _ZN7S1842C33v12Ev();
extern void _ZN7S1842C33v13Ev();
extern void _ZN7S1842C33v14Ev();
extern void _ZN7S1842C33v15Ev();
extern void _ZN7S1842C33v16Ev();
extern void _ZN7S1842C33v17Ev();
extern void _ZN7S1842C33v18Ev();
extern void _ZN7S1842C33v19Ev();
extern void _ZN7S1842C33v20Ev();
extern void _ZN7S1842C33v21Ev();
extern void _ZN7S1842C33v22Ev();
extern void _ZN7S1842C33v23Ev();
extern void _ZN7S1842C33v24Ev();
extern void _ZN7S1842C33v25Ev();
extern void _ZN7S1842C33v26Ev();
extern void _ZN7S1842C33v27Ev();
extern void _ZN7S1842C33v28Ev();
extern void _ZN7S1842C33v29Ev();
extern void _ZN7S1842C33v30Ev();
extern void _ZN7S1842C33v31Ev();
extern void _ZN7S1842C33v32Ev();
extern void _ZN7S1842C33v33Ev();
extern void _ZN7S1842C33v34Ev();
extern void _ZN7S1842C33v35Ev();
extern void _ZN7S1842C33v36Ev();
extern void _ZN7S1842C33v37Ev();
extern void _ZN7S1842C33v38Ev();
extern void _ZN7S1842C33v39Ev();
extern void _ZN7S1842C33v40Ev();
extern void _ZN7S1842C33v41Ev();
extern void _ZN7S1842C33v42Ev();
extern void _ZN7S1842C33v43Ev();
extern void _ZN7S1842C33v44Ev();
extern void _ZN7S1842C33v45Ev();
extern void _ZN7S1842C33v46Ev();
extern void _ZN7S1842C33v47Ev();
extern void _ZN7S1842C33v48Ev();
extern void _ZN7S1842C33v49Ev();
extern void _ZN7S1842C33v50Ev();
extern void _ZN7S1842C33v51Ev();
extern void _ZN7S1842C33v52Ev();
extern void _ZN7S1842C33v53Ev();
extern void _ZN7S1842C33v54Ev();
extern void _ZN7S1842C33v55Ev();
extern void _ZN7S1842C33v56Ev();
extern void _ZN7S1842C33v57Ev();
extern void _ZN7S1842C33v58Ev();
extern void _ZN7S1842C23v59Ev();
extern void _ZN7S1842C12v1Ev();
extern void _ZN7S1842C12v2Ev();
extern void _ZN7S1842C12v3Ev();
extern void _ZN7S1842C12v4Ev();
extern void _ZN7S1842C12v5Ev();
extern void _ZN7S1842C12v6Ev();
extern void _ZN7S1842C12v7Ev();
extern void _ZN7S1842C12v8Ev();
static  VTBL_ENTRY vtc_S1842C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1842C1[0]),
  (VTBL_ENTRY)&_ZN7S1842C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1842C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1842C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1842C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1842C23v59Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1842C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1842C1[];
extern  VTBL_ENTRY _ZTV7S1842C1[];
Class_Descriptor cd_S1842C1 = {  "S1842C1", // class name
  bases_S1842C1, 3,
  &(vtc_S1842C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1842C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1842C1),63, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1837C3  : S1778C4_nt {
  virtual void  v8(); // _ZN7S1837C32v8Ev
  virtual void  v9(); // _ZN7S1837C32v9Ev
  virtual void  v10(); // _ZN7S1837C33v10Ev
  virtual void  v11(); // _ZN7S1837C33v11Ev
  virtual void  v12(); // _ZN7S1837C33v12Ev
  virtual void  v13(); // _ZN7S1837C33v13Ev
  virtual void  v14(); // _ZN7S1837C33v14Ev
  virtual void  v15(); // _ZN7S1837C33v15Ev
  virtual void  v16(); // _ZN7S1837C33v16Ev
  virtual void  v17(); // _ZN7S1837C33v17Ev
  virtual void  v18(); // _ZN7S1837C33v18Ev
  virtual void  v19(); // _ZN7S1837C33v19Ev
  virtual void  v20(); // _ZN7S1837C33v20Ev
  virtual void  v21(); // _ZN7S1837C33v21Ev
  virtual void  v22(); // _ZN7S1837C33v22Ev
  virtual void  v23(); // _ZN7S1837C33v23Ev
  virtual void  v24(); // _ZN7S1837C33v24Ev
  virtual void  v25(); // _ZN7S1837C33v25Ev
  virtual void  v26(); // _ZN7S1837C33v26Ev
  virtual void  v27(); // _ZN7S1837C33v27Ev
  virtual void  v28(); // _ZN7S1837C33v28Ev
  virtual void  v29(); // _ZN7S1837C33v29Ev
  virtual void  v30(); // _ZN7S1837C33v30Ev
  virtual void  v31(); // _ZN7S1837C33v31Ev
  virtual void  v32(); // _ZN7S1837C33v32Ev
  virtual void  v33(); // _ZN7S1837C33v33Ev
  virtual void  v34(); // _ZN7S1837C33v34Ev
  virtual void  v35(); // _ZN7S1837C33v35Ev
  virtual void  v36(); // _ZN7S1837C33v36Ev
  virtual void  v37(); // _ZN7S1837C33v37Ev
  virtual void  v38(); // _ZN7S1837C33v38Ev
  virtual void  v39(); // _ZN7S1837C33v39Ev
  virtual void  v40(); // _ZN7S1837C33v40Ev
  virtual void  v41(); // _ZN7S1837C33v41Ev
  virtual void  v42(); // _ZN7S1837C33v42Ev
  virtual void  v43(); // _ZN7S1837C33v43Ev
  virtual void  v44(); // _ZN7S1837C33v44Ev
  virtual void  v45(); // _ZN7S1837C33v45Ev
  virtual void  v46(); // _ZN7S1837C33v46Ev
  virtual void  v47(); // _ZN7S1837C33v47Ev
  virtual void  v48(); // _ZN7S1837C33v48Ev
  virtual void  v49(); // _ZN7S1837C33v49Ev
  virtual void  v50(); // _ZN7S1837C33v50Ev
  virtual void  v51(); // _ZN7S1837C33v51Ev
  virtual void  v52(); // _ZN7S1837C33v52Ev
  virtual void  v53(); // _ZN7S1837C33v53Ev
  virtual void  v54(); // _ZN7S1837C33v54Ev
  virtual void  v55(); // _ZN7S1837C33v55Ev
  virtual void  v56(); // _ZN7S1837C33v56Ev
  virtual void  v57(); // _ZN7S1837C33v57Ev
  ~S1837C3(); // tgen
  S1837C3(); // tgen
};
//SIG(-1 S1837C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1837C3 ::v8(){vfunc_called(this, "_ZN7S1837C32v8Ev");}
void  S1837C3 ::v9(){vfunc_called(this, "_ZN7S1837C32v9Ev");}
void  S1837C3 ::v10(){vfunc_called(this, "_ZN7S1837C33v10Ev");}
void  S1837C3 ::v11(){vfunc_called(this, "_ZN7S1837C33v11Ev");}
void  S1837C3 ::v12(){vfunc_called(this, "_ZN7S1837C33v12Ev");}
void  S1837C3 ::v13(){vfunc_called(this, "_ZN7S1837C33v13Ev");}
void  S1837C3 ::v14(){vfunc_called(this, "_ZN7S1837C33v14Ev");}
void  S1837C3 ::v15(){vfunc_called(this, "_ZN7S1837C33v15Ev");}
void  S1837C3 ::v16(){vfunc_called(this, "_ZN7S1837C33v16Ev");}
void  S1837C3 ::v17(){vfunc_called(this, "_ZN7S1837C33v17Ev");}
void  S1837C3 ::v18(){vfunc_called(this, "_ZN7S1837C33v18Ev");}
void  S1837C3 ::v19(){vfunc_called(this, "_ZN7S1837C33v19Ev");}
void  S1837C3 ::v20(){vfunc_called(this, "_ZN7S1837C33v20Ev");}
void  S1837C3 ::v21(){vfunc_called(this, "_ZN7S1837C33v21Ev");}
void  S1837C3 ::v22(){vfunc_called(this, "_ZN7S1837C33v22Ev");}
void  S1837C3 ::v23(){vfunc_called(this, "_ZN7S1837C33v23Ev");}
void  S1837C3 ::v24(){vfunc_called(this, "_ZN7S1837C33v24Ev");}
void  S1837C3 ::v25(){vfunc_called(this, "_ZN7S1837C33v25Ev");}
void  S1837C3 ::v26(){vfunc_called(this, "_ZN7S1837C33v26Ev");}
void  S1837C3 ::v27(){vfunc_called(this, "_ZN7S1837C33v27Ev");}
void  S1837C3 ::v28(){vfunc_called(this, "_ZN7S1837C33v28Ev");}
void  S1837C3 ::v29(){vfunc_called(this, "_ZN7S1837C33v29Ev");}
void  S1837C3 ::v30(){vfunc_called(this, "_ZN7S1837C33v30Ev");}
void  S1837C3 ::v31(){vfunc_called(this, "_ZN7S1837C33v31Ev");}
void  S1837C3 ::v32(){vfunc_called(this, "_ZN7S1837C33v32Ev");}
void  S1837C3 ::v33(){vfunc_called(this, "_ZN7S1837C33v33Ev");}
void  S1837C3 ::v34(){vfunc_called(this, "_ZN7S1837C33v34Ev");}
void  S1837C3 ::v35(){vfunc_called(this, "_ZN7S1837C33v35Ev");}
void  S1837C3 ::v36(){vfunc_called(this, "_ZN7S1837C33v36Ev");}
void  S1837C3 ::v37(){vfunc_called(this, "_ZN7S1837C33v37Ev");}
void  S1837C3 ::v38(){vfunc_called(this, "_ZN7S1837C33v38Ev");}
void  S1837C3 ::v39(){vfunc_called(this, "_ZN7S1837C33v39Ev");}
void  S1837C3 ::v40(){vfunc_called(this, "_ZN7S1837C33v40Ev");}
void  S1837C3 ::v41(){vfunc_called(this, "_ZN7S1837C33v41Ev");}
void  S1837C3 ::v42(){vfunc_called(this, "_ZN7S1837C33v42Ev");}
void  S1837C3 ::v43(){vfunc_called(this, "_ZN7S1837C33v43Ev");}
void  S1837C3 ::v44(){vfunc_called(this, "_ZN7S1837C33v44Ev");}
void  S1837C3 ::v45(){vfunc_called(this, "_ZN7S1837C33v45Ev");}
void  S1837C3 ::v46(){vfunc_called(this, "_ZN7S1837C33v46Ev");}
void  S1837C3 ::v47(){vfunc_called(this, "_ZN7S1837C33v47Ev");}
void  S1837C3 ::v48(){vfunc_called(this, "_ZN7S1837C33v48Ev");}
void  S1837C3 ::v49(){vfunc_called(this, "_ZN7S1837C33v49Ev");}
void  S1837C3 ::v50(){vfunc_called(this, "_ZN7S1837C33v50Ev");}
void  S1837C3 ::v51(){vfunc_called(this, "_ZN7S1837C33v51Ev");}
void  S1837C3 ::v52(){vfunc_called(this, "_ZN7S1837C33v52Ev");}
void  S1837C3 ::v53(){vfunc_called(this, "_ZN7S1837C33v53Ev");}
void  S1837C3 ::v54(){vfunc_called(this, "_ZN7S1837C33v54Ev");}
void  S1837C3 ::v55(){vfunc_called(this, "_ZN7S1837C33v55Ev");}
void  S1837C3 ::v56(){vfunc_called(this, "_ZN7S1837C33v56Ev");}
void  S1837C3 ::v57(){vfunc_called(this, "_ZN7S1837C33v57Ev");}
S1837C3 ::~S1837C3(){ note_dtor("S1837C3", this);} // tgen
S1837C3 ::S1837C3(){ note_ctor("S1837C3", this);} // tgen

static void Test_S1837C3()
{
  extern Class_Descriptor cd_S1837C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1837C3, buf);
    S1837C3 *dp, &lv = *(dp=new (buf) S1837C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1837C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1837C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1837C3");
    test_class_info(&lv, &cd_S1837C3);
    dp->~S1837C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1837C3(Test_S1837C3, "S1837C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1837C3C1Ev();
extern void _ZN7S1837C3D1Ev();
Name_Map name_map_S1837C3[] = {
  NSPAIR(_ZN7S1837C3C1Ev),
  NSPAIR(_ZN7S1837C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1837C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1837C3[];
extern void _ZN7S1837C3D1Ev();
extern void _ZN7S1837C3D0Ev();
extern void _ZN7S1837C32v8Ev();
extern void _ZN7S1837C32v9Ev();
extern void _ZN7S1837C33v10Ev();
extern void _ZN7S1837C33v11Ev();
extern void _ZN7S1837C33v12Ev();
extern void _ZN7S1837C33v13Ev();
extern void _ZN7S1837C33v14Ev();
extern void _ZN7S1837C33v15Ev();
extern void _ZN7S1837C33v16Ev();
extern void _ZN7S1837C33v17Ev();
extern void _ZN7S1837C33v18Ev();
extern void _ZN7S1837C33v19Ev();
extern void _ZN7S1837C33v20Ev();
extern void _ZN7S1837C33v21Ev();
extern void _ZN7S1837C33v22Ev();
extern void _ZN7S1837C33v23Ev();
extern void _ZN7S1837C33v24Ev();
extern void _ZN7S1837C33v25Ev();
extern void _ZN7S1837C33v26Ev();
extern void _ZN7S1837C33v27Ev();
extern void _ZN7S1837C33v28Ev();
extern void _ZN7S1837C33v29Ev();
extern void _ZN7S1837C33v30Ev();
extern void _ZN7S1837C33v31Ev();
extern void _ZN7S1837C33v32Ev();
extern void _ZN7S1837C33v33Ev();
extern void _ZN7S1837C33v34Ev();
extern void _ZN7S1837C33v35Ev();
extern void _ZN7S1837C33v36Ev();
extern void _ZN7S1837C33v37Ev();
extern void _ZN7S1837C33v38Ev();
extern void _ZN7S1837C33v39Ev();
extern void _ZN7S1837C33v40Ev();
extern void _ZN7S1837C33v41Ev();
extern void _ZN7S1837C33v42Ev();
extern void _ZN7S1837C33v43Ev();
extern void _ZN7S1837C33v44Ev();
extern void _ZN7S1837C33v45Ev();
extern void _ZN7S1837C33v46Ev();
extern void _ZN7S1837C33v47Ev();
extern void _ZN7S1837C33v48Ev();
extern void _ZN7S1837C33v49Ev();
extern void _ZN7S1837C33v50Ev();
extern void _ZN7S1837C33v51Ev();
extern void _ZN7S1837C33v52Ev();
extern void _ZN7S1837C33v53Ev();
extern void _ZN7S1837C33v54Ev();
extern void _ZN7S1837C33v55Ev();
extern void _ZN7S1837C33v56Ev();
extern void _ZN7S1837C33v57Ev();
static  VTBL_ENTRY vtc_S1837C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1837C3[0]),
  (VTBL_ENTRY)&_ZN7S1837C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1837C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1837C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1837C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v57Ev,
};
extern VTBL_ENTRY _ZTI7S1837C3[];
extern  VTBL_ENTRY _ZTV7S1837C3[];
Class_Descriptor cd_S1837C3 = {  "S1837C3", // class name
  bases_S1837C3, 1,
  &(vtc_S1837C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1837C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1837C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1837C2  : S1837C3 {
  virtual void  v58(); // _ZN7S1837C23v58Ev
  ~S1837C2(); // tgen
  S1837C2(); // tgen
};
//SIG(-1 S1837C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1837C2 ::v58(){vfunc_called(this, "_ZN7S1837C23v58Ev");}
S1837C2 ::~S1837C2(){ note_dtor("S1837C2", this);} // tgen
S1837C2 ::S1837C2(){ note_ctor("S1837C2", this);} // tgen

static void Test_S1837C2()
{
  extern Class_Descriptor cd_S1837C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1837C2, buf);
    S1837C2 *dp, &lv = *(dp=new (buf) S1837C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1837C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1837C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1837C3*), 0, "S1837C2");
    check_base_class_offset(lv, (S1837C3*), 0, "S1837C2");
    test_class_info(&lv, &cd_S1837C2);
    dp->~S1837C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1837C2(Test_S1837C2, "S1837C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1837C2C1Ev();
extern void _ZN7S1837C2D1Ev();
Name_Map name_map_S1837C2[] = {
  NSPAIR(_ZN7S1837C2C1Ev),
  NSPAIR(_ZN7S1837C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1837C3;
extern VTBL_ENTRY _ZTI7S1837C3[];
extern  VTBL_ENTRY _ZTV7S1837C3[];
static Base_Class bases_S1837C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1837C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1837C2[];
extern void _ZN7S1837C2D1Ev();
extern void _ZN7S1837C2D0Ev();
extern void _ZN7S1837C32v8Ev();
extern void _ZN7S1837C32v9Ev();
extern void _ZN7S1837C33v10Ev();
extern void _ZN7S1837C33v11Ev();
extern void _ZN7S1837C33v12Ev();
extern void _ZN7S1837C33v13Ev();
extern void _ZN7S1837C33v14Ev();
extern void _ZN7S1837C33v15Ev();
extern void _ZN7S1837C33v16Ev();
extern void _ZN7S1837C33v17Ev();
extern void _ZN7S1837C33v18Ev();
extern void _ZN7S1837C33v19Ev();
extern void _ZN7S1837C33v20Ev();
extern void _ZN7S1837C33v21Ev();
extern void _ZN7S1837C33v22Ev();
extern void _ZN7S1837C33v23Ev();
extern void _ZN7S1837C33v24Ev();
extern void _ZN7S1837C33v25Ev();
extern void _ZN7S1837C33v26Ev();
extern void _ZN7S1837C33v27Ev();
extern void _ZN7S1837C33v28Ev();
extern void _ZN7S1837C33v29Ev();
extern void _ZN7S1837C33v30Ev();
extern void _ZN7S1837C33v31Ev();
extern void _ZN7S1837C33v32Ev();
extern void _ZN7S1837C33v33Ev();
extern void _ZN7S1837C33v34Ev();
extern void _ZN7S1837C33v35Ev();
extern void _ZN7S1837C33v36Ev();
extern void _ZN7S1837C33v37Ev();
extern void _ZN7S1837C33v38Ev();
extern void _ZN7S1837C33v39Ev();
extern void _ZN7S1837C33v40Ev();
extern void _ZN7S1837C33v41Ev();
extern void _ZN7S1837C33v42Ev();
extern void _ZN7S1837C33v43Ev();
extern void _ZN7S1837C33v44Ev();
extern void _ZN7S1837C33v45Ev();
extern void _ZN7S1837C33v46Ev();
extern void _ZN7S1837C33v47Ev();
extern void _ZN7S1837C33v48Ev();
extern void _ZN7S1837C33v49Ev();
extern void _ZN7S1837C33v50Ev();
extern void _ZN7S1837C33v51Ev();
extern void _ZN7S1837C33v52Ev();
extern void _ZN7S1837C33v53Ev();
extern void _ZN7S1837C33v54Ev();
extern void _ZN7S1837C33v55Ev();
extern void _ZN7S1837C33v56Ev();
extern void _ZN7S1837C33v57Ev();
extern void _ZN7S1837C23v58Ev();
static  VTBL_ENTRY vtc_S1837C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1837C2[0]),
  (VTBL_ENTRY)&_ZN7S1837C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1837C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1837C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1837C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1837C23v58Ev,
};
extern VTBL_ENTRY _ZTI7S1837C2[];
extern  VTBL_ENTRY _ZTV7S1837C2[];
Class_Descriptor cd_S1837C2 = {  "S1837C2", // class name
  bases_S1837C2, 2,
  &(vtc_S1837C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1837C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1837C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1837C1  : S1837C2 {
  virtual void  v1(); // _ZN7S1837C12v1Ev
  virtual void  v2(); // _ZN7S1837C12v2Ev
  virtual void  v3(); // _ZN7S1837C12v3Ev
  virtual void  v4(); // _ZN7S1837C12v4Ev
  virtual void  v5(); // _ZN7S1837C12v5Ev
  virtual void  v6(); // _ZN7S1837C12v6Ev
  virtual void  v7(); // _ZN7S1837C12v7Ev
  ~S1837C1(); // tgen
  S1837C1(); // tgen
};
//SIG(1 S1837C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57} v58} v1 v2 v3 v4 v5 v6 v7}


void  S1837C1 ::v1(){vfunc_called(this, "_ZN7S1837C12v1Ev");}
void  S1837C1 ::v2(){vfunc_called(this, "_ZN7S1837C12v2Ev");}
void  S1837C1 ::v3(){vfunc_called(this, "_ZN7S1837C12v3Ev");}
void  S1837C1 ::v4(){vfunc_called(this, "_ZN7S1837C12v4Ev");}
void  S1837C1 ::v5(){vfunc_called(this, "_ZN7S1837C12v5Ev");}
void  S1837C1 ::v6(){vfunc_called(this, "_ZN7S1837C12v6Ev");}
void  S1837C1 ::v7(){vfunc_called(this, "_ZN7S1837C12v7Ev");}
S1837C1 ::~S1837C1(){ note_dtor("S1837C1", this);} // tgen
S1837C1 ::S1837C1(){ note_ctor("S1837C1", this);} // tgen

static void Test_S1837C1()
{
  extern Class_Descriptor cd_S1837C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1837C1, buf);
    S1837C1 *dp, &lv = *(dp=new (buf) S1837C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1837C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1837C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1837C3*)(S1837C2*), 0, "S1837C1");
    check_base_class_offset(lv, (S1837C3*)(S1837C2*), 0, "S1837C1");
    check_base_class_offset(lv, (S1837C2*), 0, "S1837C1");
    test_class_info(&lv, &cd_S1837C1);
    dp->~S1837C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1837C1(Test_S1837C1, "S1837C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1837C1C1Ev();
extern void _ZN7S1837C1D1Ev();
Name_Map name_map_S1837C1[] = {
  NSPAIR(_ZN7S1837C1C1Ev),
  NSPAIR(_ZN7S1837C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1837C3;
extern VTBL_ENTRY _ZTI7S1837C3[];
extern  VTBL_ENTRY _ZTV7S1837C3[];
extern Class_Descriptor cd_S1837C2;
extern VTBL_ENTRY _ZTI7S1837C2[];
extern  VTBL_ENTRY _ZTV7S1837C2[];
static Base_Class bases_S1837C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1837C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1837C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1837C1[];
extern void _ZN7S1837C1D1Ev();
extern void _ZN7S1837C1D0Ev();
extern void _ZN7S1837C32v8Ev();
extern void _ZN7S1837C32v9Ev();
extern void _ZN7S1837C33v10Ev();
extern void _ZN7S1837C33v11Ev();
extern void _ZN7S1837C33v12Ev();
extern void _ZN7S1837C33v13Ev();
extern void _ZN7S1837C33v14Ev();
extern void _ZN7S1837C33v15Ev();
extern void _ZN7S1837C33v16Ev();
extern void _ZN7S1837C33v17Ev();
extern void _ZN7S1837C33v18Ev();
extern void _ZN7S1837C33v19Ev();
extern void _ZN7S1837C33v20Ev();
extern void _ZN7S1837C33v21Ev();
extern void _ZN7S1837C33v22Ev();
extern void _ZN7S1837C33v23Ev();
extern void _ZN7S1837C33v24Ev();
extern void _ZN7S1837C33v25Ev();
extern void _ZN7S1837C33v26Ev();
extern void _ZN7S1837C33v27Ev();
extern void _ZN7S1837C33v28Ev();
extern void _ZN7S1837C33v29Ev();
extern void _ZN7S1837C33v30Ev();
extern void _ZN7S1837C33v31Ev();
extern void _ZN7S1837C33v32Ev();
extern void _ZN7S1837C33v33Ev();
extern void _ZN7S1837C33v34Ev();
extern void _ZN7S1837C33v35Ev();
extern void _ZN7S1837C33v36Ev();
extern void _ZN7S1837C33v37Ev();
extern void _ZN7S1837C33v38Ev();
extern void _ZN7S1837C33v39Ev();
extern void _ZN7S1837C33v40Ev();
extern void _ZN7S1837C33v41Ev();
extern void _ZN7S1837C33v42Ev();
extern void _ZN7S1837C33v43Ev();
extern void _ZN7S1837C33v44Ev();
extern void _ZN7S1837C33v45Ev();
extern void _ZN7S1837C33v46Ev();
extern void _ZN7S1837C33v47Ev();
extern void _ZN7S1837C33v48Ev();
extern void _ZN7S1837C33v49Ev();
extern void _ZN7S1837C33v50Ev();
extern void _ZN7S1837C33v51Ev();
extern void _ZN7S1837C33v52Ev();
extern void _ZN7S1837C33v53Ev();
extern void _ZN7S1837C33v54Ev();
extern void _ZN7S1837C33v55Ev();
extern void _ZN7S1837C33v56Ev();
extern void _ZN7S1837C33v57Ev();
extern void _ZN7S1837C23v58Ev();
extern void _ZN7S1837C12v1Ev();
extern void _ZN7S1837C12v2Ev();
extern void _ZN7S1837C12v3Ev();
extern void _ZN7S1837C12v4Ev();
extern void _ZN7S1837C12v5Ev();
extern void _ZN7S1837C12v6Ev();
extern void _ZN7S1837C12v7Ev();
static  VTBL_ENTRY vtc_S1837C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1837C1[0]),
  (VTBL_ENTRY)&_ZN7S1837C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1837C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1837C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1837C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1837C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1837C23v58Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1837C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1837C1[];
extern  VTBL_ENTRY _ZTV7S1837C1[];
Class_Descriptor cd_S1837C1 = {  "S1837C1", // class name
  bases_S1837C1, 3,
  &(vtc_S1837C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1837C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1837C1),62, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1831C3  : S1778C4_nt {
  virtual void  v7(); // _ZN7S1831C32v7Ev
  virtual void  v8(); // _ZN7S1831C32v8Ev
  virtual void  v9(); // _ZN7S1831C32v9Ev
  virtual void  v10(); // _ZN7S1831C33v10Ev
  virtual void  v11(); // _ZN7S1831C33v11Ev
  virtual void  v12(); // _ZN7S1831C33v12Ev
  virtual void  v13(); // _ZN7S1831C33v13Ev
  virtual void  v14(); // _ZN7S1831C33v14Ev
  virtual void  v15(); // _ZN7S1831C33v15Ev
  virtual void  v16(); // _ZN7S1831C33v16Ev
  virtual void  v17(); // _ZN7S1831C33v17Ev
  virtual void  v18(); // _ZN7S1831C33v18Ev
  virtual void  v19(); // _ZN7S1831C33v19Ev
  virtual void  v20(); // _ZN7S1831C33v20Ev
  virtual void  v21(); // _ZN7S1831C33v21Ev
  virtual void  v22(); // _ZN7S1831C33v22Ev
  virtual void  v23(); // _ZN7S1831C33v23Ev
  virtual void  v24(); // _ZN7S1831C33v24Ev
  virtual void  v25(); // _ZN7S1831C33v25Ev
  virtual void  v26(); // _ZN7S1831C33v26Ev
  virtual void  v27(); // _ZN7S1831C33v27Ev
  virtual void  v28(); // _ZN7S1831C33v28Ev
  virtual void  v29(); // _ZN7S1831C33v29Ev
  virtual void  v30(); // _ZN7S1831C33v30Ev
  virtual void  v31(); // _ZN7S1831C33v31Ev
  virtual void  v32(); // _ZN7S1831C33v32Ev
  virtual void  v33(); // _ZN7S1831C33v33Ev
  virtual void  v34(); // _ZN7S1831C33v34Ev
  virtual void  v35(); // _ZN7S1831C33v35Ev
  virtual void  v36(); // _ZN7S1831C33v36Ev
  virtual void  v37(); // _ZN7S1831C33v37Ev
  virtual void  v38(); // _ZN7S1831C33v38Ev
  virtual void  v39(); // _ZN7S1831C33v39Ev
  virtual void  v40(); // _ZN7S1831C33v40Ev
  virtual void  v41(); // _ZN7S1831C33v41Ev
  virtual void  v42(); // _ZN7S1831C33v42Ev
  virtual void  v43(); // _ZN7S1831C33v43Ev
  virtual void  v44(); // _ZN7S1831C33v44Ev
  virtual void  v45(); // _ZN7S1831C33v45Ev
  virtual void  v46(); // _ZN7S1831C33v46Ev
  virtual void  v47(); // _ZN7S1831C33v47Ev
  virtual void  v48(); // _ZN7S1831C33v48Ev
  virtual void  v49(); // _ZN7S1831C33v49Ev
  virtual void  v50(); // _ZN7S1831C33v50Ev
  virtual void  v51(); // _ZN7S1831C33v51Ev
  virtual void  v52(); // _ZN7S1831C33v52Ev
  virtual void  v53(); // _ZN7S1831C33v53Ev
  virtual void  v54(); // _ZN7S1831C33v54Ev
  virtual void  v55(); // _ZN7S1831C33v55Ev
  virtual void  v56(); // _ZN7S1831C33v56Ev
  ~S1831C3(); // tgen
  S1831C3(); // tgen
};
//SIG(-1 S1831C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1831C3 ::v7(){vfunc_called(this, "_ZN7S1831C32v7Ev");}
void  S1831C3 ::v8(){vfunc_called(this, "_ZN7S1831C32v8Ev");}
void  S1831C3 ::v9(){vfunc_called(this, "_ZN7S1831C32v9Ev");}
void  S1831C3 ::v10(){vfunc_called(this, "_ZN7S1831C33v10Ev");}
void  S1831C3 ::v11(){vfunc_called(this, "_ZN7S1831C33v11Ev");}
void  S1831C3 ::v12(){vfunc_called(this, "_ZN7S1831C33v12Ev");}
void  S1831C3 ::v13(){vfunc_called(this, "_ZN7S1831C33v13Ev");}
void  S1831C3 ::v14(){vfunc_called(this, "_ZN7S1831C33v14Ev");}
void  S1831C3 ::v15(){vfunc_called(this, "_ZN7S1831C33v15Ev");}
void  S1831C3 ::v16(){vfunc_called(this, "_ZN7S1831C33v16Ev");}
void  S1831C3 ::v17(){vfunc_called(this, "_ZN7S1831C33v17Ev");}
void  S1831C3 ::v18(){vfunc_called(this, "_ZN7S1831C33v18Ev");}
void  S1831C3 ::v19(){vfunc_called(this, "_ZN7S1831C33v19Ev");}
void  S1831C3 ::v20(){vfunc_called(this, "_ZN7S1831C33v20Ev");}
void  S1831C3 ::v21(){vfunc_called(this, "_ZN7S1831C33v21Ev");}
void  S1831C3 ::v22(){vfunc_called(this, "_ZN7S1831C33v22Ev");}
void  S1831C3 ::v23(){vfunc_called(this, "_ZN7S1831C33v23Ev");}
void  S1831C3 ::v24(){vfunc_called(this, "_ZN7S1831C33v24Ev");}
void  S1831C3 ::v25(){vfunc_called(this, "_ZN7S1831C33v25Ev");}
void  S1831C3 ::v26(){vfunc_called(this, "_ZN7S1831C33v26Ev");}
void  S1831C3 ::v27(){vfunc_called(this, "_ZN7S1831C33v27Ev");}
void  S1831C3 ::v28(){vfunc_called(this, "_ZN7S1831C33v28Ev");}
void  S1831C3 ::v29(){vfunc_called(this, "_ZN7S1831C33v29Ev");}
void  S1831C3 ::v30(){vfunc_called(this, "_ZN7S1831C33v30Ev");}
void  S1831C3 ::v31(){vfunc_called(this, "_ZN7S1831C33v31Ev");}
void  S1831C3 ::v32(){vfunc_called(this, "_ZN7S1831C33v32Ev");}
void  S1831C3 ::v33(){vfunc_called(this, "_ZN7S1831C33v33Ev");}
void  S1831C3 ::v34(){vfunc_called(this, "_ZN7S1831C33v34Ev");}
void  S1831C3 ::v35(){vfunc_called(this, "_ZN7S1831C33v35Ev");}
void  S1831C3 ::v36(){vfunc_called(this, "_ZN7S1831C33v36Ev");}
void  S1831C3 ::v37(){vfunc_called(this, "_ZN7S1831C33v37Ev");}
void  S1831C3 ::v38(){vfunc_called(this, "_ZN7S1831C33v38Ev");}
void  S1831C3 ::v39(){vfunc_called(this, "_ZN7S1831C33v39Ev");}
void  S1831C3 ::v40(){vfunc_called(this, "_ZN7S1831C33v40Ev");}
void  S1831C3 ::v41(){vfunc_called(this, "_ZN7S1831C33v41Ev");}
void  S1831C3 ::v42(){vfunc_called(this, "_ZN7S1831C33v42Ev");}
void  S1831C3 ::v43(){vfunc_called(this, "_ZN7S1831C33v43Ev");}
void  S1831C3 ::v44(){vfunc_called(this, "_ZN7S1831C33v44Ev");}
void  S1831C3 ::v45(){vfunc_called(this, "_ZN7S1831C33v45Ev");}
void  S1831C3 ::v46(){vfunc_called(this, "_ZN7S1831C33v46Ev");}
void  S1831C3 ::v47(){vfunc_called(this, "_ZN7S1831C33v47Ev");}
void  S1831C3 ::v48(){vfunc_called(this, "_ZN7S1831C33v48Ev");}
void  S1831C3 ::v49(){vfunc_called(this, "_ZN7S1831C33v49Ev");}
void  S1831C3 ::v50(){vfunc_called(this, "_ZN7S1831C33v50Ev");}
void  S1831C3 ::v51(){vfunc_called(this, "_ZN7S1831C33v51Ev");}
void  S1831C3 ::v52(){vfunc_called(this, "_ZN7S1831C33v52Ev");}
void  S1831C3 ::v53(){vfunc_called(this, "_ZN7S1831C33v53Ev");}
void  S1831C3 ::v54(){vfunc_called(this, "_ZN7S1831C33v54Ev");}
void  S1831C3 ::v55(){vfunc_called(this, "_ZN7S1831C33v55Ev");}
void  S1831C3 ::v56(){vfunc_called(this, "_ZN7S1831C33v56Ev");}
S1831C3 ::~S1831C3(){ note_dtor("S1831C3", this);} // tgen
S1831C3 ::S1831C3(){ note_ctor("S1831C3", this);} // tgen

static void Test_S1831C3()
{
  extern Class_Descriptor cd_S1831C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1831C3, buf);
    S1831C3 *dp, &lv = *(dp=new (buf) S1831C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1831C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1831C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1831C3");
    test_class_info(&lv, &cd_S1831C3);
    dp->~S1831C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1831C3(Test_S1831C3, "S1831C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1831C3C1Ev();
extern void _ZN7S1831C3D1Ev();
Name_Map name_map_S1831C3[] = {
  NSPAIR(_ZN7S1831C3C1Ev),
  NSPAIR(_ZN7S1831C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1831C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1831C3[];
extern void _ZN7S1831C3D1Ev();
extern void _ZN7S1831C3D0Ev();
extern void _ZN7S1831C32v7Ev();
extern void _ZN7S1831C32v8Ev();
extern void _ZN7S1831C32v9Ev();
extern void _ZN7S1831C33v10Ev();
extern void _ZN7S1831C33v11Ev();
extern void _ZN7S1831C33v12Ev();
extern void _ZN7S1831C33v13Ev();
extern void _ZN7S1831C33v14Ev();
extern void _ZN7S1831C33v15Ev();
extern void _ZN7S1831C33v16Ev();
extern void _ZN7S1831C33v17Ev();
extern void _ZN7S1831C33v18Ev();
extern void _ZN7S1831C33v19Ev();
extern void _ZN7S1831C33v20Ev();
extern void _ZN7S1831C33v21Ev();
extern void _ZN7S1831C33v22Ev();
extern void _ZN7S1831C33v23Ev();
extern void _ZN7S1831C33v24Ev();
extern void _ZN7S1831C33v25Ev();
extern void _ZN7S1831C33v26Ev();
extern void _ZN7S1831C33v27Ev();
extern void _ZN7S1831C33v28Ev();
extern void _ZN7S1831C33v29Ev();
extern void _ZN7S1831C33v30Ev();
extern void _ZN7S1831C33v31Ev();
extern void _ZN7S1831C33v32Ev();
extern void _ZN7S1831C33v33Ev();
extern void _ZN7S1831C33v34Ev();
extern void _ZN7S1831C33v35Ev();
extern void _ZN7S1831C33v36Ev();
extern void _ZN7S1831C33v37Ev();
extern void _ZN7S1831C33v38Ev();
extern void _ZN7S1831C33v39Ev();
extern void _ZN7S1831C33v40Ev();
extern void _ZN7S1831C33v41Ev();
extern void _ZN7S1831C33v42Ev();
extern void _ZN7S1831C33v43Ev();
extern void _ZN7S1831C33v44Ev();
extern void _ZN7S1831C33v45Ev();
extern void _ZN7S1831C33v46Ev();
extern void _ZN7S1831C33v47Ev();
extern void _ZN7S1831C33v48Ev();
extern void _ZN7S1831C33v49Ev();
extern void _ZN7S1831C33v50Ev();
extern void _ZN7S1831C33v51Ev();
extern void _ZN7S1831C33v52Ev();
extern void _ZN7S1831C33v53Ev();
extern void _ZN7S1831C33v54Ev();
extern void _ZN7S1831C33v55Ev();
extern void _ZN7S1831C33v56Ev();
static  VTBL_ENTRY vtc_S1831C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1831C3[0]),
  (VTBL_ENTRY)&_ZN7S1831C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1831C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v56Ev,
};
extern VTBL_ENTRY _ZTI7S1831C3[];
extern  VTBL_ENTRY _ZTV7S1831C3[];
Class_Descriptor cd_S1831C3 = {  "S1831C3", // class name
  bases_S1831C3, 1,
  &(vtc_S1831C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1831C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1831C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1831C2  : S1831C3 {
  virtual void  v57(); // _ZN7S1831C23v57Ev
  ~S1831C2(); // tgen
  S1831C2(); // tgen
};
//SIG(-1 S1831C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1831C2 ::v57(){vfunc_called(this, "_ZN7S1831C23v57Ev");}
S1831C2 ::~S1831C2(){ note_dtor("S1831C2", this);} // tgen
S1831C2 ::S1831C2(){ note_ctor("S1831C2", this);} // tgen

static void Test_S1831C2()
{
  extern Class_Descriptor cd_S1831C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1831C2, buf);
    S1831C2 *dp, &lv = *(dp=new (buf) S1831C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1831C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1831C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1831C3*), 0, "S1831C2");
    check_base_class_offset(lv, (S1831C3*), 0, "S1831C2");
    test_class_info(&lv, &cd_S1831C2);
    dp->~S1831C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1831C2(Test_S1831C2, "S1831C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1831C2C1Ev();
extern void _ZN7S1831C2D1Ev();
Name_Map name_map_S1831C2[] = {
  NSPAIR(_ZN7S1831C2C1Ev),
  NSPAIR(_ZN7S1831C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1831C3;
extern VTBL_ENTRY _ZTI7S1831C3[];
extern  VTBL_ENTRY _ZTV7S1831C3[];
static Base_Class bases_S1831C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1831C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1831C2[];
extern void _ZN7S1831C2D1Ev();
extern void _ZN7S1831C2D0Ev();
extern void _ZN7S1831C32v7Ev();
extern void _ZN7S1831C32v8Ev();
extern void _ZN7S1831C32v9Ev();
extern void _ZN7S1831C33v10Ev();
extern void _ZN7S1831C33v11Ev();
extern void _ZN7S1831C33v12Ev();
extern void _ZN7S1831C33v13Ev();
extern void _ZN7S1831C33v14Ev();
extern void _ZN7S1831C33v15Ev();
extern void _ZN7S1831C33v16Ev();
extern void _ZN7S1831C33v17Ev();
extern void _ZN7S1831C33v18Ev();
extern void _ZN7S1831C33v19Ev();
extern void _ZN7S1831C33v20Ev();
extern void _ZN7S1831C33v21Ev();
extern void _ZN7S1831C33v22Ev();
extern void _ZN7S1831C33v23Ev();
extern void _ZN7S1831C33v24Ev();
extern void _ZN7S1831C33v25Ev();
extern void _ZN7S1831C33v26Ev();
extern void _ZN7S1831C33v27Ev();
extern void _ZN7S1831C33v28Ev();
extern void _ZN7S1831C33v29Ev();
extern void _ZN7S1831C33v30Ev();
extern void _ZN7S1831C33v31Ev();
extern void _ZN7S1831C33v32Ev();
extern void _ZN7S1831C33v33Ev();
extern void _ZN7S1831C33v34Ev();
extern void _ZN7S1831C33v35Ev();
extern void _ZN7S1831C33v36Ev();
extern void _ZN7S1831C33v37Ev();
extern void _ZN7S1831C33v38Ev();
extern void _ZN7S1831C33v39Ev();
extern void _ZN7S1831C33v40Ev();
extern void _ZN7S1831C33v41Ev();
extern void _ZN7S1831C33v42Ev();
extern void _ZN7S1831C33v43Ev();
extern void _ZN7S1831C33v44Ev();
extern void _ZN7S1831C33v45Ev();
extern void _ZN7S1831C33v46Ev();
extern void _ZN7S1831C33v47Ev();
extern void _ZN7S1831C33v48Ev();
extern void _ZN7S1831C33v49Ev();
extern void _ZN7S1831C33v50Ev();
extern void _ZN7S1831C33v51Ev();
extern void _ZN7S1831C33v52Ev();
extern void _ZN7S1831C33v53Ev();
extern void _ZN7S1831C33v54Ev();
extern void _ZN7S1831C33v55Ev();
extern void _ZN7S1831C33v56Ev();
extern void _ZN7S1831C23v57Ev();
static  VTBL_ENTRY vtc_S1831C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1831C2[0]),
  (VTBL_ENTRY)&_ZN7S1831C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1831C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1831C23v57Ev,
};
extern VTBL_ENTRY _ZTI7S1831C2[];
extern  VTBL_ENTRY _ZTV7S1831C2[];
Class_Descriptor cd_S1831C2 = {  "S1831C2", // class name
  bases_S1831C2, 2,
  &(vtc_S1831C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1831C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1831C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1831C1  : S1831C2 {
  virtual void  v1(); // _ZN7S1831C12v1Ev
  virtual void  v2(); // _ZN7S1831C12v2Ev
  virtual void  v3(); // _ZN7S1831C12v3Ev
  virtual void  v4(); // _ZN7S1831C12v4Ev
  virtual void  v5(); // _ZN7S1831C12v5Ev
  virtual void  v6(); // _ZN7S1831C12v6Ev
  ~S1831C1(); // tgen
  S1831C1(); // tgen
};
//SIG(1 S1831C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56} v57} v1 v2 v3 v4 v5 v6}


void  S1831C1 ::v1(){vfunc_called(this, "_ZN7S1831C12v1Ev");}
void  S1831C1 ::v2(){vfunc_called(this, "_ZN7S1831C12v2Ev");}
void  S1831C1 ::v3(){vfunc_called(this, "_ZN7S1831C12v3Ev");}
void  S1831C1 ::v4(){vfunc_called(this, "_ZN7S1831C12v4Ev");}
void  S1831C1 ::v5(){vfunc_called(this, "_ZN7S1831C12v5Ev");}
void  S1831C1 ::v6(){vfunc_called(this, "_ZN7S1831C12v6Ev");}
S1831C1 ::~S1831C1(){ note_dtor("S1831C1", this);} // tgen
S1831C1 ::S1831C1(){ note_ctor("S1831C1", this);} // tgen

static void Test_S1831C1()
{
  extern Class_Descriptor cd_S1831C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1831C1, buf);
    S1831C1 *dp, &lv = *(dp=new (buf) S1831C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1831C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1831C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1831C3*)(S1831C2*), 0, "S1831C1");
    check_base_class_offset(lv, (S1831C3*)(S1831C2*), 0, "S1831C1");
    check_base_class_offset(lv, (S1831C2*), 0, "S1831C1");
    test_class_info(&lv, &cd_S1831C1);
    dp->~S1831C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1831C1(Test_S1831C1, "S1831C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1831C1C1Ev();
extern void _ZN7S1831C1D1Ev();
Name_Map name_map_S1831C1[] = {
  NSPAIR(_ZN7S1831C1C1Ev),
  NSPAIR(_ZN7S1831C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1831C3;
extern VTBL_ENTRY _ZTI7S1831C3[];
extern  VTBL_ENTRY _ZTV7S1831C3[];
extern Class_Descriptor cd_S1831C2;
extern VTBL_ENTRY _ZTI7S1831C2[];
extern  VTBL_ENTRY _ZTV7S1831C2[];
static Base_Class bases_S1831C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1831C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1831C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1831C1[];
extern void _ZN7S1831C1D1Ev();
extern void _ZN7S1831C1D0Ev();
extern void _ZN7S1831C32v7Ev();
extern void _ZN7S1831C32v8Ev();
extern void _ZN7S1831C32v9Ev();
extern void _ZN7S1831C33v10Ev();
extern void _ZN7S1831C33v11Ev();
extern void _ZN7S1831C33v12Ev();
extern void _ZN7S1831C33v13Ev();
extern void _ZN7S1831C33v14Ev();
extern void _ZN7S1831C33v15Ev();
extern void _ZN7S1831C33v16Ev();
extern void _ZN7S1831C33v17Ev();
extern void _ZN7S1831C33v18Ev();
extern void _ZN7S1831C33v19Ev();
extern void _ZN7S1831C33v20Ev();
extern void _ZN7S1831C33v21Ev();
extern void _ZN7S1831C33v22Ev();
extern void _ZN7S1831C33v23Ev();
extern void _ZN7S1831C33v24Ev();
extern void _ZN7S1831C33v25Ev();
extern void _ZN7S1831C33v26Ev();
extern void _ZN7S1831C33v27Ev();
extern void _ZN7S1831C33v28Ev();
extern void _ZN7S1831C33v29Ev();
extern void _ZN7S1831C33v30Ev();
extern void _ZN7S1831C33v31Ev();
extern void _ZN7S1831C33v32Ev();
extern void _ZN7S1831C33v33Ev();
extern void _ZN7S1831C33v34Ev();
extern void _ZN7S1831C33v35Ev();
extern void _ZN7S1831C33v36Ev();
extern void _ZN7S1831C33v37Ev();
extern void _ZN7S1831C33v38Ev();
extern void _ZN7S1831C33v39Ev();
extern void _ZN7S1831C33v40Ev();
extern void _ZN7S1831C33v41Ev();
extern void _ZN7S1831C33v42Ev();
extern void _ZN7S1831C33v43Ev();
extern void _ZN7S1831C33v44Ev();
extern void _ZN7S1831C33v45Ev();
extern void _ZN7S1831C33v46Ev();
extern void _ZN7S1831C33v47Ev();
extern void _ZN7S1831C33v48Ev();
extern void _ZN7S1831C33v49Ev();
extern void _ZN7S1831C33v50Ev();
extern void _ZN7S1831C33v51Ev();
extern void _ZN7S1831C33v52Ev();
extern void _ZN7S1831C33v53Ev();
extern void _ZN7S1831C33v54Ev();
extern void _ZN7S1831C33v55Ev();
extern void _ZN7S1831C33v56Ev();
extern void _ZN7S1831C23v57Ev();
extern void _ZN7S1831C12v1Ev();
extern void _ZN7S1831C12v2Ev();
extern void _ZN7S1831C12v3Ev();
extern void _ZN7S1831C12v4Ev();
extern void _ZN7S1831C12v5Ev();
extern void _ZN7S1831C12v6Ev();
static  VTBL_ENTRY vtc_S1831C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1831C1[0]),
  (VTBL_ENTRY)&_ZN7S1831C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1831C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1831C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1831C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1831C23v57Ev,
  (VTBL_ENTRY)&_ZN7S1831C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1831C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1831C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1831C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1831C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1831C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1831C1[];
extern  VTBL_ENTRY _ZTV7S1831C1[];
Class_Descriptor cd_S1831C1 = {  "S1831C1", // class name
  bases_S1831C1, 3,
  &(vtc_S1831C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1831C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1831C1),61, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1822C3  : S1778C4_nt {
  virtual void  v6(); // _ZN7S1822C32v6Ev
  virtual void  v7(); // _ZN7S1822C32v7Ev
  virtual void  v8(); // _ZN7S1822C32v8Ev
  virtual void  v9(); // _ZN7S1822C32v9Ev
  virtual void  v10(); // _ZN7S1822C33v10Ev
  virtual void  v11(); // _ZN7S1822C33v11Ev
  virtual void  v12(); // _ZN7S1822C33v12Ev
  virtual void  v13(); // _ZN7S1822C33v13Ev
  virtual void  v14(); // _ZN7S1822C33v14Ev
  virtual void  v15(); // _ZN7S1822C33v15Ev
  virtual void  v16(); // _ZN7S1822C33v16Ev
  virtual void  v17(); // _ZN7S1822C33v17Ev
  virtual void  v18(); // _ZN7S1822C33v18Ev
  virtual void  v19(); // _ZN7S1822C33v19Ev
  virtual void  v20(); // _ZN7S1822C33v20Ev
  virtual void  v21(); // _ZN7S1822C33v21Ev
  virtual void  v22(); // _ZN7S1822C33v22Ev
  virtual void  v23(); // _ZN7S1822C33v23Ev
  virtual void  v24(); // _ZN7S1822C33v24Ev
  virtual void  v25(); // _ZN7S1822C33v25Ev
  virtual void  v26(); // _ZN7S1822C33v26Ev
  virtual void  v27(); // _ZN7S1822C33v27Ev
  virtual void  v28(); // _ZN7S1822C33v28Ev
  virtual void  v29(); // _ZN7S1822C33v29Ev
  virtual void  v30(); // _ZN7S1822C33v30Ev
  virtual void  v31(); // _ZN7S1822C33v31Ev
  virtual void  v32(); // _ZN7S1822C33v32Ev
  virtual void  v33(); // _ZN7S1822C33v33Ev
  virtual void  v34(); // _ZN7S1822C33v34Ev
  virtual void  v35(); // _ZN7S1822C33v35Ev
  virtual void  v36(); // _ZN7S1822C33v36Ev
  virtual void  v37(); // _ZN7S1822C33v37Ev
  virtual void  v38(); // _ZN7S1822C33v38Ev
  virtual void  v39(); // _ZN7S1822C33v39Ev
  virtual void  v40(); // _ZN7S1822C33v40Ev
  virtual void  v41(); // _ZN7S1822C33v41Ev
  virtual void  v42(); // _ZN7S1822C33v42Ev
  virtual void  v43(); // _ZN7S1822C33v43Ev
  virtual void  v44(); // _ZN7S1822C33v44Ev
  virtual void  v45(); // _ZN7S1822C33v45Ev
  virtual void  v46(); // _ZN7S1822C33v46Ev
  virtual void  v47(); // _ZN7S1822C33v47Ev
  virtual void  v48(); // _ZN7S1822C33v48Ev
  virtual void  v49(); // _ZN7S1822C33v49Ev
  virtual void  v50(); // _ZN7S1822C33v50Ev
  virtual void  v51(); // _ZN7S1822C33v51Ev
  virtual void  v52(); // _ZN7S1822C33v52Ev
  virtual void  v53(); // _ZN7S1822C33v53Ev
  virtual void  v54(); // _ZN7S1822C33v54Ev
  virtual void  v55(); // _ZN7S1822C33v55Ev
  ~S1822C3(); // tgen
  S1822C3(); // tgen
};
//SIG(-1 S1822C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1822C3 ::v6(){vfunc_called(this, "_ZN7S1822C32v6Ev");}
void  S1822C3 ::v7(){vfunc_called(this, "_ZN7S1822C32v7Ev");}
void  S1822C3 ::v8(){vfunc_called(this, "_ZN7S1822C32v8Ev");}
void  S1822C3 ::v9(){vfunc_called(this, "_ZN7S1822C32v9Ev");}
void  S1822C3 ::v10(){vfunc_called(this, "_ZN7S1822C33v10Ev");}
void  S1822C3 ::v11(){vfunc_called(this, "_ZN7S1822C33v11Ev");}
void  S1822C3 ::v12(){vfunc_called(this, "_ZN7S1822C33v12Ev");}
void  S1822C3 ::v13(){vfunc_called(this, "_ZN7S1822C33v13Ev");}
void  S1822C3 ::v14(){vfunc_called(this, "_ZN7S1822C33v14Ev");}
void  S1822C3 ::v15(){vfunc_called(this, "_ZN7S1822C33v15Ev");}
void  S1822C3 ::v16(){vfunc_called(this, "_ZN7S1822C33v16Ev");}
void  S1822C3 ::v17(){vfunc_called(this, "_ZN7S1822C33v17Ev");}
void  S1822C3 ::v18(){vfunc_called(this, "_ZN7S1822C33v18Ev");}
void  S1822C3 ::v19(){vfunc_called(this, "_ZN7S1822C33v19Ev");}
void  S1822C3 ::v20(){vfunc_called(this, "_ZN7S1822C33v20Ev");}
void  S1822C3 ::v21(){vfunc_called(this, "_ZN7S1822C33v21Ev");}
void  S1822C3 ::v22(){vfunc_called(this, "_ZN7S1822C33v22Ev");}
void  S1822C3 ::v23(){vfunc_called(this, "_ZN7S1822C33v23Ev");}
void  S1822C3 ::v24(){vfunc_called(this, "_ZN7S1822C33v24Ev");}
void  S1822C3 ::v25(){vfunc_called(this, "_ZN7S1822C33v25Ev");}
void  S1822C3 ::v26(){vfunc_called(this, "_ZN7S1822C33v26Ev");}
void  S1822C3 ::v27(){vfunc_called(this, "_ZN7S1822C33v27Ev");}
void  S1822C3 ::v28(){vfunc_called(this, "_ZN7S1822C33v28Ev");}
void  S1822C3 ::v29(){vfunc_called(this, "_ZN7S1822C33v29Ev");}
void  S1822C3 ::v30(){vfunc_called(this, "_ZN7S1822C33v30Ev");}
void  S1822C3 ::v31(){vfunc_called(this, "_ZN7S1822C33v31Ev");}
void  S1822C3 ::v32(){vfunc_called(this, "_ZN7S1822C33v32Ev");}
void  S1822C3 ::v33(){vfunc_called(this, "_ZN7S1822C33v33Ev");}
void  S1822C3 ::v34(){vfunc_called(this, "_ZN7S1822C33v34Ev");}
void  S1822C3 ::v35(){vfunc_called(this, "_ZN7S1822C33v35Ev");}
void  S1822C3 ::v36(){vfunc_called(this, "_ZN7S1822C33v36Ev");}
void  S1822C3 ::v37(){vfunc_called(this, "_ZN7S1822C33v37Ev");}
void  S1822C3 ::v38(){vfunc_called(this, "_ZN7S1822C33v38Ev");}
void  S1822C3 ::v39(){vfunc_called(this, "_ZN7S1822C33v39Ev");}
void  S1822C3 ::v40(){vfunc_called(this, "_ZN7S1822C33v40Ev");}
void  S1822C3 ::v41(){vfunc_called(this, "_ZN7S1822C33v41Ev");}
void  S1822C3 ::v42(){vfunc_called(this, "_ZN7S1822C33v42Ev");}
void  S1822C3 ::v43(){vfunc_called(this, "_ZN7S1822C33v43Ev");}
void  S1822C3 ::v44(){vfunc_called(this, "_ZN7S1822C33v44Ev");}
void  S1822C3 ::v45(){vfunc_called(this, "_ZN7S1822C33v45Ev");}
void  S1822C3 ::v46(){vfunc_called(this, "_ZN7S1822C33v46Ev");}
void  S1822C3 ::v47(){vfunc_called(this, "_ZN7S1822C33v47Ev");}
void  S1822C3 ::v48(){vfunc_called(this, "_ZN7S1822C33v48Ev");}
void  S1822C3 ::v49(){vfunc_called(this, "_ZN7S1822C33v49Ev");}
void  S1822C3 ::v50(){vfunc_called(this, "_ZN7S1822C33v50Ev");}
void  S1822C3 ::v51(){vfunc_called(this, "_ZN7S1822C33v51Ev");}
void  S1822C3 ::v52(){vfunc_called(this, "_ZN7S1822C33v52Ev");}
void  S1822C3 ::v53(){vfunc_called(this, "_ZN7S1822C33v53Ev");}
void  S1822C3 ::v54(){vfunc_called(this, "_ZN7S1822C33v54Ev");}
void  S1822C3 ::v55(){vfunc_called(this, "_ZN7S1822C33v55Ev");}
S1822C3 ::~S1822C3(){ note_dtor("S1822C3", this);} // tgen
S1822C3 ::S1822C3(){ note_ctor("S1822C3", this);} // tgen

static void Test_S1822C3()
{
  extern Class_Descriptor cd_S1822C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1822C3, buf);
    S1822C3 *dp, &lv = *(dp=new (buf) S1822C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1822C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1822C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1822C3");
    test_class_info(&lv, &cd_S1822C3);
    dp->~S1822C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1822C3(Test_S1822C3, "S1822C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1822C3C1Ev();
extern void _ZN7S1822C3D1Ev();
Name_Map name_map_S1822C3[] = {
  NSPAIR(_ZN7S1822C3C1Ev),
  NSPAIR(_ZN7S1822C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1822C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1822C3[];
extern void _ZN7S1822C3D1Ev();
extern void _ZN7S1822C3D0Ev();
extern void _ZN7S1822C32v6Ev();
extern void _ZN7S1822C32v7Ev();
extern void _ZN7S1822C32v8Ev();
extern void _ZN7S1822C32v9Ev();
extern void _ZN7S1822C33v10Ev();
extern void _ZN7S1822C33v11Ev();
extern void _ZN7S1822C33v12Ev();
extern void _ZN7S1822C33v13Ev();
extern void _ZN7S1822C33v14Ev();
extern void _ZN7S1822C33v15Ev();
extern void _ZN7S1822C33v16Ev();
extern void _ZN7S1822C33v17Ev();
extern void _ZN7S1822C33v18Ev();
extern void _ZN7S1822C33v19Ev();
extern void _ZN7S1822C33v20Ev();
extern void _ZN7S1822C33v21Ev();
extern void _ZN7S1822C33v22Ev();
extern void _ZN7S1822C33v23Ev();
extern void _ZN7S1822C33v24Ev();
extern void _ZN7S1822C33v25Ev();
extern void _ZN7S1822C33v26Ev();
extern void _ZN7S1822C33v27Ev();
extern void _ZN7S1822C33v28Ev();
extern void _ZN7S1822C33v29Ev();
extern void _ZN7S1822C33v30Ev();
extern void _ZN7S1822C33v31Ev();
extern void _ZN7S1822C33v32Ev();
extern void _ZN7S1822C33v33Ev();
extern void _ZN7S1822C33v34Ev();
extern void _ZN7S1822C33v35Ev();
extern void _ZN7S1822C33v36Ev();
extern void _ZN7S1822C33v37Ev();
extern void _ZN7S1822C33v38Ev();
extern void _ZN7S1822C33v39Ev();
extern void _ZN7S1822C33v40Ev();
extern void _ZN7S1822C33v41Ev();
extern void _ZN7S1822C33v42Ev();
extern void _ZN7S1822C33v43Ev();
extern void _ZN7S1822C33v44Ev();
extern void _ZN7S1822C33v45Ev();
extern void _ZN7S1822C33v46Ev();
extern void _ZN7S1822C33v47Ev();
extern void _ZN7S1822C33v48Ev();
extern void _ZN7S1822C33v49Ev();
extern void _ZN7S1822C33v50Ev();
extern void _ZN7S1822C33v51Ev();
extern void _ZN7S1822C33v52Ev();
extern void _ZN7S1822C33v53Ev();
extern void _ZN7S1822C33v54Ev();
extern void _ZN7S1822C33v55Ev();
static  VTBL_ENTRY vtc_S1822C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1822C3[0]),
  (VTBL_ENTRY)&_ZN7S1822C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1822C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v55Ev,
};
extern VTBL_ENTRY _ZTI7S1822C3[];
extern  VTBL_ENTRY _ZTV7S1822C3[];
Class_Descriptor cd_S1822C3 = {  "S1822C3", // class name
  bases_S1822C3, 1,
  &(vtc_S1822C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1822C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1822C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1822C2  : S1822C3 {
  virtual void  v56(); // _ZN7S1822C23v56Ev
  ~S1822C2(); // tgen
  S1822C2(); // tgen
};
//SIG(-1 S1822C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1822C2 ::v56(){vfunc_called(this, "_ZN7S1822C23v56Ev");}
S1822C2 ::~S1822C2(){ note_dtor("S1822C2", this);} // tgen
S1822C2 ::S1822C2(){ note_ctor("S1822C2", this);} // tgen

static void Test_S1822C2()
{
  extern Class_Descriptor cd_S1822C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1822C2, buf);
    S1822C2 *dp, &lv = *(dp=new (buf) S1822C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1822C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1822C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1822C3*), 0, "S1822C2");
    check_base_class_offset(lv, (S1822C3*), 0, "S1822C2");
    test_class_info(&lv, &cd_S1822C2);
    dp->~S1822C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1822C2(Test_S1822C2, "S1822C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1822C2C1Ev();
extern void _ZN7S1822C2D1Ev();
Name_Map name_map_S1822C2[] = {
  NSPAIR(_ZN7S1822C2C1Ev),
  NSPAIR(_ZN7S1822C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1822C3;
extern VTBL_ENTRY _ZTI7S1822C3[];
extern  VTBL_ENTRY _ZTV7S1822C3[];
static Base_Class bases_S1822C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1822C2[];
extern void _ZN7S1822C2D1Ev();
extern void _ZN7S1822C2D0Ev();
extern void _ZN7S1822C32v6Ev();
extern void _ZN7S1822C32v7Ev();
extern void _ZN7S1822C32v8Ev();
extern void _ZN7S1822C32v9Ev();
extern void _ZN7S1822C33v10Ev();
extern void _ZN7S1822C33v11Ev();
extern void _ZN7S1822C33v12Ev();
extern void _ZN7S1822C33v13Ev();
extern void _ZN7S1822C33v14Ev();
extern void _ZN7S1822C33v15Ev();
extern void _ZN7S1822C33v16Ev();
extern void _ZN7S1822C33v17Ev();
extern void _ZN7S1822C33v18Ev();
extern void _ZN7S1822C33v19Ev();
extern void _ZN7S1822C33v20Ev();
extern void _ZN7S1822C33v21Ev();
extern void _ZN7S1822C33v22Ev();
extern void _ZN7S1822C33v23Ev();
extern void _ZN7S1822C33v24Ev();
extern void _ZN7S1822C33v25Ev();
extern void _ZN7S1822C33v26Ev();
extern void _ZN7S1822C33v27Ev();
extern void _ZN7S1822C33v28Ev();
extern void _ZN7S1822C33v29Ev();
extern void _ZN7S1822C33v30Ev();
extern void _ZN7S1822C33v31Ev();
extern void _ZN7S1822C33v32Ev();
extern void _ZN7S1822C33v33Ev();
extern void _ZN7S1822C33v34Ev();
extern void _ZN7S1822C33v35Ev();
extern void _ZN7S1822C33v36Ev();
extern void _ZN7S1822C33v37Ev();
extern void _ZN7S1822C33v38Ev();
extern void _ZN7S1822C33v39Ev();
extern void _ZN7S1822C33v40Ev();
extern void _ZN7S1822C33v41Ev();
extern void _ZN7S1822C33v42Ev();
extern void _ZN7S1822C33v43Ev();
extern void _ZN7S1822C33v44Ev();
extern void _ZN7S1822C33v45Ev();
extern void _ZN7S1822C33v46Ev();
extern void _ZN7S1822C33v47Ev();
extern void _ZN7S1822C33v48Ev();
extern void _ZN7S1822C33v49Ev();
extern void _ZN7S1822C33v50Ev();
extern void _ZN7S1822C33v51Ev();
extern void _ZN7S1822C33v52Ev();
extern void _ZN7S1822C33v53Ev();
extern void _ZN7S1822C33v54Ev();
extern void _ZN7S1822C33v55Ev();
extern void _ZN7S1822C23v56Ev();
static  VTBL_ENTRY vtc_S1822C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1822C2[0]),
  (VTBL_ENTRY)&_ZN7S1822C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1822C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1822C23v56Ev,
};
extern VTBL_ENTRY _ZTI7S1822C2[];
extern  VTBL_ENTRY _ZTV7S1822C2[];
Class_Descriptor cd_S1822C2 = {  "S1822C2", // class name
  bases_S1822C2, 2,
  &(vtc_S1822C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1822C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1822C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1822C1  : S1822C2 {
  virtual void  v1(); // _ZN7S1822C12v1Ev
  virtual void  v2(); // _ZN7S1822C12v2Ev
  virtual void  v3(); // _ZN7S1822C12v3Ev
  virtual void  v4(); // _ZN7S1822C12v4Ev
  virtual void  v5(); // _ZN7S1822C12v5Ev
  ~S1822C1(); // tgen
  S1822C1(); // tgen
};
//SIG(1 S1822C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55} v56} v1 v2 v3 v4 v5}


void  S1822C1 ::v1(){vfunc_called(this, "_ZN7S1822C12v1Ev");}
void  S1822C1 ::v2(){vfunc_called(this, "_ZN7S1822C12v2Ev");}
void  S1822C1 ::v3(){vfunc_called(this, "_ZN7S1822C12v3Ev");}
void  S1822C1 ::v4(){vfunc_called(this, "_ZN7S1822C12v4Ev");}
void  S1822C1 ::v5(){vfunc_called(this, "_ZN7S1822C12v5Ev");}
S1822C1 ::~S1822C1(){ note_dtor("S1822C1", this);} // tgen
S1822C1 ::S1822C1(){ note_ctor("S1822C1", this);} // tgen

static void Test_S1822C1()
{
  extern Class_Descriptor cd_S1822C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1822C1, buf);
    S1822C1 *dp, &lv = *(dp=new (buf) S1822C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1822C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1822C3*)(S1822C2*), 0, "S1822C1");
    check_base_class_offset(lv, (S1822C3*)(S1822C2*), 0, "S1822C1");
    check_base_class_offset(lv, (S1822C2*), 0, "S1822C1");
    test_class_info(&lv, &cd_S1822C1);
    dp->~S1822C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1822C1(Test_S1822C1, "S1822C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1822C1C1Ev();
extern void _ZN7S1822C1D1Ev();
Name_Map name_map_S1822C1[] = {
  NSPAIR(_ZN7S1822C1C1Ev),
  NSPAIR(_ZN7S1822C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1822C3;
extern VTBL_ENTRY _ZTI7S1822C3[];
extern  VTBL_ENTRY _ZTV7S1822C3[];
extern Class_Descriptor cd_S1822C2;
extern VTBL_ENTRY _ZTI7S1822C2[];
extern  VTBL_ENTRY _ZTV7S1822C2[];
static Base_Class bases_S1822C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1822C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1822C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1822C1[];
extern void _ZN7S1822C1D1Ev();
extern void _ZN7S1822C1D0Ev();
extern void _ZN7S1822C32v6Ev();
extern void _ZN7S1822C32v7Ev();
extern void _ZN7S1822C32v8Ev();
extern void _ZN7S1822C32v9Ev();
extern void _ZN7S1822C33v10Ev();
extern void _ZN7S1822C33v11Ev();
extern void _ZN7S1822C33v12Ev();
extern void _ZN7S1822C33v13Ev();
extern void _ZN7S1822C33v14Ev();
extern void _ZN7S1822C33v15Ev();
extern void _ZN7S1822C33v16Ev();
extern void _ZN7S1822C33v17Ev();
extern void _ZN7S1822C33v18Ev();
extern void _ZN7S1822C33v19Ev();
extern void _ZN7S1822C33v20Ev();
extern void _ZN7S1822C33v21Ev();
extern void _ZN7S1822C33v22Ev();
extern void _ZN7S1822C33v23Ev();
extern void _ZN7S1822C33v24Ev();
extern void _ZN7S1822C33v25Ev();
extern void _ZN7S1822C33v26Ev();
extern void _ZN7S1822C33v27Ev();
extern void _ZN7S1822C33v28Ev();
extern void _ZN7S1822C33v29Ev();
extern void _ZN7S1822C33v30Ev();
extern void _ZN7S1822C33v31Ev();
extern void _ZN7S1822C33v32Ev();
extern void _ZN7S1822C33v33Ev();
extern void _ZN7S1822C33v34Ev();
extern void _ZN7S1822C33v35Ev();
extern void _ZN7S1822C33v36Ev();
extern void _ZN7S1822C33v37Ev();
extern void _ZN7S1822C33v38Ev();
extern void _ZN7S1822C33v39Ev();
extern void _ZN7S1822C33v40Ev();
extern void _ZN7S1822C33v41Ev();
extern void _ZN7S1822C33v42Ev();
extern void _ZN7S1822C33v43Ev();
extern void _ZN7S1822C33v44Ev();
extern void _ZN7S1822C33v45Ev();
extern void _ZN7S1822C33v46Ev();
extern void _ZN7S1822C33v47Ev();
extern void _ZN7S1822C33v48Ev();
extern void _ZN7S1822C33v49Ev();
extern void _ZN7S1822C33v50Ev();
extern void _ZN7S1822C33v51Ev();
extern void _ZN7S1822C33v52Ev();
extern void _ZN7S1822C33v53Ev();
extern void _ZN7S1822C33v54Ev();
extern void _ZN7S1822C33v55Ev();
extern void _ZN7S1822C23v56Ev();
extern void _ZN7S1822C12v1Ev();
extern void _ZN7S1822C12v2Ev();
extern void _ZN7S1822C12v3Ev();
extern void _ZN7S1822C12v4Ev();
extern void _ZN7S1822C12v5Ev();
static  VTBL_ENTRY vtc_S1822C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1822C1[0]),
  (VTBL_ENTRY)&_ZN7S1822C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1822C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1822C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1822C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1822C23v56Ev,
  (VTBL_ENTRY)&_ZN7S1822C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1822C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1822C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1822C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1822C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1822C1[];
extern  VTBL_ENTRY _ZTV7S1822C1[];
Class_Descriptor cd_S1822C1 = {  "S1822C1", // class name
  bases_S1822C1, 3,
  &(vtc_S1822C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1822C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1822C1),60, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1813C3  : S1778C4_nt {
  virtual void  v5(); // _ZN7S1813C32v5Ev
  virtual void  v6(); // _ZN7S1813C32v6Ev
  virtual void  v7(); // _ZN7S1813C32v7Ev
  virtual void  v8(); // _ZN7S1813C32v8Ev
  virtual void  v9(); // _ZN7S1813C32v9Ev
  virtual void  v10(); // _ZN7S1813C33v10Ev
  virtual void  v11(); // _ZN7S1813C33v11Ev
  virtual void  v12(); // _ZN7S1813C33v12Ev
  virtual void  v13(); // _ZN7S1813C33v13Ev
  virtual void  v14(); // _ZN7S1813C33v14Ev
  virtual void  v15(); // _ZN7S1813C33v15Ev
  virtual void  v16(); // _ZN7S1813C33v16Ev
  virtual void  v17(); // _ZN7S1813C33v17Ev
  virtual void  v18(); // _ZN7S1813C33v18Ev
  virtual void  v19(); // _ZN7S1813C33v19Ev
  virtual void  v20(); // _ZN7S1813C33v20Ev
  virtual void  v21(); // _ZN7S1813C33v21Ev
  virtual void  v22(); // _ZN7S1813C33v22Ev
  virtual void  v23(); // _ZN7S1813C33v23Ev
  virtual void  v24(); // _ZN7S1813C33v24Ev
  virtual void  v25(); // _ZN7S1813C33v25Ev
  virtual void  v26(); // _ZN7S1813C33v26Ev
  virtual void  v27(); // _ZN7S1813C33v27Ev
  virtual void  v28(); // _ZN7S1813C33v28Ev
  virtual void  v29(); // _ZN7S1813C33v29Ev
  virtual void  v30(); // _ZN7S1813C33v30Ev
  virtual void  v31(); // _ZN7S1813C33v31Ev
  virtual void  v32(); // _ZN7S1813C33v32Ev
  virtual void  v33(); // _ZN7S1813C33v33Ev
  virtual void  v34(); // _ZN7S1813C33v34Ev
  virtual void  v35(); // _ZN7S1813C33v35Ev
  virtual void  v36(); // _ZN7S1813C33v36Ev
  virtual void  v37(); // _ZN7S1813C33v37Ev
  virtual void  v38(); // _ZN7S1813C33v38Ev
  virtual void  v39(); // _ZN7S1813C33v39Ev
  virtual void  v40(); // _ZN7S1813C33v40Ev
  virtual void  v41(); // _ZN7S1813C33v41Ev
  virtual void  v42(); // _ZN7S1813C33v42Ev
  virtual void  v43(); // _ZN7S1813C33v43Ev
  virtual void  v44(); // _ZN7S1813C33v44Ev
  virtual void  v45(); // _ZN7S1813C33v45Ev
  virtual void  v46(); // _ZN7S1813C33v46Ev
  virtual void  v47(); // _ZN7S1813C33v47Ev
  virtual void  v48(); // _ZN7S1813C33v48Ev
  virtual void  v49(); // _ZN7S1813C33v49Ev
  virtual void  v50(); // _ZN7S1813C33v50Ev
  virtual void  v51(); // _ZN7S1813C33v51Ev
  virtual void  v52(); // _ZN7S1813C33v52Ev
  virtual void  v53(); // _ZN7S1813C33v53Ev
  virtual void  v54(); // _ZN7S1813C33v54Ev
  ~S1813C3(); // tgen
  S1813C3(); // tgen
};
//SIG(-1 S1813C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1813C3 ::v5(){vfunc_called(this, "_ZN7S1813C32v5Ev");}
void  S1813C3 ::v6(){vfunc_called(this, "_ZN7S1813C32v6Ev");}
void  S1813C3 ::v7(){vfunc_called(this, "_ZN7S1813C32v7Ev");}
void  S1813C3 ::v8(){vfunc_called(this, "_ZN7S1813C32v8Ev");}
void  S1813C3 ::v9(){vfunc_called(this, "_ZN7S1813C32v9Ev");}
void  S1813C3 ::v10(){vfunc_called(this, "_ZN7S1813C33v10Ev");}
void  S1813C3 ::v11(){vfunc_called(this, "_ZN7S1813C33v11Ev");}
void  S1813C3 ::v12(){vfunc_called(this, "_ZN7S1813C33v12Ev");}
void  S1813C3 ::v13(){vfunc_called(this, "_ZN7S1813C33v13Ev");}
void  S1813C3 ::v14(){vfunc_called(this, "_ZN7S1813C33v14Ev");}
void  S1813C3 ::v15(){vfunc_called(this, "_ZN7S1813C33v15Ev");}
void  S1813C3 ::v16(){vfunc_called(this, "_ZN7S1813C33v16Ev");}
void  S1813C3 ::v17(){vfunc_called(this, "_ZN7S1813C33v17Ev");}
void  S1813C3 ::v18(){vfunc_called(this, "_ZN7S1813C33v18Ev");}
void  S1813C3 ::v19(){vfunc_called(this, "_ZN7S1813C33v19Ev");}
void  S1813C3 ::v20(){vfunc_called(this, "_ZN7S1813C33v20Ev");}
void  S1813C3 ::v21(){vfunc_called(this, "_ZN7S1813C33v21Ev");}
void  S1813C3 ::v22(){vfunc_called(this, "_ZN7S1813C33v22Ev");}
void  S1813C3 ::v23(){vfunc_called(this, "_ZN7S1813C33v23Ev");}
void  S1813C3 ::v24(){vfunc_called(this, "_ZN7S1813C33v24Ev");}
void  S1813C3 ::v25(){vfunc_called(this, "_ZN7S1813C33v25Ev");}
void  S1813C3 ::v26(){vfunc_called(this, "_ZN7S1813C33v26Ev");}
void  S1813C3 ::v27(){vfunc_called(this, "_ZN7S1813C33v27Ev");}
void  S1813C3 ::v28(){vfunc_called(this, "_ZN7S1813C33v28Ev");}
void  S1813C3 ::v29(){vfunc_called(this, "_ZN7S1813C33v29Ev");}
void  S1813C3 ::v30(){vfunc_called(this, "_ZN7S1813C33v30Ev");}
void  S1813C3 ::v31(){vfunc_called(this, "_ZN7S1813C33v31Ev");}
void  S1813C3 ::v32(){vfunc_called(this, "_ZN7S1813C33v32Ev");}
void  S1813C3 ::v33(){vfunc_called(this, "_ZN7S1813C33v33Ev");}
void  S1813C3 ::v34(){vfunc_called(this, "_ZN7S1813C33v34Ev");}
void  S1813C3 ::v35(){vfunc_called(this, "_ZN7S1813C33v35Ev");}
void  S1813C3 ::v36(){vfunc_called(this, "_ZN7S1813C33v36Ev");}
void  S1813C3 ::v37(){vfunc_called(this, "_ZN7S1813C33v37Ev");}
void  S1813C3 ::v38(){vfunc_called(this, "_ZN7S1813C33v38Ev");}
void  S1813C3 ::v39(){vfunc_called(this, "_ZN7S1813C33v39Ev");}
void  S1813C3 ::v40(){vfunc_called(this, "_ZN7S1813C33v40Ev");}
void  S1813C3 ::v41(){vfunc_called(this, "_ZN7S1813C33v41Ev");}
void  S1813C3 ::v42(){vfunc_called(this, "_ZN7S1813C33v42Ev");}
void  S1813C3 ::v43(){vfunc_called(this, "_ZN7S1813C33v43Ev");}
void  S1813C3 ::v44(){vfunc_called(this, "_ZN7S1813C33v44Ev");}
void  S1813C3 ::v45(){vfunc_called(this, "_ZN7S1813C33v45Ev");}
void  S1813C3 ::v46(){vfunc_called(this, "_ZN7S1813C33v46Ev");}
void  S1813C3 ::v47(){vfunc_called(this, "_ZN7S1813C33v47Ev");}
void  S1813C3 ::v48(){vfunc_called(this, "_ZN7S1813C33v48Ev");}
void  S1813C3 ::v49(){vfunc_called(this, "_ZN7S1813C33v49Ev");}
void  S1813C3 ::v50(){vfunc_called(this, "_ZN7S1813C33v50Ev");}
void  S1813C3 ::v51(){vfunc_called(this, "_ZN7S1813C33v51Ev");}
void  S1813C3 ::v52(){vfunc_called(this, "_ZN7S1813C33v52Ev");}
void  S1813C3 ::v53(){vfunc_called(this, "_ZN7S1813C33v53Ev");}
void  S1813C3 ::v54(){vfunc_called(this, "_ZN7S1813C33v54Ev");}
S1813C3 ::~S1813C3(){ note_dtor("S1813C3", this);} // tgen
S1813C3 ::S1813C3(){ note_ctor("S1813C3", this);} // tgen

static void Test_S1813C3()
{
  extern Class_Descriptor cd_S1813C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1813C3, buf);
    S1813C3 *dp, &lv = *(dp=new (buf) S1813C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1813C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1813C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1813C3");
    test_class_info(&lv, &cd_S1813C3);
    dp->~S1813C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1813C3(Test_S1813C3, "S1813C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1813C3C1Ev();
extern void _ZN7S1813C3D1Ev();
Name_Map name_map_S1813C3[] = {
  NSPAIR(_ZN7S1813C3C1Ev),
  NSPAIR(_ZN7S1813C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1813C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1813C3[];
extern void _ZN7S1813C3D1Ev();
extern void _ZN7S1813C3D0Ev();
extern void _ZN7S1813C32v5Ev();
extern void _ZN7S1813C32v6Ev();
extern void _ZN7S1813C32v7Ev();
extern void _ZN7S1813C32v8Ev();
extern void _ZN7S1813C32v9Ev();
extern void _ZN7S1813C33v10Ev();
extern void _ZN7S1813C33v11Ev();
extern void _ZN7S1813C33v12Ev();
extern void _ZN7S1813C33v13Ev();
extern void _ZN7S1813C33v14Ev();
extern void _ZN7S1813C33v15Ev();
extern void _ZN7S1813C33v16Ev();
extern void _ZN7S1813C33v17Ev();
extern void _ZN7S1813C33v18Ev();
extern void _ZN7S1813C33v19Ev();
extern void _ZN7S1813C33v20Ev();
extern void _ZN7S1813C33v21Ev();
extern void _ZN7S1813C33v22Ev();
extern void _ZN7S1813C33v23Ev();
extern void _ZN7S1813C33v24Ev();
extern void _ZN7S1813C33v25Ev();
extern void _ZN7S1813C33v26Ev();
extern void _ZN7S1813C33v27Ev();
extern void _ZN7S1813C33v28Ev();
extern void _ZN7S1813C33v29Ev();
extern void _ZN7S1813C33v30Ev();
extern void _ZN7S1813C33v31Ev();
extern void _ZN7S1813C33v32Ev();
extern void _ZN7S1813C33v33Ev();
extern void _ZN7S1813C33v34Ev();
extern void _ZN7S1813C33v35Ev();
extern void _ZN7S1813C33v36Ev();
extern void _ZN7S1813C33v37Ev();
extern void _ZN7S1813C33v38Ev();
extern void _ZN7S1813C33v39Ev();
extern void _ZN7S1813C33v40Ev();
extern void _ZN7S1813C33v41Ev();
extern void _ZN7S1813C33v42Ev();
extern void _ZN7S1813C33v43Ev();
extern void _ZN7S1813C33v44Ev();
extern void _ZN7S1813C33v45Ev();
extern void _ZN7S1813C33v46Ev();
extern void _ZN7S1813C33v47Ev();
extern void _ZN7S1813C33v48Ev();
extern void _ZN7S1813C33v49Ev();
extern void _ZN7S1813C33v50Ev();
extern void _ZN7S1813C33v51Ev();
extern void _ZN7S1813C33v52Ev();
extern void _ZN7S1813C33v53Ev();
extern void _ZN7S1813C33v54Ev();
static  VTBL_ENTRY vtc_S1813C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1813C3[0]),
  (VTBL_ENTRY)&_ZN7S1813C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1813C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v54Ev,
};
extern VTBL_ENTRY _ZTI7S1813C3[];
extern  VTBL_ENTRY _ZTV7S1813C3[];
Class_Descriptor cd_S1813C3 = {  "S1813C3", // class name
  bases_S1813C3, 1,
  &(vtc_S1813C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1813C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1813C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1813C2  : S1813C3 {
  virtual void  v55(); // _ZN7S1813C23v55Ev
  ~S1813C2(); // tgen
  S1813C2(); // tgen
};
//SIG(-1 S1813C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1813C2 ::v55(){vfunc_called(this, "_ZN7S1813C23v55Ev");}
S1813C2 ::~S1813C2(){ note_dtor("S1813C2", this);} // tgen
S1813C2 ::S1813C2(){ note_ctor("S1813C2", this);} // tgen

static void Test_S1813C2()
{
  extern Class_Descriptor cd_S1813C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1813C2, buf);
    S1813C2 *dp, &lv = *(dp=new (buf) S1813C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1813C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1813C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1813C3*), 0, "S1813C2");
    check_base_class_offset(lv, (S1813C3*), 0, "S1813C2");
    test_class_info(&lv, &cd_S1813C2);
    dp->~S1813C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1813C2(Test_S1813C2, "S1813C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1813C2C1Ev();
extern void _ZN7S1813C2D1Ev();
Name_Map name_map_S1813C2[] = {
  NSPAIR(_ZN7S1813C2C1Ev),
  NSPAIR(_ZN7S1813C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1813C3;
extern VTBL_ENTRY _ZTI7S1813C3[];
extern  VTBL_ENTRY _ZTV7S1813C3[];
static Base_Class bases_S1813C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1813C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1813C2[];
extern void _ZN7S1813C2D1Ev();
extern void _ZN7S1813C2D0Ev();
extern void _ZN7S1813C32v5Ev();
extern void _ZN7S1813C32v6Ev();
extern void _ZN7S1813C32v7Ev();
extern void _ZN7S1813C32v8Ev();
extern void _ZN7S1813C32v9Ev();
extern void _ZN7S1813C33v10Ev();
extern void _ZN7S1813C33v11Ev();
extern void _ZN7S1813C33v12Ev();
extern void _ZN7S1813C33v13Ev();
extern void _ZN7S1813C33v14Ev();
extern void _ZN7S1813C33v15Ev();
extern void _ZN7S1813C33v16Ev();
extern void _ZN7S1813C33v17Ev();
extern void _ZN7S1813C33v18Ev();
extern void _ZN7S1813C33v19Ev();
extern void _ZN7S1813C33v20Ev();
extern void _ZN7S1813C33v21Ev();
extern void _ZN7S1813C33v22Ev();
extern void _ZN7S1813C33v23Ev();
extern void _ZN7S1813C33v24Ev();
extern void _ZN7S1813C33v25Ev();
extern void _ZN7S1813C33v26Ev();
extern void _ZN7S1813C33v27Ev();
extern void _ZN7S1813C33v28Ev();
extern void _ZN7S1813C33v29Ev();
extern void _ZN7S1813C33v30Ev();
extern void _ZN7S1813C33v31Ev();
extern void _ZN7S1813C33v32Ev();
extern void _ZN7S1813C33v33Ev();
extern void _ZN7S1813C33v34Ev();
extern void _ZN7S1813C33v35Ev();
extern void _ZN7S1813C33v36Ev();
extern void _ZN7S1813C33v37Ev();
extern void _ZN7S1813C33v38Ev();
extern void _ZN7S1813C33v39Ev();
extern void _ZN7S1813C33v40Ev();
extern void _ZN7S1813C33v41Ev();
extern void _ZN7S1813C33v42Ev();
extern void _ZN7S1813C33v43Ev();
extern void _ZN7S1813C33v44Ev();
extern void _ZN7S1813C33v45Ev();
extern void _ZN7S1813C33v46Ev();
extern void _ZN7S1813C33v47Ev();
extern void _ZN7S1813C33v48Ev();
extern void _ZN7S1813C33v49Ev();
extern void _ZN7S1813C33v50Ev();
extern void _ZN7S1813C33v51Ev();
extern void _ZN7S1813C33v52Ev();
extern void _ZN7S1813C33v53Ev();
extern void _ZN7S1813C33v54Ev();
extern void _ZN7S1813C23v55Ev();
static  VTBL_ENTRY vtc_S1813C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1813C2[0]),
  (VTBL_ENTRY)&_ZN7S1813C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1813C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1813C23v55Ev,
};
extern VTBL_ENTRY _ZTI7S1813C2[];
extern  VTBL_ENTRY _ZTV7S1813C2[];
Class_Descriptor cd_S1813C2 = {  "S1813C2", // class name
  bases_S1813C2, 2,
  &(vtc_S1813C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1813C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1813C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1813C1  : S1813C2 {
  virtual void  v1(); // _ZN7S1813C12v1Ev
  virtual void  v2(); // _ZN7S1813C12v2Ev
  virtual void  v3(); // _ZN7S1813C12v3Ev
  virtual void  v4(); // _ZN7S1813C12v4Ev
  ~S1813C1(); // tgen
  S1813C1(); // tgen
};
//SIG(1 S1813C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54} v55} v1 v2 v3 v4}


void  S1813C1 ::v1(){vfunc_called(this, "_ZN7S1813C12v1Ev");}
void  S1813C1 ::v2(){vfunc_called(this, "_ZN7S1813C12v2Ev");}
void  S1813C1 ::v3(){vfunc_called(this, "_ZN7S1813C12v3Ev");}
void  S1813C1 ::v4(){vfunc_called(this, "_ZN7S1813C12v4Ev");}
S1813C1 ::~S1813C1(){ note_dtor("S1813C1", this);} // tgen
S1813C1 ::S1813C1(){ note_ctor("S1813C1", this);} // tgen

static void Test_S1813C1()
{
  extern Class_Descriptor cd_S1813C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1813C1, buf);
    S1813C1 *dp, &lv = *(dp=new (buf) S1813C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1813C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1813C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1813C3*)(S1813C2*), 0, "S1813C1");
    check_base_class_offset(lv, (S1813C3*)(S1813C2*), 0, "S1813C1");
    check_base_class_offset(lv, (S1813C2*), 0, "S1813C1");
    test_class_info(&lv, &cd_S1813C1);
    dp->~S1813C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1813C1(Test_S1813C1, "S1813C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1813C1C1Ev();
extern void _ZN7S1813C1D1Ev();
Name_Map name_map_S1813C1[] = {
  NSPAIR(_ZN7S1813C1C1Ev),
  NSPAIR(_ZN7S1813C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1813C3;
extern VTBL_ENTRY _ZTI7S1813C3[];
extern  VTBL_ENTRY _ZTV7S1813C3[];
extern Class_Descriptor cd_S1813C2;
extern VTBL_ENTRY _ZTI7S1813C2[];
extern  VTBL_ENTRY _ZTV7S1813C2[];
static Base_Class bases_S1813C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1813C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1813C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1813C1[];
extern void _ZN7S1813C1D1Ev();
extern void _ZN7S1813C1D0Ev();
extern void _ZN7S1813C32v5Ev();
extern void _ZN7S1813C32v6Ev();
extern void _ZN7S1813C32v7Ev();
extern void _ZN7S1813C32v8Ev();
extern void _ZN7S1813C32v9Ev();
extern void _ZN7S1813C33v10Ev();
extern void _ZN7S1813C33v11Ev();
extern void _ZN7S1813C33v12Ev();
extern void _ZN7S1813C33v13Ev();
extern void _ZN7S1813C33v14Ev();
extern void _ZN7S1813C33v15Ev();
extern void _ZN7S1813C33v16Ev();
extern void _ZN7S1813C33v17Ev();
extern void _ZN7S1813C33v18Ev();
extern void _ZN7S1813C33v19Ev();
extern void _ZN7S1813C33v20Ev();
extern void _ZN7S1813C33v21Ev();
extern void _ZN7S1813C33v22Ev();
extern void _ZN7S1813C33v23Ev();
extern void _ZN7S1813C33v24Ev();
extern void _ZN7S1813C33v25Ev();
extern void _ZN7S1813C33v26Ev();
extern void _ZN7S1813C33v27Ev();
extern void _ZN7S1813C33v28Ev();
extern void _ZN7S1813C33v29Ev();
extern void _ZN7S1813C33v30Ev();
extern void _ZN7S1813C33v31Ev();
extern void _ZN7S1813C33v32Ev();
extern void _ZN7S1813C33v33Ev();
extern void _ZN7S1813C33v34Ev();
extern void _ZN7S1813C33v35Ev();
extern void _ZN7S1813C33v36Ev();
extern void _ZN7S1813C33v37Ev();
extern void _ZN7S1813C33v38Ev();
extern void _ZN7S1813C33v39Ev();
extern void _ZN7S1813C33v40Ev();
extern void _ZN7S1813C33v41Ev();
extern void _ZN7S1813C33v42Ev();
extern void _ZN7S1813C33v43Ev();
extern void _ZN7S1813C33v44Ev();
extern void _ZN7S1813C33v45Ev();
extern void _ZN7S1813C33v46Ev();
extern void _ZN7S1813C33v47Ev();
extern void _ZN7S1813C33v48Ev();
extern void _ZN7S1813C33v49Ev();
extern void _ZN7S1813C33v50Ev();
extern void _ZN7S1813C33v51Ev();
extern void _ZN7S1813C33v52Ev();
extern void _ZN7S1813C33v53Ev();
extern void _ZN7S1813C33v54Ev();
extern void _ZN7S1813C23v55Ev();
extern void _ZN7S1813C12v1Ev();
extern void _ZN7S1813C12v2Ev();
extern void _ZN7S1813C12v3Ev();
extern void _ZN7S1813C12v4Ev();
static  VTBL_ENTRY vtc_S1813C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1813C1[0]),
  (VTBL_ENTRY)&_ZN7S1813C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1813C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1813C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1813C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1813C23v55Ev,
  (VTBL_ENTRY)&_ZN7S1813C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1813C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1813C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1813C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1813C1[];
extern  VTBL_ENTRY _ZTV7S1813C1[];
Class_Descriptor cd_S1813C1 = {  "S1813C1", // class name
  bases_S1813C1, 3,
  &(vtc_S1813C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1813C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1813C1),59, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C8  : S5217C60_nt {
  void *s20685c8f0[2];
};
//SIG(-1 S20685C8) C1{ BC2{ m Fp} Fp[2]}



static void Test_S20685C8()
{
  extern Class_Descriptor cd_S20685C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20685C8, buf);
    S20685C8 &lv = *(new (buf) S20685C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20685C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C8)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S20685C8");
    check_field_offset(lv, s20685c8f0, ABISELECT(8,4), "S20685C8.s20685c8f0");
    test_class_info(&lv, &cd_S20685C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C8(Test_S20685C8, "S20685C8", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S20685C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C8[];
Class_Descriptor cd_S20685C8 = {  "S20685C8", // class name
  bases_S20685C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20685C8),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C9  : virtual S5217C60_nt , virtual S20685C8 {
  virtual  ~S20685C9(); // _ZN8S20685C9D2Ev
  S20685C9(); // tgen
};
//SIG(-1 S20685C9) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S20685C9 ::~S20685C9(){ note_dtor("S20685C9", this);}
S20685C9 ::S20685C9(){ note_ctor("S20685C9", this);} // tgen

static void Test_S20685C9()
{
  extern Class_Descriptor cd_S20685C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20685C9, buf);
    S20685C9 *dp, &lv = *(dp=new (buf) S20685C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20685C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C9)");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20685C9");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(16,8), "S20685C9");
    check_base_class_offset(lv, (S20685C8*), ABISELECT(16,8), "S20685C9");
    test_class_info(&lv, &cd_S20685C9);
    dp->~S20685C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C9(Test_S20685C9, "S20685C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20685C9C1Ev();
extern void _ZN8S20685C9D2Ev();
Name_Map name_map_S20685C9[] = {
  NSPAIR(_ZN8S20685C9C1Ev),
  NSPAIR(_ZN8S20685C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
static Base_Class bases_S20685C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C9[];
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY vtc_S20685C9[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S20685C9[];
static  VTT_ENTRY vtt_S20685C9[] = {
  {&(_ZTV8S20685C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
Class_Descriptor cd_S20685C9 = {  "S20685C9", // class name
  bases_S20685C9, 3,
  &(vtc_S20685C9[0]), // expected_vtbl_contents
  &(vtt_S20685C9[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20685C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20685C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C9),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C7  : virtual S20685C8 , virtual S5217C60_nt , virtual S20685C9 , virtual S2265C38 {
  int s20685c7f0[9];
  virtual  ~S20685C7(); // _ZN8S20685C7D2Ev
  S20685C7(); // tgen
};
//SIG(-1 S20685C7) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S20685C7 ::~S20685C7(){ note_dtor("S20685C7", this);}
S20685C7 ::S20685C7(){ note_ctor("S20685C7", this);} // tgen

static void Test_S20685C7()
{
  extern Class_Descriptor cd_S20685C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S20685C7, buf);
    S20685C7 *dp, &lv = *(dp=new (buf) S20685C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S20685C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C7)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(48,40), "S20685C7");
    check_base_class_offset(lv, (S20685C8*), ABISELECT(48,40), "S20685C7");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(48,40), "S20685C7");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S20685C7");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(72,52), "S20685C7");
    check_base_class_offset(lv, (S20685C9*), 0, "S20685C7");
    check_base_class_offset(lv, (S2265C38*), 0, "S20685C7");
    check_field_offset(lv, s20685c7f0, ABISELECT(8,4), "S20685C7.s20685c7f0");
    test_class_info(&lv, &cd_S20685C7);
    dp->~S20685C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C7(Test_S20685C7, "S20685C7", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S20685C7C1Ev();
extern void _ZN8S20685C7D2Ev();
Name_Map name_map_S20685C7[] = {
  NSPAIR(_ZN8S20685C7C1Ev),
  NSPAIR(_ZN8S20685C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20685C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20685C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C7[];
extern void _ZN8S20685C7D1Ev();
extern void _ZN8S20685C7D0Ev();
static  VTBL_ENTRY vtc_S20685C7[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&_ZN8S20685C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S20685C7[];
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
static  VTT_ENTRY vtt_S20685C7[] = {
  {&(_ZTV8S20685C7[7]),  7,9},
  {&(_ZTV8S20685C7[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
Class_Descriptor cd_S20685C7 = {  "S20685C7", // class name
  bases_S20685C7, 5,
  &(vtc_S20685C7[0]), // expected_vtbl_contents
  &(vtt_S20685C7[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S20685C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20685C7),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C6  : virtual S20685C7 , S2265C38 , virtual S2265C28 {
  void *s20685c6f0;
  ~S20685C6(); // tgen
  S20685C6(); // tgen
};
//SIG(-1 S20685C6) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S20685C6 ::~S20685C6(){ note_dtor("S20685C6", this);} // tgen
S20685C6 ::S20685C6(){ note_ctor("S20685C6", this);} // tgen

static void Test_S20685C6()
{
  extern Class_Descriptor cd_S20685C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S20685C6, buf);
    S20685C6 *dp, &lv = *(dp=new (buf) S20685C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S20685C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C6)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(64,48), "S20685C6");
    check_base_class_offset(lv, (S20685C8*)(S20685C7*), ABISELECT(64,48), "S20685C6");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(64,48), "S20685C6");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C7*), ABISELECT(88,60), "S20685C6");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(88,60), "S20685C6");
    check_base_class_offset(lv, (S20685C9*)(S20685C7*), 0, "S20685C6");
    check_base_class_offset(lv, (S2265C38*)(S20685C7*), ABISELECT(96,64), "S20685C6");
    check_base_class_offset(lv, (S20685C7*), ABISELECT(16,8), "S20685C6");
    /*is_ambiguous_... S20685C6::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20685C6");
    check_base_class_offset(lv, (S2265C28*), 0, "S20685C6");
    check_field_offset(lv, s20685c6f0, ABISELECT(8,4), "S20685C6.s20685c6f0");
    test_class_info(&lv, &cd_S20685C6);
    dp->~S20685C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C6(Test_S20685C6, "S20685C6", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN8S20685C6C1Ev();
extern void _ZN8S20685C6D1Ev();
Name_Map name_map_S20685C6[] = {
  NSPAIR(_ZN8S20685C6C1Ev),
  NSPAIR(_ZN8S20685C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C7;
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20685C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20685C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20685C7,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C6[];
extern void _ZN8S20685C6D1Ev();
extern void _ZN8S20685C6D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20685C6[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&_ZN8S20685C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C6D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S20685C6[];
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void _ZN8S20685C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
extern void _ZN8S20685C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C6[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7__8S20685C6[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C6[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
static  VTT_ENTRY vtt_S20685C6[] = {
  {&(_ZTV8S20685C6[9]),  9,20},
  {&(_ZTV8S20685C6[18]),  18,20},
  {&(_ZTV8S20685C6[9]),  9,20},
  {&(_tg__ZTV8S20685C7__8S20685C6[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7__8S20685C6[5]),  5,7},
  {&(_tg__ZTV8S20685C9__8S20685C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C6 = {  "S20685C6", // class name
  bases_S20685C6, 8,
  &(vtc_S20685C6[0]), // expected_vtbl_contents
  &(vtt_S20685C6[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI8S20685C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20685C6),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C6),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C14  : S5217C60_nt , S20685C8 {
};
//SIG(-1 S20685C14) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S20685C14()
{
  extern Class_Descriptor cd_S20685C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20685C14, buf);
    S20685C14 &lv = *(new (buf) S20685C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20685C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C14)");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S20685C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(8,4), "S20685C14");
    check_base_class_offset(lv, (S20685C8*), ABISELECT(8,4), "S20685C14");
    test_class_info(&lv, &cd_S20685C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C14(Test_S20685C14, "S20685C14", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
static Base_Class bases_S20685C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20685C14[];
Class_Descriptor cd_S20685C14 = {  "S20685C14", // class name
  bases_S20685C14, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20685C14),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C13  : virtual S5217C60_nt , S2265C38 , virtual S20685C14 , virtual S20685C9 {
  ~S20685C13(); // tgen
  S20685C13(); // tgen
};
//SIG(-1 S20685C13) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S20685C13 ::~S20685C13(){ note_dtor("S20685C13", this);} // tgen
S20685C13 ::S20685C13(){ note_ctor("S20685C13", this);} // tgen

static void Test_S20685C13()
{
  extern Class_Descriptor cd_S20685C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20685C13, buf);
    S20685C13 *dp, &lv = *(dp=new (buf) S20685C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20685C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C13)");
    /*is_ambiguous_... S20685C13::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20685C13");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(8,4), "S20685C13");
    check_base_class_offset(lv, (S2265C38*), 0, "S20685C13");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(16,8), "S20685C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(24,12), "S20685C13");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(24,12), "S20685C13");
    check_base_class_offset(lv, (S20685C14*), ABISELECT(16,8), "S20685C13");
    /*is_ambiguous_... S20685C13::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(48,24), "S20685C13");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(48,24), "S20685C13");
    check_base_class_offset(lv, (S20685C9*), 0, "S20685C13");
    test_class_info(&lv, &cd_S20685C13);
    dp->~S20685C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C13(Test_S20685C13, "S20685C13", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20685C13C1Ev();
extern void _ZN9S20685C13D1Ev();
Name_Map name_map_S20685C13[] = {
  NSPAIR(_ZN9S20685C13C1Ev),
  NSPAIR(_ZN9S20685C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
static Base_Class bases_S20685C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20685C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20685C13[];
extern void _ZN9S20685C13D1Ev();
extern void _ZN9S20685C13D0Ev();
static  VTBL_ENTRY vtc_S20685C13[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&_ZN9S20685C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C13D0Ev,
};
extern VTBL_ENTRY _ZTV9S20685C13[];
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C13[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
static  VTT_ENTRY vtt_S20685C13[] = {
  {&(_ZTV9S20685C13[7]),  7,9},
  {&(_ZTV9S20685C13[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
Class_Descriptor cd_S20685C13 = {  "S20685C13", // class name
  bases_S20685C13, 9,
  &(vtc_S20685C13[0]), // expected_vtbl_contents
  &(vtt_S20685C13[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20685C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20685C13),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20685C13),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C12  : virtual S20685C13 {
  ::S20685C9 s20685c12f0;
  ~S20685C12(); // tgen
  S20685C12(); // tgen
};
//SIG(-1 S20685C12) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S20685C12 ::~S20685C12(){ note_dtor("S20685C12", this);} // tgen
S20685C12 ::S20685C12(){ note_ctor("S20685C12", this);} // tgen

static void Test_S20685C12()
{
  extern Class_Descriptor cd_S20685C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20685C12, buf);
    S20685C12 *dp, &lv = *(dp=new (buf) S20685C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20685C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C12)");
    /*is_ambiguous_... S20685C13::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*), ABISELECT(48,24), "S20685C12");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(48,24), "S20685C12");
    check_base_class_offset(lv, (S2265C38*)(S20685C13*), 0, "S20685C12");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(56,28), "S20685C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(64,32), "S20685C12");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(64,32), "S20685C12");
    check_base_class_offset(lv, (S20685C14*)(S20685C13*), ABISELECT(56,28), "S20685C12");
    /*is_ambiguous_... S20685C12::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(88,44), "S20685C12");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(88,44), "S20685C12");
    check_base_class_offset(lv, (S20685C9*)(S20685C13*), 0, "S20685C12");
    check_base_class_offset(lv, (S20685C13*), 0, "S20685C12");
    check_field_offset(lv, s20685c12f0, ABISELECT(8,4), "S20685C12.s20685c12f0");
    test_class_info(&lv, &cd_S20685C12);
    dp->~S20685C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C12(Test_S20685C12, "S20685C12", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S20685C12C1Ev();
extern void _ZN9S20685C12D1Ev();
Name_Map name_map_S20685C12[] = {
  NSPAIR(_ZN9S20685C12C1Ev),
  NSPAIR(_ZN9S20685C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
static Base_Class bases_S20685C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20685C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20685C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20685C12[];
extern void _ZN9S20685C12D1Ev();
extern void _ZN9S20685C12D0Ev();
static  VTBL_ENTRY vtc_S20685C12[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&_ZN9S20685C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C12D0Ev,
};
extern VTBL_ENTRY _ZTV9S20685C12[];
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C13__9S20685C12[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C12[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
static  VTT_ENTRY vtt_S20685C12[] = {
  {&(_ZTV9S20685C12[8]),  8,10},
  {&(_ZTV9S20685C12[8]),  8,10},
  {&(_ZTV9S20685C12[8]),  8,10},
  {&(_tg__ZTV9S20685C13__9S20685C12[7]),  7,9},
  {&(_tg__ZTV9S20685C13__9S20685C12[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20685C12[];
extern  VTBL_ENTRY _ZTV9S20685C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C12[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C12 = {  "S20685C12", // class name
  bases_S20685C12, 10,
  &(vtc_S20685C12[0]), // expected_vtbl_contents
  &(vtt_S20685C12[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S20685C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20685C12),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20685C12),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C15  : S2265C38 , virtual S20685C8 , virtual S20685C9 , virtual S20685C14 , virtual S20685C7 {
  long s20685c15f0;
  virtual  ~S20685C15(); // _ZN9S20685C15D2Ev
  S20685C15(); // tgen
};
//SIG(-1 S20685C15) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S20685C15 ::~S20685C15(){ note_dtor("S20685C15", this);}
S20685C15 ::S20685C15(){ note_ctor("S20685C15", this);} // tgen

static void Test_S20685C15()
{
  extern Class_Descriptor cd_S20685C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S20685C15, buf);
    S20685C15 *dp, &lv = *(dp=new (buf) S20685C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S20685C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C15)");
    /*is_ambiguous_... S20685C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20685C15");
    /*is_ambiguous_... S20685C15::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(16,8), "S20685C15");
    /*is_ambiguous_... S20685C15::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*), ABISELECT(16,8), "S20685C15");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(16,8), "S20685C15");
    check_base_class_offset(lv, (S20685C8*)(S20685C7*), ABISELECT(16,8), "S20685C15");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(40,20), "S20685C15");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C7*), ABISELECT(40,20), "S20685C15");
    check_base_class_offset(lv, (S20685C9*), 0, "S20685C15");
    check_base_class_offset(lv, (S20685C9*)(S20685C7*), 0, "S20685C15");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(48,24), "S20685C15");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(56,28), "S20685C15");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(56,28), "S20685C15");
    check_base_class_offset(lv, (S20685C14*), ABISELECT(48,24), "S20685C15");
    check_base_class_offset(lv, (S2265C38*)(S20685C7*), ABISELECT(124,80), "S20685C15");
    check_base_class_offset(lv, (S20685C7*), ABISELECT(80,40), "S20685C15");
    check_field_offset(lv, s20685c15f0, ABISELECT(8,4), "S20685C15.s20685c15f0");
    test_class_info(&lv, &cd_S20685C15);
    dp->~S20685C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C15(Test_S20685C15, "S20685C15", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN9S20685C15C1Ev();
extern void _ZN9S20685C15D2Ev();
Name_Map name_map_S20685C15[] = {
  NSPAIR(_ZN9S20685C15C1Ev),
  NSPAIR(_ZN9S20685C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C7;
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
static Base_Class bases_S20685C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20685C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20685C7,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20685C15[];
extern void _ZN9S20685C15D1Ev();
extern void _ZN9S20685C15D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZThn80_N9S20685C15D1Ev,_ZThn40_N9S20685C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
extern void ABISELECT(_ZThn80_N9S20685C15D0Ev,_ZThn40_N9S20685C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20685C15[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&_ZN9S20685C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C15D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20685C15[];
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C15[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void _ZN8S20685C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
extern void _ZN8S20685C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__9S20685C15[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7__9S20685C15[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
static  VTT_ENTRY vtt_S20685C15[] = {
  {&(_ZTV9S20685C15[9]),  9,20},
  {&(_ZTV9S20685C15[9]),  9,20},
  {&(_ZTV9S20685C15[18]),  18,20},
  {&(_tg__ZTV8S20685C9__9S20685C15[4]),  4,6},
  {&(_tg__ZTV8S20685C7__9S20685C15[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7__9S20685C15[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20685C15[];
extern  VTBL_ENTRY _ZTV9S20685C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C15[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20685C15D0Ev,_ZThn40_N9S20685C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20685C15D1Ev,_ZThn40_N9S20685C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C15 = {  "S20685C15", // class name
  bases_S20685C15, 11,
  &(vtc_S20685C15[0]), // expected_vtbl_contents
  &(vtt_S20685C15[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S20685C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20685C15),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20685C15),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C16  : S20685C14 , S20685C8 , virtual S2265C38 {
  virtual  ~S20685C16(); // _ZN9S20685C16D2Ev
  S20685C16(); // tgen
};
//SIG(-1 S20685C16) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S20685C16 ::~S20685C16(){ note_dtor("S20685C16", this);}
S20685C16 ::S20685C16(){ note_ctor("S20685C16", this);} // tgen

static void Test_S20685C16()
{
  extern Class_Descriptor cd_S20685C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20685C16, buf);
    S20685C16 *dp, &lv = *(dp=new (buf) S20685C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20685C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C16)");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(8,4), "S20685C16");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(16,8), "S20685C16");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(16,8), "S20685C16");
    check_base_class_offset(lv, (S20685C14*), ABISELECT(8,4), "S20685C16");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(40,20), "S20685C16");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*), ABISELECT(40,20), "S20685C16");
    check_base_class_offset(lv, (S2265C38*), 0, "S20685C16");
    test_class_info(&lv, &cd_S20685C16);
    dp->~S20685C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C16(Test_S20685C16, "S20685C16", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20685C16C1Ev();
extern void _ZN9S20685C16D2Ev();
Name_Map name_map_S20685C16[] = {
  NSPAIR(_ZN9S20685C16C1Ev),
  NSPAIR(_ZN9S20685C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20685C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20685C16[];
extern void _ZN9S20685C16D1Ev();
extern void _ZN9S20685C16D0Ev();
static  VTBL_ENTRY vtc_S20685C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C16[0]),
  (VTBL_ENTRY)&_ZN9S20685C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C16D0Ev,
};
extern VTBL_ENTRY _ZTV9S20685C16[];
static  VTT_ENTRY vtt_S20685C16[] = {
  {&(_ZTV9S20685C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20685C16[];
extern  VTBL_ENTRY _ZTV9S20685C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C16[];
Class_Descriptor cd_S20685C16 = {  "S20685C16", // class name
  bases_S20685C16, 7,
  &(vtc_S20685C16[0]), // expected_vtbl_contents
  &(vtt_S20685C16[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20685C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20685C16),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20685C16),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C5  : virtual S20685C6 , virtual S20685C12 , virtual S20685C15 , virtual S20685C16 , S20685C13 {
  virtual  ~S20685C5(); // _ZN8S20685C5D2Ev
  S20685C5(); // tgen
};
//SIG(-1 S20685C5) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd Fl} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S20685C5 ::~S20685C5(){ note_dtor("S20685C5", this);}
S20685C5 ::S20685C5(){ note_ctor("S20685C5", this);} // tgen

static void Test_S20685C5()
{
  extern Class_Descriptor cd_S20685C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S20685C5, buf);
    S20685C5 *dp, &lv = *(dp=new (buf) S20685C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S20685C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C5)");
    /*is_ambiguous_... S20685C5::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(72,52), "S20685C5");
    check_base_class_offset(lv, (S20685C8*)(S20685C7*), ABISELECT(72,52), "S20685C5");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(72,52), "S20685C5");
    /*is_ambiguous_... S20685C15::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C15*), ABISELECT(72,52), "S20685C5");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C7*), ABISELECT(96,64), "S20685C5");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(96,64), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*), ABISELECT(96,64), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*), ABISELECT(96,64), "S20685C5");
    check_base_class_offset(lv, (S20685C9*)(S20685C7*), ABISELECT(8,4), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*), ABISELECT(8,4), "S20685C5");
    check_base_class_offset(lv, (S20685C9*)(S20685C15*), ABISELECT(8,4), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*), ABISELECT(8,4), "S20685C5");
    check_base_class_offset(lv, (S2265C38*)(S20685C7*), ABISELECT(104,68), "S20685C5");
    check_base_class_offset(lv, (S2265C38*)(S20685C16*), ABISELECT(104,68), "S20685C5");
    check_base_class_offset(lv, (S20685C7*)(S20685C6*), ABISELECT(24,12), "S20685C5");
    check_base_class_offset(lv, (S20685C7*)(S20685C15*), ABISELECT(24,12), "S20685C5");
    /*is_ambiguous_... S20685C6::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*), ABISELECT(8,4), "S20685C5");
    check_base_class_offset(lv, (S2265C28*)(S20685C6*), 0, "S20685C5");
    check_base_class_offset(lv, (S20685C6*), ABISELECT(8,4), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*), ABISELECT(112,72), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(160,96), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(168,100), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C14 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(168,100), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*), ABISELECT(160,96), "S20685C5");
    check_base_class_offset(lv, (S20685C14*)(S20685C15*), ABISELECT(160,96), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*), ABISELECT(160,96), "S20685C5");
    check_base_class_offset(lv, (S20685C13*)(S20685C12*), ABISELECT(112,72), "S20685C5");
    check_base_class_offset(lv, (S20685C12*), ABISELECT(112,72), "S20685C5");
    /*is_ambiguous_... S20685C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C15*), ABISELECT(192,112), "S20685C5");
    check_base_class_offset(lv, (S20685C15*), ABISELECT(192,112), "S20685C5");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*)(S20685C16*), ABISELECT(216,124), "S20685C5");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(224,128), "S20685C5");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(224,128), "S20685C5");
    check_base_class_offset(lv, (S20685C14*)(S20685C16*), ABISELECT(216,124), "S20685C5");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C16*), ABISELECT(248,140), "S20685C5");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C16*), ABISELECT(248,140), "S20685C5");
    check_base_class_offset(lv, (S20685C16*), ABISELECT(208,120), "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*), 0, "S20685C5");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C13*), 0, "S20685C5");
    test_class_info(&lv, &cd_S20685C5);
    dp->~S20685C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C5(Test_S20685C5, "S20685C5", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN8S20685C5C1Ev();
extern void _ZN8S20685C5D2Ev();
Name_Map name_map_S20685C5[] = {
  NSPAIR(_ZN8S20685C5C1Ev),
  NSPAIR(_ZN8S20685C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C7;
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C12;
extern VTBL_ENTRY _ZTI9S20685C12[];
extern  VTBL_ENTRY _ZTV9S20685C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C15;
extern VTBL_ENTRY _ZTI9S20685C15[];
extern  VTBL_ENTRY _ZTV9S20685C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C16;
extern VTBL_ENTRY _ZTI9S20685C16[];
extern  VTBL_ENTRY _ZTV9S20685C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
static Base_Class bases_S20685C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20685C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20685C7,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20685C6,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20685C13,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20685C12,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20685C15,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20685C16,    ABISELECT(208,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20685C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C5[];
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void _ZN8S20685C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void _ZN8S20685C5D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20685C5D1Ev,_ZThn4_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20685C5D0Ev,_ZThn4_N8S20685C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C5D1Ev,_ZThn12_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C5D0Ev,_ZThn12_N8S20685C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S20685C5D1Ev,_ZThn72_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S20685C5D0Ev,_ZThn72_N8S20685C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn192_N8S20685C5D1Ev,_ZThn112_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn192_N8S20685C5D0Ev,_ZThn112_N8S20685C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C5D1Ev,_ZThn120_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C5D0Ev,_ZThn120_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20685C5[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20685C5[];
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C13__A__8S20685C5[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20685C13D1Ev,_ZThn4_N9S20685C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20685C13D0Ev,_ZThn4_N9S20685C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C13__A__8S20685C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C6__8S20685C5[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void _ZN8S20685C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
extern void _ZN8S20685C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C5[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7__8S20685C5[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C5[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void _ZN9S20685C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
extern void _ZN9S20685C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C5[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C12__8S20685C5[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C13__8S20685C5[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C13__8S20685C5[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void _ZN9S20685C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
extern void _ZN9S20685C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C5[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C15__8S20685C5[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C7__9S20685C15__8S20685C5[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void _ZN9S20685C16D1Ev();
extern void _ZN9S20685C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C5[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C16[0]),
  (VTBL_ENTRY)&_ZN9S20685C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C16D0Ev,
};
static  VTT_ENTRY vtt_S20685C5[] = {
  {&(_ZTV8S20685C5[15]),  15,64},
  {&(_tg__ZTV9S20685C13__A__8S20685C5[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C13__A__8S20685C5[5]),  5,7},
  {&(_ZTV8S20685C5[26]),  26,64},
  {&(_ZTV8S20685C5[35]),  35,64},
  {&(_ZTV8S20685C5[26]),  26,64},
  {&(_ZTV8S20685C5[45]),  45,64},
  {&(_ZTV8S20685C5[45]),  45,64},
  {&(_ZTV8S20685C5[56]),  56,64},
  {&(_ZTV8S20685C5[62]),  62,64},
  {&(_tg__ZTV8S20685C6__8S20685C5[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C6__8S20685C5[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C5[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C5[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7__8S20685C5[5]),  5,7},
  {&(_tg__ZTV8S20685C9__8S20685C5[4]),  4,6},
  {&(_tg__ZTV9S20685C12__8S20685C5[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C5[8]),  8,10},
  {&(_tg__ZTV8S20685C9__9S20685C12__8S20685C5[5]),  5,7},
  {&(_tg__ZTV9S20685C13__8S20685C5[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C13__8S20685C5[5]),  5,7},
  {&(_tg__ZTV9S20685C15__8S20685C5[9]),  9,11},
  {&(_tg__ZTV8S20685C9__9S20685C15__8S20685C5[5]),  5,7},
  {&(_tg__ZTV8S20685C7__9S20685C15__8S20685C5[7]),  7,9},
  {&(_tg__ZTV9S20685C16__8S20685C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20685C5[];
extern  VTBL_ENTRY _ZTV8S20685C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C5[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20685C13D0Ev,_ZThn4_N9S20685C13D0Ev),
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20685C13D1Ev,_ZThn4_N9S20685C13D1Ev),
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C5D0Ev,_ZThn120_N8S20685C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C5D1Ev,_ZThn120_N8S20685C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20685C5D0Ev,_ZThn112_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20685C5D0Ev,_ZThn72_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C5D0Ev,_ZThn12_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C5D0Ev,_ZThn4_N8S20685C5D0Ev),
  (VTBL_ENTRY)_ZN8S20685C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20685C5D1Ev,_ZThn112_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20685C5D1Ev,_ZThn72_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C5D1Ev,_ZThn12_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C5D1Ev,_ZThn4_N8S20685C5D1Ev),
  (VTBL_ENTRY)_ZN8S20685C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C5 = {  "S20685C5", // class name
  bases_S20685C5, 27,
  &(vtc_S20685C5[0]), // expected_vtbl_contents
  &(vtt_S20685C5[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI8S20685C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20685C5),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C5),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C4  : virtual S20685C5 , S2265C28 , S20685C6 {
  ~S20685C4(); // tgen
  S20685C4(); // tgen
};
//SIG(-1 S20685C4) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd Fl} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} BC9 BC3}


S20685C4 ::~S20685C4(){ note_dtor("S20685C4", this);} // tgen
S20685C4 ::S20685C4(){ note_ctor("S20685C4", this);} // tgen

static void Test_S20685C4()
{
  extern Class_Descriptor cd_S20685C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20685C4, buf);
    S20685C4 *dp, &lv = *(dp=new (buf) S20685C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20685C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C4)");
    /*is_ambiguous_... S20685C4::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(88,60), "S20685C4");
    check_base_class_offset(lv, (S20685C8*)(S20685C7*), ABISELECT(88,60), "S20685C4");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(88,60), "S20685C4");
    /*is_ambiguous_... S20685C15::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C15*), ABISELECT(88,60), "S20685C4");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C7*), ABISELECT(112,72), "S20685C4");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(112,72), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*), ABISELECT(112,72), "S20685C4");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*)(S20685C5*), ABISELECT(112,72), "S20685C4");
    check_base_class_offset(lv, (S20685C9*)(S20685C7*), ABISELECT(24,12), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*), ABISELECT(24,12), "S20685C4");
    check_base_class_offset(lv, (S20685C9*)(S20685C15*), ABISELECT(24,12), "S20685C4");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*)(S20685C5*), ABISELECT(24,12), "S20685C4");
    check_base_class_offset(lv, (S2265C38*)(S20685C7*), ABISELECT(120,76), "S20685C4");
    check_base_class_offset(lv, (S2265C38*)(S20685C16*), ABISELECT(120,76), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C7*)(S20685C6*), ABISELECT(40,20), "S20685C4");
    check_base_class_offset(lv, (S20685C7*)(S20685C15*), ABISELECT(40,20), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C7*)(S20685C6*), ABISELECT(40,20), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*), ABISELECT(24,12), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C6*), ABISELECT(120,76), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C6*), ABISELECT(120,76), "S20685C4");
    check_base_class_offset(lv, (S20685C6*)(S20685C5*), ABISELECT(24,12), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*), ABISELECT(128,80), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(176,104), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(184,108), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C14 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(184,108), "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*), ABISELECT(176,104), "S20685C4");
    check_base_class_offset(lv, (S20685C14*)(S20685C15*), ABISELECT(176,104), "S20685C4");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*)(S20685C5*), ABISELECT(176,104), "S20685C4");
    check_base_class_offset(lv, (S20685C13*)(S20685C12*), ABISELECT(128,80), "S20685C4");
    check_base_class_offset(lv, (S20685C12*)(S20685C5*), ABISELECT(128,80), "S20685C4");
    /*is_ambiguous_... S20685C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C15*), ABISELECT(208,120), "S20685C4");
    check_base_class_offset(lv, (S20685C15*)(S20685C5*), ABISELECT(208,120), "S20685C4");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*)(S20685C16*), ABISELECT(232,132), "S20685C4");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(240,136), "S20685C4");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(240,136), "S20685C4");
    check_base_class_offset(lv, (S20685C14*)(S20685C16*), ABISELECT(232,132), "S20685C4");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C16*), ABISELECT(264,148), "S20685C4");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C16*), ABISELECT(264,148), "S20685C4");
    check_base_class_offset(lv, (S20685C16*)(S20685C5*), ABISELECT(224,128), "S20685C4");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*)(S20685C5*), ABISELECT(16,8), "S20685C4");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C13*)(S20685C5*), ABISELECT(16,8), "S20685C4");
    check_base_class_offset(lv, (S20685C5*), ABISELECT(16,8), "S20685C4");
    /*is_ambiguous_... S20685C4::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*), 0, "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*), 0, "S20685C4");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C6*), 0, "S20685C4");
    test_class_info(&lv, &cd_S20685C4);
    dp->~S20685C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C4(Test_S20685C4, "S20685C4", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S20685C4C1Ev();
extern void _ZN8S20685C4D1Ev();
Name_Map name_map_S20685C4[] = {
  NSPAIR(_ZN8S20685C4C1Ev),
  NSPAIR(_ZN8S20685C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C7;
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C12;
extern VTBL_ENTRY _ZTI9S20685C12[];
extern  VTBL_ENTRY _ZTV9S20685C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C15;
extern VTBL_ENTRY _ZTI9S20685C15[];
extern  VTBL_ENTRY _ZTV9S20685C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C16;
extern VTBL_ENTRY _ZTI9S20685C16[];
extern  VTBL_ENTRY _ZTV9S20685C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C5;
extern VTBL_ENTRY _ZTI8S20685C5[];
extern  VTBL_ENTRY _ZTV8S20685C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C5[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
static Base_Class bases_S20685C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20685C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20685C7,    ABISELECT(40,20), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20685C6,    ABISELECT(24,12), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20685C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20685C12,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20685C15,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20685C16,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20685C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20685C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20685C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C4[];
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void _ZN8S20685C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void _ZN8S20685C4D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20685C4D1Ev,_ZThn8_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20685C4D0Ev,_ZThn8_N8S20685C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C4D1Ev,_ZThn12_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C4D0Ev,_ZThn12_N8S20685C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S20685C4D1Ev,_ZThn20_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S20685C4D0Ev,_ZThn20_N8S20685C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20685C4D1Ev,_ZThn80_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20685C4D0Ev,_ZThn80_N8S20685C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C4D1Ev,_ZThn120_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C4D0Ev,_ZThn120_N8S20685C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20685C4D1Ev,_ZThn128_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20685C4D0Ev,_ZThn128_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20685C4[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(72,52),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20685C4[];
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__A__8S20685C4[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S20685C6D1Ev,_ZThn20_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S20685C6D0Ev,_ZThn20_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C6__A__8S20685C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C6D1Ev,_ZThn12_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C6D0Ev,_ZThn12_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C6__A__8S20685C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void _ZN8S20685C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void _ZN8S20685C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C5__8S20685C4[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C138S20685C5__A1__8S20685C4[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20685C13D1Ev,_ZThn4_N9S20685C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20685C13D0Ev,_ZThn4_N9S20685C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C138S20685C5__A1__8S20685C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20685C5D1Ev,_ZThn4_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20685C5D0Ev,_ZThn4_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C5__8S20685C4[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C5D1Ev,_ZThn12_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C5D0Ev,_ZThn12_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C5__8S20685C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S20685C5D1Ev,_ZThn72_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S20685C5D0Ev,_ZThn72_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C5__8S20685C4[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn192_N8S20685C5D1Ev,_ZThn112_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn192_N8S20685C5D0Ev,_ZThn112_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C5__8S20685C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C5D1Ev,_ZThn120_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C5D0Ev,_ZThn120_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C5__8S20685C4[] = {
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C4[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C6__8S20685C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void _ZN8S20685C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
extern void _ZN8S20685C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7__8S20685C4[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C4[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void _ZN9S20685C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
extern void _ZN9S20685C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C4[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C12__8S20685C4[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C13__8S20685C4[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C13__8S20685C4[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void _ZN9S20685C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
extern void _ZN9S20685C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C15__8S20685C4[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C7__9S20685C15__8S20685C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void _ZN9S20685C16D1Ev();
extern void _ZN9S20685C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C4[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C16[0]),
  (VTBL_ENTRY)&_ZN9S20685C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C16D0Ev,
};
static  VTT_ENTRY vtt_S20685C4[] = {
  {&(_ZTV8S20685C4[16]),  16,82},
  {&(_tg__ZTV8S20685C6__A__8S20685C4[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C6__A__8S20685C4[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C6__A__8S20685C4[5]),  5,7},
  {&(_ZTV8S20685C4[33]),  33,82},
  {&(_ZTV8S20685C4[44]),  44,82},
  {&(_ZTV8S20685C4[53]),  53,82},
  {&(_ZTV8S20685C4[44]),  44,82},
  {&(_ZTV8S20685C4[63]),  63,82},
  {&(_ZTV8S20685C4[63]),  63,82},
  {&(_ZTV8S20685C4[74]),  74,82},
  {&(_ZTV8S20685C4[80]),  80,82},
  {&(_tg__ZTV8S20685C5__8S20685C4[15]),  15,17},
  {&(_tg__ZTV9S20685C138S20685C5__A1__8S20685C4[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C138S20685C5__A1__8S20685C4[5]),  5,7},
  {&(_tg__ZTV8S20685C6__8S20685C5__8S20685C4[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C5__8S20685C4[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C5__8S20685C4[9]),  9,11},
  {&(_tg__ZTV9S20685C12__8S20685C5__8S20685C4[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C5__8S20685C4[8]),  8,10},
  {&(_tg__ZTV9S20685C15__8S20685C5__8S20685C4[9]),  9,11},
  {&(_tg__ZTV9S20685C16__8S20685C5__8S20685C4[4]),  4,6},
  {&(_tg__ZTV8S20685C6__8S20685C4[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C6__8S20685C4[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C4[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C4[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7__8S20685C4[5]),  5,7},
  {&(_tg__ZTV8S20685C9__8S20685C4[4]),  4,6},
  {&(_tg__ZTV9S20685C12__8S20685C4[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C4[8]),  8,10},
  {&(_tg__ZTV8S20685C9__9S20685C12__8S20685C4[5]),  5,7},
  {&(_tg__ZTV9S20685C13__8S20685C4[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C13__8S20685C4[5]),  5,7},
  {&(_tg__ZTV9S20685C15__8S20685C4[9]),  9,11},
  {&(_tg__ZTV8S20685C9__9S20685C15__8S20685C4[5]),  5,7},
  {&(_tg__ZTV8S20685C7__9S20685C15__8S20685C4[7]),  7,9},
  {&(_tg__ZTV9S20685C16__8S20685C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20685C4[];
extern  VTBL_ENTRY _ZTV8S20685C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C4[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C5D0Ev,_ZThn120_N8S20685C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C5D1Ev,_ZThn120_N8S20685C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20685C13D0Ev,_ZThn4_N9S20685C13D0Ev),
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20685C13D1Ev,_ZThn4_N9S20685C13D1Ev),
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20685C5D0Ev,_ZThn112_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20685C5D0Ev,_ZThn72_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C5D0Ev,_ZThn12_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C5D0Ev,_ZThn4_N8S20685C5D0Ev),
  (VTBL_ENTRY)_ZN8S20685C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20685C5D1Ev,_ZThn112_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20685C5D1Ev,_ZThn72_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C5D1Ev,_ZThn12_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C5D1Ev,_ZThn4_N8S20685C5D1Ev),
  (VTBL_ENTRY)_ZN8S20685C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C6D0Ev,_ZThn12_N8S20685C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C6D0Ev,_ZThn20_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C6D1Ev,_ZThn12_N8S20685C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C6D1Ev,_ZThn20_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C4D0Ev,_ZThn128_N8S20685C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C4D1Ev,_ZThn128_N8S20685C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C4D0Ev,_ZThn120_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C4D0Ev,_ZThn80_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C4D0Ev,_ZThn20_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C4D0Ev,_ZThn12_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C4D0Ev,_ZThn8_N8S20685C4D0Ev),
  (VTBL_ENTRY)_ZN8S20685C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C4D1Ev,_ZThn120_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C4D1Ev,_ZThn80_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C4D1Ev,_ZThn20_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C4D1Ev,_ZThn12_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C4D1Ev,_ZThn8_N8S20685C4D1Ev),
  (VTBL_ENTRY)_ZN8S20685C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C4 = {  "S20685C4", // class name
  bases_S20685C4, 31,
  &(vtc_S20685C4[0]), // expected_vtbl_contents
  &(vtt_S20685C4[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S20685C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20685C4),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C4),37, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C2  : virtual S5217C60_nt , S20685C4 {
  ~S20685C2(); // tgen
  S20685C2(); // tgen
};
//SIG(-1 S20685C2) C1{ VBC2{ m Fp} BC3{ VBC4{ VBC5{ VBC6{ VBC7{ BC2 Fp[2]} VBC2 VBC8{ VBC2 VBC7 vd} VBC9{ m} vd Fi[9]} BC9 VBC10{ m} Fp} VBC11{ VBC12{ VBC2 BC9 VBC13{ BC2 BC7} VBC8} FC8} VBC14{ BC9 VBC7 VBC8 VBC13 VBC6 vd Fl} VBC15{ BC13 BC7 VBC9 vd} BC12 vd} BC10 BC5}}


S20685C2 ::~S20685C2(){ note_dtor("S20685C2", this);} // tgen
S20685C2 ::S20685C2(){ note_ctor("S20685C2", this);} // tgen

static void Test_S20685C2()
{
  extern Class_Descriptor cd_S20685C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20685C2, buf);
    S20685C2 *dp, &lv = *(dp=new (buf) S20685C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20685C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C2)");
    /*is_ambiguous_... S20685C2::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S20685C2");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C7*), ABISELECT(16,8), "S20685C2");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(16,8), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*), ABISELECT(16,8), "S20685C2");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*)(S20685C5*), ABISELECT(16,8), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(96,64), "S20685C2");
    check_base_class_offset(lv, (S20685C8*)(S20685C7*), ABISELECT(96,64), "S20685C2");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(96,64), "S20685C2");
    /*is_ambiguous_... S20685C15::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C15*), ABISELECT(96,64), "S20685C2");
    check_base_class_offset(lv, (S20685C9*)(S20685C7*), ABISELECT(32,16), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*), ABISELECT(32,16), "S20685C2");
    check_base_class_offset(lv, (S20685C9*)(S20685C15*), ABISELECT(32,16), "S20685C2");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*)(S20685C5*), ABISELECT(32,16), "S20685C2");
    check_base_class_offset(lv, (S2265C38*)(S20685C7*), ABISELECT(120,76), "S20685C2");
    check_base_class_offset(lv, (S2265C38*)(S20685C16*), ABISELECT(120,76), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C7*)(S20685C6*), ABISELECT(48,24), "S20685C2");
    check_base_class_offset(lv, (S20685C7*)(S20685C15*), ABISELECT(48,24), "S20685C2");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C7*)(S20685C6*)(S20685C4*), ABISELECT(48,24), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*), ABISELECT(32,16), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C6*), ABISELECT(120,76), "S20685C2");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C6*)(S20685C4*), ABISELECT(120,76), "S20685C2");
    check_base_class_offset(lv, (S20685C6*)(S20685C5*), ABISELECT(32,16), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*), ABISELECT(128,80), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(176,104), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(184,108), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C14 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(184,108), "S20685C2");
    /*is_ambiguous_... S20685C2::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*), ABISELECT(176,104), "S20685C2");
    check_base_class_offset(lv, (S20685C14*)(S20685C15*), ABISELECT(176,104), "S20685C2");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*)(S20685C5*), ABISELECT(176,104), "S20685C2");
    check_base_class_offset(lv, (S20685C13*)(S20685C12*), ABISELECT(128,80), "S20685C2");
    check_base_class_offset(lv, (S20685C12*)(S20685C5*), ABISELECT(128,80), "S20685C2");
    /*is_ambiguous_... S20685C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C15*), ABISELECT(208,120), "S20685C2");
    check_base_class_offset(lv, (S20685C15*)(S20685C5*), ABISELECT(208,120), "S20685C2");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*)(S20685C16*), ABISELECT(232,132), "S20685C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(240,136), "S20685C2");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(240,136), "S20685C2");
    check_base_class_offset(lv, (S20685C14*)(S20685C16*), ABISELECT(232,132), "S20685C2");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C16*), ABISELECT(264,148), "S20685C2");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C16*), ABISELECT(264,148), "S20685C2");
    check_base_class_offset(lv, (S20685C16*)(S20685C5*), ABISELECT(224,128), "S20685C2");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*)(S20685C5*), ABISELECT(24,12), "S20685C2");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C13*)(S20685C5*), ABISELECT(24,12), "S20685C2");
    check_base_class_offset(lv, (S20685C5*)(S20685C4*), ABISELECT(24,12), "S20685C2");
    /*is_ambiguous_... S20685C4::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C4*), 0, "S20685C2");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*)(S20685C4*), 0, "S20685C2");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C6*)(S20685C4*), 0, "S20685C2");
    check_base_class_offset(lv, (S20685C4*), 0, "S20685C2");
    test_class_info(&lv, &cd_S20685C2);
    dp->~S20685C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C2(Test_S20685C2, "S20685C2", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S20685C2C1Ev();
extern void _ZN8S20685C2D1Ev();
Name_Map name_map_S20685C2[] = {
  NSPAIR(_ZN8S20685C2C1Ev),
  NSPAIR(_ZN8S20685C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C7;
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C12;
extern VTBL_ENTRY _ZTI9S20685C12[];
extern  VTBL_ENTRY _ZTV9S20685C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C15;
extern VTBL_ENTRY _ZTI9S20685C15[];
extern  VTBL_ENTRY _ZTV9S20685C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C16;
extern VTBL_ENTRY _ZTI9S20685C16[];
extern  VTBL_ENTRY _ZTV9S20685C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C5;
extern VTBL_ENTRY _ZTI8S20685C5[];
extern  VTBL_ENTRY _ZTV8S20685C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C5[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
extern Class_Descriptor cd_S20685C4;
extern VTBL_ENTRY _ZTI8S20685C4[];
extern  VTBL_ENTRY _ZTV8S20685C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C4[];
static Base_Class bases_S20685C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20685C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20685C7,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20685C6,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20685C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20685C12,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20685C15,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20685C16,    ABISELECT(224,128), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20685C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20685C5,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20685C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20685C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C2[];
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void _ZN8S20685C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void _ZN8S20685C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C2D1Ev,_ZThn12_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C2D0Ev,_ZThn12_N8S20685C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20685C2D1Ev,_ZThn16_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20685C2D0Ev,_ZThn16_N8S20685C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20685C2D1Ev,_ZThn24_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20685C2D0Ev,_ZThn24_N8S20685C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S20685C2D1Ev,_ZThn80_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S20685C2D0Ev,_ZThn80_N8S20685C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C2D1Ev,_ZThn120_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C2D0Ev,_ZThn120_N8S20685C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C2D1Ev,_ZTv0_n16_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn224_N8S20685C2D1Ev,_ZThn128_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C2D0Ev,_ZTv0_n16_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn224_N8S20685C2D0Ev,_ZThn128_N8S20685C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20685C2[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C2D1Ev,_ZTv0_n16_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C2D0Ev,_ZTv0_n16_N8S20685C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20685C2[];
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void _ZN8S20685C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void _ZN8S20685C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C4__8S20685C2[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C68S20685C4__A1__8S20685C2[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S20685C6D1Ev,_ZThn24_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S20685C6D0Ev,_ZThn24_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C68S20685C4__A1__8S20685C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S20685C6D1Ev,_ZThn16_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S20685C6D0Ev,_ZThn16_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C68S20685C4__A1__8S20685C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C4D1Ev,_ZThn12_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C4D0Ev,_ZThn12_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C5__8S20685C4__8S20685C2[] = {
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20685C4D1Ev,_ZThn16_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20685C4D0Ev,_ZThn16_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C4__8S20685C2[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20685C4D1Ev,_ZThn24_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20685C4D0Ev,_ZThn24_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C4__8S20685C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20685C4D1Ev,_ZThn80_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20685C4D0Ev,_ZThn80_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C4__8S20685C2[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C4D1Ev,_ZThn120_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C4D0Ev,_ZThn120_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C4__8S20685C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20685C4D1Ev,_ZThn128_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20685C4D0Ev,_ZThn128_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C4__8S20685C2[] = {
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void _ZN8S20685C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void _ZN8S20685C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C5__8S20685C2[] = {
  ABISELECT(200,116),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C138S20685C5__A1__8S20685C2[] = {
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20685C13D1Ev,_ZThn4_N9S20685C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20685C13D0Ev,_ZThn4_N9S20685C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C138S20685C5__A1__8S20685C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20685C5D1Ev,_ZThn4_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20685C5D0Ev,_ZThn4_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C5__8S20685C2[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C5D1Ev,_ZThn12_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C5D0Ev,_ZThn12_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C5__8S20685C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20685C5D1Ev,_ZThn68_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20685C5D0Ev,_ZThn68_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C5__8S20685C2[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn184_N8S20685C5D1Ev,_ZThn108_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn184_N8S20685C5D0Ev,_ZThn108_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C5__8S20685C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-184,-108),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn200_N8S20685C5D1Ev,_ZThn116_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn200_N8S20685C5D0Ev,_ZThn116_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C5__8S20685C2[] = {
  ABISELECT(-200,-116),
  ABISELECT(-104,-52),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C2[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C6__8S20685C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void _ZN8S20685C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
extern void _ZN8S20685C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7__8S20685C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C2[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void _ZN9S20685C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
extern void _ZN9S20685C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C2[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C12__8S20685C2[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C13__8S20685C2[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C13__8S20685C2[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void _ZN9S20685C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
extern void _ZN9S20685C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C15__8S20685C2[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C7__9S20685C15__8S20685C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void _ZN9S20685C16D1Ev();
extern void _ZN9S20685C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C2[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C16[0]),
  (VTBL_ENTRY)&_ZN9S20685C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C16D0Ev,
};
static  VTT_ENTRY vtt_S20685C2[] = {
  {&(_ZTV8S20685C2[16]),  16,82},
  {&(_tg__ZTV8S20685C4__8S20685C2[16]),  16,18},
  {&(_tg__ZTV8S20685C68S20685C4__A1__8S20685C2[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C68S20685C4__A1__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C68S20685C4__A1__8S20685C2[5]),  5,7},
  {&(_tg__ZTV8S20685C5__8S20685C4__8S20685C2[15]),  15,17},
  {&(_tg__ZTV8S20685C6__8S20685C4__8S20685C2[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C4__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C4__8S20685C2[9]),  9,11},
  {&(_tg__ZTV9S20685C12__8S20685C4__8S20685C2[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C4__8S20685C2[8]),  8,10},
  {&(_tg__ZTV9S20685C15__8S20685C4__8S20685C2[9]),  9,11},
  {&(_tg__ZTV9S20685C16__8S20685C4__8S20685C2[4]),  4,6},
  {&(_ZTV8S20685C2[33]),  33,82},
  {&(_ZTV8S20685C2[44]),  44,82},
  {&(_ZTV8S20685C2[53]),  53,82},
  {&(_ZTV8S20685C2[44]),  44,82},
  {&(_ZTV8S20685C2[63]),  63,82},
  {&(_ZTV8S20685C2[63]),  63,82},
  {&(_ZTV8S20685C2[74]),  74,82},
  {&(_ZTV8S20685C2[80]),  80,82},
  {&(_tg__ZTV8S20685C5__8S20685C2[15]),  15,17},
  {&(_tg__ZTV9S20685C138S20685C5__A1__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C138S20685C5__A1__8S20685C2[5]),  5,7},
  {&(_tg__ZTV8S20685C6__8S20685C5__8S20685C2[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C5__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C5__8S20685C2[9]),  9,11},
  {&(_tg__ZTV9S20685C12__8S20685C5__8S20685C2[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C5__8S20685C2[8]),  8,10},
  {&(_tg__ZTV9S20685C15__8S20685C5__8S20685C2[9]),  9,11},
  {&(_tg__ZTV9S20685C16__8S20685C5__8S20685C2[4]),  4,6},
  {&(_tg__ZTV8S20685C6__8S20685C2[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C6__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C2[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7__8S20685C2[5]),  5,7},
  {&(_tg__ZTV8S20685C9__8S20685C2[4]),  4,6},
  {&(_tg__ZTV9S20685C12__8S20685C2[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C2[8]),  8,10},
  {&(_tg__ZTV8S20685C9__9S20685C12__8S20685C2[5]),  5,7},
  {&(_tg__ZTV9S20685C13__8S20685C2[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C13__8S20685C2[5]),  5,7},
  {&(_tg__ZTV9S20685C15__8S20685C2[9]),  9,11},
  {&(_tg__ZTV8S20685C9__9S20685C15__8S20685C2[5]),  5,7},
  {&(_tg__ZTV8S20685C7__9S20685C15__8S20685C2[7]),  7,9},
  {&(_tg__ZTV9S20685C16__8S20685C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20685C2[];
extern  VTBL_ENTRY _ZTV8S20685C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C2[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20685C5D0Ev,_ZThn116_N8S20685C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20685C5D1Ev,_ZThn116_N8S20685C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20685C13D0Ev,_ZThn4_N9S20685C13D0Ev),
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20685C13D1Ev,_ZThn4_N9S20685C13D1Ev),
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20685C5D0Ev,_ZThn108_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20685C5D0Ev,_ZThn68_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C5D0Ev,_ZThn12_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C5D0Ev,_ZThn4_N8S20685C5D0Ev),
  (VTBL_ENTRY)_ZN8S20685C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20685C5D1Ev,_ZThn108_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20685C5D1Ev,_ZThn68_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C5D1Ev,_ZThn12_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C5D1Ev,_ZThn4_N8S20685C5D1Ev),
  (VTBL_ENTRY)_ZN8S20685C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C4D0Ev,_ZThn128_N8S20685C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C4D1Ev,_ZThn128_N8S20685C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C6D0Ev,_ZThn16_N8S20685C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C6D0Ev,_ZThn24_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C6D1Ev,_ZThn16_N8S20685C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C6D1Ev,_ZThn24_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C4D0Ev,_ZThn120_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C4D0Ev,_ZThn80_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C4D0Ev,_ZThn24_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C4D0Ev,_ZThn16_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C4D0Ev,_ZThn12_N8S20685C4D0Ev),
  (VTBL_ENTRY)_ZN8S20685C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C4D1Ev,_ZThn120_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C4D1Ev,_ZThn80_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C4D1Ev,_ZThn24_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C4D1Ev,_ZThn16_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C4D1Ev,_ZThn12_N8S20685C4D1Ev),
  (VTBL_ENTRY)_ZN8S20685C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C2D0Ev,_ZTv0_n16_N8S20685C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C2D0Ev,_ZThn128_N8S20685C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C2D1Ev,_ZTv0_n16_N8S20685C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C2D1Ev,_ZThn128_N8S20685C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C2D0Ev,_ZThn120_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C2D0Ev,_ZThn80_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C2D0Ev,_ZThn24_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C2D0Ev,_ZThn16_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C2D0Ev,_ZThn12_N8S20685C2D0Ev),
  (VTBL_ENTRY)_ZN8S20685C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C2D1Ev,_ZThn120_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C2D1Ev,_ZThn80_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C2D1Ev,_ZThn24_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C2D1Ev,_ZThn16_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C2D1Ev,_ZThn12_N8S20685C2D1Ev),
  (VTBL_ENTRY)_ZN8S20685C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C2 = {  "S20685C2", // class name
  bases_S20685C2, 32,
  &(vtc_S20685C2[0]), // expected_vtbl_contents
  &(vtt_S20685C2[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S20685C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20685C2),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C2),46, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20685C1  : virtual S20685C2 {
  ~S20685C1(); // tgen
  S20685C1(); // tgen
};
//SIG(1 S20685C1) C1{ VBC2{ VBC3{ m Fp} BC4{ VBC5{ VBC6{ VBC7{ VBC8{ BC3 Fp[2]} VBC3 VBC9{ VBC3 VBC8 vd} VBC10{ m} vd Fi[9]} BC10 VBC11{ m} Fp} VBC12{ VBC13{ VBC3 BC10 VBC14{ BC3 BC8} VBC9} FC9} VBC15{ BC10 VBC8 VBC9 VBC14 VBC7 vd Fl} VBC16{ BC14 BC8 VBC10 vd} BC13 vd} BC11 BC6}}}


S20685C1 ::~S20685C1(){ note_dtor("S20685C1", this);} // tgen
S20685C1 ::S20685C1(){ note_ctor("S20685C1", this);} // tgen

static void Test_S20685C1()
{
  extern Class_Descriptor cd_S20685C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S20685C1, buf);
    S20685C1 *dp, &lv = *(dp=new (buf) S20685C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S20685C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20685C1)");
    /*is_ambiguous_... S20685C2::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C2*), ABISELECT(24,12), "S20685C1");
    /*is_ambiguous_... S20685C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C7*), ABISELECT(24,12), "S20685C1");
    /*is_ambiguous_... S20685C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C9*), ABISELECT(24,12), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*), ABISELECT(24,12), "S20685C1");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C13*)(S20685C5*), ABISELECT(24,12), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*), ABISELECT(96,64), "S20685C1");
    check_base_class_offset(lv, (S20685C8*)(S20685C7*), ABISELECT(96,64), "S20685C1");
    check_base_class_offset(lv, (S20685C8*)(S20685C9*), ABISELECT(96,64), "S20685C1");
    /*is_ambiguous_... S20685C15::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C15*), ABISELECT(96,64), "S20685C1");
    check_base_class_offset(lv, (S20685C9*)(S20685C7*), ABISELECT(32,16), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*), ABISELECT(32,16), "S20685C1");
    check_base_class_offset(lv, (S20685C9*)(S20685C15*), ABISELECT(32,16), "S20685C1");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C9*)(S20685C13*)(S20685C5*), ABISELECT(32,16), "S20685C1");
    check_base_class_offset(lv, (S2265C38*)(S20685C7*), ABISELECT(120,76), "S20685C1");
    check_base_class_offset(lv, (S2265C38*)(S20685C16*), ABISELECT(120,76), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C7*)(S20685C6*), ABISELECT(48,24), "S20685C1");
    check_base_class_offset(lv, (S20685C7*)(S20685C15*), ABISELECT(48,24), "S20685C1");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C7*)(S20685C6*)(S20685C4*)(S20685C2*), ABISELECT(48,24), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*), ABISELECT(32,16), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C6*), 0, "S20685C1");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C6*)(S20685C4*)(S20685C2*), 0, "S20685C1");
    check_base_class_offset(lv, (S20685C6*)(S20685C5*), ABISELECT(32,16), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*), ABISELECT(128,80), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*), ABISELECT(176,104), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*), ABISELECT(184,108), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C14 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C14*), ABISELECT(184,108), "S20685C1");
    /*is_ambiguous_... S20685C1::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*), ABISELECT(176,104), "S20685C1");
    check_base_class_offset(lv, (S20685C14*)(S20685C15*), ABISELECT(176,104), "S20685C1");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C14*)(S20685C13*)(S20685C5*), ABISELECT(176,104), "S20685C1");
    check_base_class_offset(lv, (S20685C13*)(S20685C12*), ABISELECT(128,80), "S20685C1");
    check_base_class_offset(lv, (S20685C12*)(S20685C5*), ABISELECT(128,80), "S20685C1");
    /*is_ambiguous_... S20685C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C15*), ABISELECT(208,120), "S20685C1");
    check_base_class_offset(lv, (S20685C15*)(S20685C5*), ABISELECT(208,120), "S20685C1");
    /*is_ambiguous_... S20685C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C14*)(S20685C16*), ABISELECT(232,132), "S20685C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(240,136), "S20685C1");
    check_base_class_offset(lv, (S20685C8*)(S20685C14*)(S20685C16*), ABISELECT(240,136), "S20685C1");
    check_base_class_offset(lv, (S20685C14*)(S20685C16*), ABISELECT(232,132), "S20685C1");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20685C8*)(S20685C16*), ABISELECT(264,148), "S20685C1");
    /*is_ambiguous_... S20685C16::S20685C8 */ AMB_check_base_class_offset(lv, (S20685C8*)(S20685C16*), ABISELECT(264,148), "S20685C1");
    check_base_class_offset(lv, (S20685C16*)(S20685C5*), ABISELECT(224,128), "S20685C1");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C13*)(S20685C5*), 0, "S20685C1");
    /*is_ambiguous_... S20685C5::S20685C13 */ AMB_check_base_class_offset(lv, (S20685C13*)(S20685C5*), 0, "S20685C1");
    check_base_class_offset(lv, (S20685C5*)(S20685C4*)(S20685C2*), 0, "S20685C1");
    /*is_ambiguous_... S20685C4::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20685C4*)(S20685C2*), ABISELECT(8,4), "S20685C1");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20685C6*)(S20685C4*)(S20685C2*), ABISELECT(8,4), "S20685C1");
    /*is_ambiguous_... S20685C4::S20685C6 */ AMB_check_base_class_offset(lv, (S20685C6*)(S20685C4*)(S20685C2*), ABISELECT(8,4), "S20685C1");
    check_base_class_offset(lv, (S20685C4*)(S20685C2*), ABISELECT(8,4), "S20685C1");
    check_base_class_offset(lv, (S20685C2*), ABISELECT(8,4), "S20685C1");
    test_class_info(&lv, &cd_S20685C1);
    dp->~S20685C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20685C1(Test_S20685C1, "S20685C1", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN8S20685C1C1Ev();
extern void _ZN8S20685C1D1Ev();
Name_Map name_map_S20685C1[] = {
  NSPAIR(_ZN8S20685C1C1Ev),
  NSPAIR(_ZN8S20685C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C9;
extern VTBL_ENTRY _ZTI8S20685C9[];
extern  VTBL_ENTRY _ZTV8S20685C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C7;
extern VTBL_ENTRY _ZTI8S20685C7[];
extern  VTBL_ENTRY _ZTV8S20685C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C12;
extern VTBL_ENTRY _ZTI9S20685C12[];
extern  VTBL_ENTRY _ZTV9S20685C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C15;
extern VTBL_ENTRY _ZTI9S20685C15[];
extern  VTBL_ENTRY _ZTV9S20685C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C14;
extern VTBL_ENTRY _ZTI9S20685C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20685C8;
extern VTBL_ENTRY _ZTI8S20685C8[];
extern Class_Descriptor cd_S20685C16;
extern VTBL_ENTRY _ZTI9S20685C16[];
extern  VTBL_ENTRY _ZTV9S20685C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C13;
extern VTBL_ENTRY _ZTI9S20685C13[];
extern  VTBL_ENTRY _ZTV9S20685C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20685C13[];
extern Class_Descriptor cd_S20685C5;
extern VTBL_ENTRY _ZTI8S20685C5[];
extern  VTBL_ENTRY _ZTV8S20685C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C5[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20685C6;
extern VTBL_ENTRY _ZTI8S20685C6[];
extern  VTBL_ENTRY _ZTV8S20685C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C6[];
extern Class_Descriptor cd_S20685C4;
extern VTBL_ENTRY _ZTI8S20685C4[];
extern  VTBL_ENTRY _ZTV8S20685C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C4[];
extern Class_Descriptor cd_S20685C2;
extern VTBL_ENTRY _ZTI8S20685C2[];
extern  VTBL_ENTRY _ZTV8S20685C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C2[];
static Base_Class bases_S20685C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20685C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20685C7,    ABISELECT(48,24), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20685C6,    ABISELECT(32,16), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20685C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20685C12,    ABISELECT(128,80), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20685C15,    ABISELECT(208,120), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20685C14,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20685C8,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20685C16,    ABISELECT(224,128), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20685C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20685C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20685C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20685C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20685C2,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20685C1[];
extern void ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev)();
extern void _ZN8S20685C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev)();
extern void _ZN8S20685C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20685C1D1Ev,_ZThn4_N8S20685C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20685C1D0Ev,_ZThn4_N8S20685C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20685C1D1Ev,_ZThn16_N8S20685C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20685C1D0Ev,_ZThn16_N8S20685C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S20685C1D1Ev,_ZThn24_N8S20685C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S20685C1D0Ev,_ZThn24_N8S20685C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20685C1D1Ev,_ZThn80_N8S20685C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20685C1D0Ev,_ZThn80_N8S20685C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C1D1Ev,_ZThn120_N8S20685C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C1D0Ev,_ZThn120_N8S20685C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C1D1Ev,_ZTv0_n16_N8S20685C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20685C1D1Ev,_ZThn128_N8S20685C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C1D0Ev,_ZTv0_n16_N8S20685C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20685C1D0Ev,_ZThn128_N8S20685C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20685C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  0,
  ABISELECT(96,64),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev),
  ABISELECT(216,124),
  ABISELECT(200,116),
  ABISELECT(168,100),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  ABISELECT(88,60),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20685C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C1D1Ev,_ZTv0_n16_N8S20685C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C1D0Ev,_ZTv0_n16_N8S20685C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20685C1[];
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void _ZN8S20685C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void _ZN8S20685C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C2__8S20685C1[] = {
  ABISELECT(216,124),
  ABISELECT(200,116),
  ABISELECT(168,100),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void _ZN8S20685C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void _ZN8S20685C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C48S20685C2__8S20685C1[] = {
  ABISELECT(216,124),
  ABISELECT(200,116),
  ABISELECT(168,100),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C68S20685C48S20685C2__A1__8S20685C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S20685C6D1Ev,_ZThn20_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S20685C6D0Ev,_ZThn20_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C68S20685C48S20685C2__A1__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C6D1Ev,_ZThn12_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C6D0Ev,_ZThn12_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C68S20685C48S20685C2__A1__8S20685C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C5__8S20685C48S20685C2__8S20685C1[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  ABISELECT(8,4),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C4D1Ev,_ZThn12_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C4D0Ev,_ZThn12_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C48S20685C2__8S20685C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S20685C4D1Ev,_ZThn20_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S20685C4D0Ev,_ZThn20_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C48S20685C2__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn120_N8S20685C4D1Ev,_ZThn76_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn120_N8S20685C4D0Ev,_ZThn76_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C48S20685C2__8S20685C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-120,-76),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20685C4D1Ev,_ZThn116_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20685C4D0Ev,_ZThn116_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C48S20685C2__8S20685C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-200,-116),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev)();
extern void ABISELECT(_ZThn216_N8S20685C4D1Ev,_ZThn124_N8S20685C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev)();
extern void ABISELECT(_ZThn216_N8S20685C4D0Ev,_ZThn124_N8S20685C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C48S20685C2__8S20685C1[] = {
  ABISELECT(-216,-124),
  ABISELECT(-104,-52),
  ABISELECT(-216,-124),
  (VTBL_ENTRY)&(_ZTI8S20685C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C5__8S20685C2__8S20685C1[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  ABISELECT(8,4),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20685C2D1Ev,_ZThn12_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20685C2D0Ev,_ZThn12_N8S20685C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C2__8S20685C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S20685C2D1Ev,_ZThn20_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S20685C2D0Ev,_ZThn20_N8S20685C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C2__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S20685C2D1Ev,_ZThn76_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S20685C2D0Ev,_ZThn76_N8S20685C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C2__8S20685C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-120,-76),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn200_N8S20685C2D1Ev,_ZThn116_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn200_N8S20685C2D0Ev,_ZThn116_N8S20685C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C2__8S20685C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-200,-116),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20685C2D1Ev,_ZTv0_n16_N8S20685C2D1Ev)();
extern void ABISELECT(_ZThn216_N8S20685C2D1Ev,_ZThn124_N8S20685C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C2D0Ev,_ZTv0_n16_N8S20685C2D0Ev)();
extern void ABISELECT(_ZThn216_N8S20685C2D0Ev,_ZThn124_N8S20685C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C2__8S20685C1[] = {
  ABISELECT(-216,-124),
  ABISELECT(-104,-52),
  ABISELECT(-216,-124),
  (VTBL_ENTRY)&(_ZTI8S20685C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C2D1Ev,_ZTv0_n16_N8S20685C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C2D0Ev,_ZTv0_n16_N8S20685C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void _ZN8S20685C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void _ZN8S20685C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C5__8S20685C1[] = {
  ABISELECT(224,128),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  0,
  ABISELECT(96,64),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C138S20685C5__A1__8S20685C1[] = {
  ABISELECT(32,16),
  ABISELECT(176,104),
  0,
  ABISELECT(96,64),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S20685C13D1Ev,_ZThn16_N9S20685C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S20685C13D0Ev,_ZThn16_N9S20685C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C138S20685C5__A1__8S20685C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S20685C5D1Ev,_ZThn16_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S20685C5D0Ev,_ZThn16_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C5__8S20685C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S20685C5D1Ev,_ZThn24_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S20685C5D0Ev,_ZThn24_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C5__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S20685C5D1Ev,_ZThn80_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S20685C5D0Ev,_ZThn80_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C5__8S20685C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn208_N8S20685C5D1Ev,_ZThn120_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn208_N8S20685C5D0Ev,_ZThn120_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C5__8S20685C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev)();
extern void ABISELECT(_ZThn224_N8S20685C5D1Ev,_ZThn128_N8S20685C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev)();
extern void ABISELECT(_ZThn224_N8S20685C5D0Ev,_ZThn128_N8S20685C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C5__8S20685C1[] = {
  ABISELECT(-224,-128),
  ABISELECT(-104,-52),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI8S20685C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void _ZN8S20685C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void _ZN8S20685C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C6__8S20685C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C6__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20685C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void _ZN8S20685C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
extern void _ZN8S20685C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20685C7__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C7__8S20685C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20685C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev),
};
extern void _ZN8S20685C9D1Ev();
extern void _ZN8S20685C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20685C9__8S20685C1[] = {
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20685C9[0]),
  (VTBL_ENTRY)&_ZN8S20685C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20685C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void _ZN9S20685C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
extern void _ZN9S20685C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C12__8S20685C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C12__8S20685C1[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20685C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void _ZN9S20685C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
extern void _ZN9S20685C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C13__8S20685C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C13__8S20685C1[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20685C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void _ZN9S20685C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
extern void _ZN9S20685C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20685C15__8S20685C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C9__9S20685C15__8S20685C1[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20685C7__9S20685C15__8S20685C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20685C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev),
};
extern void _ZN9S20685C16D1Ev();
extern void _ZN9S20685C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20685C16__8S20685C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20685C16[0]),
  (VTBL_ENTRY)&_ZN9S20685C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20685C16D0Ev,
};
static  VTT_ENTRY vtt_S20685C1[] = {
  {&(_ZTV8S20685C1[17]),  17,84},
  {&(_ZTV8S20685C1[35]),  35,84},
  {&(_ZTV8S20685C1[17]),  17,84},
  {&(_ZTV8S20685C1[46]),  46,84},
  {&(_ZTV8S20685C1[55]),  55,84},
  {&(_ZTV8S20685C1[46]),  46,84},
  {&(_ZTV8S20685C1[65]),  65,84},
  {&(_ZTV8S20685C1[65]),  65,84},
  {&(_ZTV8S20685C1[76]),  76,84},
  {&(_ZTV8S20685C1[82]),  82,84},
  {&(_tg__ZTV8S20685C2__8S20685C1[16]),  16,18},
  {&(_tg__ZTV8S20685C48S20685C2__8S20685C1[16]),  16,18},
  {&(_tg__ZTV8S20685C68S20685C48S20685C2__A1__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C68S20685C48S20685C2__A1__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C68S20685C48S20685C2__A1__8S20685C1[5]),  5,7},
  {&(_tg__ZTV8S20685C5__8S20685C48S20685C2__8S20685C1[15]),  15,17},
  {&(_tg__ZTV8S20685C6__8S20685C48S20685C2__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C48S20685C2__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C48S20685C2__8S20685C1[9]),  9,11},
  {&(_tg__ZTV9S20685C12__8S20685C48S20685C2__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C48S20685C2__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C15__8S20685C48S20685C2__8S20685C1[9]),  9,11},
  {&(_tg__ZTV9S20685C16__8S20685C48S20685C2__8S20685C1[4]),  4,6},
  {&(_tg__ZTV8S20685C5__8S20685C2__8S20685C1[15]),  15,17},
  {&(_tg__ZTV8S20685C6__8S20685C2__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C2__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C2__8S20685C1[9]),  9,11},
  {&(_tg__ZTV9S20685C12__8S20685C2__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C2__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C15__8S20685C2__8S20685C1[9]),  9,11},
  {&(_tg__ZTV9S20685C16__8S20685C2__8S20685C1[4]),  4,6},
  {&(_tg__ZTV8S20685C5__8S20685C1[15]),  15,17},
  {&(_tg__ZTV9S20685C138S20685C5__A1__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C138S20685C5__A1__8S20685C1[5]),  5,7},
  {&(_tg__ZTV8S20685C6__8S20685C5__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C5__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C5__8S20685C1[9]),  9,11},
  {&(_tg__ZTV9S20685C12__8S20685C5__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C5__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C15__8S20685C5__8S20685C1[9]),  9,11},
  {&(_tg__ZTV9S20685C16__8S20685C5__8S20685C1[4]),  4,6},
  {&(_tg__ZTV8S20685C6__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C6__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C6__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C7__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C9__8S20685C7__8S20685C1[5]),  5,7},
  {&(_tg__ZTV8S20685C9__8S20685C1[4]),  4,6},
  {&(_tg__ZTV9S20685C12__8S20685C1[8]),  8,10},
  {&(_tg__ZTV9S20685C12__8S20685C1[8]),  8,10},
  {&(_tg__ZTV8S20685C9__9S20685C12__8S20685C1[5]),  5,7},
  {&(_tg__ZTV9S20685C13__8S20685C1[7]),  7,9},
  {&(_tg__ZTV8S20685C9__9S20685C13__8S20685C1[5]),  5,7},
  {&(_tg__ZTV9S20685C15__8S20685C1[9]),  9,11},
  {&(_tg__ZTV8S20685C9__9S20685C15__8S20685C1[5]),  5,7},
  {&(_tg__ZTV8S20685C7__9S20685C15__8S20685C1[7]),  7,9},
  {&(_tg__ZTV9S20685C16__8S20685C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20685C1[];
extern  VTBL_ENTRY _ZTV8S20685C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20685C1[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D0Ev,_ZTv0_n20_N9S20685C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C15D1Ev,_ZTv0_n20_N9S20685C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D0Ev,_ZTv0_n20_N9S20685C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C12D1Ev,_ZTv0_n20_N9S20685C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D0Ev,_ZTv0_n20_N8S20685C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C7D1Ev,_ZTv0_n20_N8S20685C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20685C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D0Ev,_ZTv0_n16_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C5D0Ev,_ZThn128_N8S20685C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C5D1Ev,_ZTv0_n16_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C5D1Ev,_ZThn128_N8S20685C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D0Ev,_ZTv0_n20_N9S20685C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20685C13D0Ev,_ZThn16_N9S20685C13D0Ev),
  (VTBL_ENTRY)_ZN9S20685C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20685C13D1Ev,_ZTv0_n20_N9S20685C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20685C13D1Ev,_ZThn16_N9S20685C13D1Ev),
  (VTBL_ENTRY)_ZN9S20685C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D0Ev,_ZTv0_n20_N8S20685C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C5D0Ev,_ZThn120_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C5D0Ev,_ZThn80_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C5D0Ev,_ZThn24_N8S20685C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C5D0Ev,_ZThn16_N8S20685C5D0Ev),
  (VTBL_ENTRY)_ZN8S20685C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C5D1Ev,_ZTv0_n20_N8S20685C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C5D1Ev,_ZThn120_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C5D1Ev,_ZThn80_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C5D1Ev,_ZThn24_N8S20685C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C5D1Ev,_ZThn16_N8S20685C5D1Ev),
  (VTBL_ENTRY)_ZN8S20685C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C2D0Ev,_ZTv0_n16_N8S20685C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20685C2D0Ev,_ZThn124_N8S20685C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C2D1Ev,_ZTv0_n16_N8S20685C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20685C2D1Ev,_ZThn124_N8S20685C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C4D0Ev,_ZTv0_n16_N8S20685C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20685C4D0Ev,_ZThn124_N8S20685C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C4D1Ev,_ZTv0_n16_N8S20685C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20685C4D1Ev,_ZThn124_N8S20685C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D0Ev,_ZTv0_n20_N8S20685C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D0Ev,_ZThn8_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C6D0Ev,_ZThn12_N8S20685C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C6D0Ev,_ZThn20_N8S20685C6D0Ev),
  (VTBL_ENTRY)_ZN8S20685C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C6D1Ev,_ZTv0_n20_N8S20685C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20685C6D1Ev,_ZThn8_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C6D1Ev,_ZThn12_N8S20685C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C6D1Ev,_ZThn20_N8S20685C6D1Ev),
  (VTBL_ENTRY)_ZN8S20685C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C4D0Ev,_ZTv0_n20_N8S20685C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20685C4D0Ev,_ZThn116_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20685C4D0Ev,_ZThn76_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C4D0Ev,_ZThn20_N8S20685C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C4D0Ev,_ZThn12_N8S20685C4D0Ev),
  (VTBL_ENTRY)_ZN8S20685C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C4D1Ev,_ZTv0_n20_N8S20685C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20685C4D1Ev,_ZThn116_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20685C4D1Ev,_ZThn76_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C4D1Ev,_ZThn20_N8S20685C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C4D1Ev,_ZThn12_N8S20685C4D1Ev),
  (VTBL_ENTRY)_ZN8S20685C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C2D0Ev,_ZTv0_n20_N8S20685C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20685C2D0Ev,_ZThn116_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20685C2D0Ev,_ZThn76_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C2D0Ev,_ZThn20_N8S20685C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C2D0Ev,_ZThn12_N8S20685C2D0Ev),
  (VTBL_ENTRY)_ZN8S20685C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C2D1Ev,_ZTv0_n20_N8S20685C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20685C2D1Ev,_ZThn116_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20685C2D1Ev,_ZThn76_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20685C2D1Ev,_ZThn20_N8S20685C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20685C2D1Ev,_ZThn12_N8S20685C2D1Ev),
  (VTBL_ENTRY)_ZN8S20685C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C1D0Ev,_ZTv0_n16_N8S20685C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C1D0Ev,_ZThn128_N8S20685C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20685C1D1Ev,_ZTv0_n16_N8S20685C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20685C1D1Ev,_ZThn128_N8S20685C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C1D0Ev,_ZTv0_n20_N8S20685C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C1D0Ev,_ZThn120_N8S20685C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C1D0Ev,_ZThn80_N8S20685C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C1D0Ev,_ZThn24_N8S20685C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C1D0Ev,_ZThn16_N8S20685C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C1D0Ev,_ZThn4_N8S20685C1D0Ev),
  (VTBL_ENTRY)_ZN8S20685C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20685C1D1Ev,_ZTv0_n20_N8S20685C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20685C1D1Ev,_ZThn120_N8S20685C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20685C1D1Ev,_ZThn80_N8S20685C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20685C1D1Ev,_ZThn24_N8S20685C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20685C1D1Ev,_ZThn16_N8S20685C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20685C1D1Ev,_ZThn4_N8S20685C1D1Ev),
  (VTBL_ENTRY)_ZN8S20685C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20685C1 = {  "S20685C1", // class name
  bases_S20685C1, 33,
  &(vtc_S20685C1[0]), // expected_vtbl_contents
  &(vtt_S20685C1[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI8S20685C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20685C1),84, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20685C1),56, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C8  : S5217C60_nt {
  void *s20686c8f0[2];
};
//SIG(-1 S20686C8) C1{ BC2{ m Fp} Fp[2]}



static void Test_S20686C8()
{
  extern Class_Descriptor cd_S20686C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20686C8, buf);
    S20686C8 &lv = *(new (buf) S20686C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20686C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C8)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S20686C8");
    check_field_offset(lv, s20686c8f0, ABISELECT(8,4), "S20686C8.s20686c8f0");
    test_class_info(&lv, &cd_S20686C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C8(Test_S20686C8, "S20686C8", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S20686C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C8[];
Class_Descriptor cd_S20686C8 = {  "S20686C8", // class name
  bases_S20686C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20686C8),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C9  : virtual S5217C60_nt , virtual S20686C8 {
  virtual  ~S20686C9(); // _ZN8S20686C9D2Ev
  S20686C9(); // tgen
};
//SIG(-1 S20686C9) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S20686C9 ::~S20686C9(){ note_dtor("S20686C9", this);}
S20686C9 ::S20686C9(){ note_ctor("S20686C9", this);} // tgen

static void Test_S20686C9()
{
  extern Class_Descriptor cd_S20686C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20686C9, buf);
    S20686C9 *dp, &lv = *(dp=new (buf) S20686C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20686C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C9)");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20686C9");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(16,8), "S20686C9");
    check_base_class_offset(lv, (S20686C8*), ABISELECT(16,8), "S20686C9");
    test_class_info(&lv, &cd_S20686C9);
    dp->~S20686C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C9(Test_S20686C9, "S20686C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20686C9C1Ev();
extern void _ZN8S20686C9D2Ev();
Name_Map name_map_S20686C9[] = {
  NSPAIR(_ZN8S20686C9C1Ev),
  NSPAIR(_ZN8S20686C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
static Base_Class bases_S20686C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C9[];
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY vtc_S20686C9[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S20686C9[];
static  VTT_ENTRY vtt_S20686C9[] = {
  {&(_ZTV8S20686C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
Class_Descriptor cd_S20686C9 = {  "S20686C9", // class name
  bases_S20686C9, 3,
  &(vtc_S20686C9[0]), // expected_vtbl_contents
  &(vtt_S20686C9[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20686C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20686C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C9),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C7  : virtual S20686C8 , virtual S5217C60_nt , virtual S20686C9 , virtual S2265C38 {
  int s20686c7f0[9];
  virtual  ~S20686C7(); // _ZN8S20686C7D2Ev
  S20686C7(); // tgen
};
//SIG(-1 S20686C7) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S20686C7 ::~S20686C7(){ note_dtor("S20686C7", this);}
S20686C7 ::S20686C7(){ note_ctor("S20686C7", this);} // tgen

static void Test_S20686C7()
{
  extern Class_Descriptor cd_S20686C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S20686C7, buf);
    S20686C7 *dp, &lv = *(dp=new (buf) S20686C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S20686C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C7)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(48,40), "S20686C7");
    check_base_class_offset(lv, (S20686C8*), ABISELECT(48,40), "S20686C7");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(48,40), "S20686C7");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S20686C7");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(72,52), "S20686C7");
    check_base_class_offset(lv, (S20686C9*), 0, "S20686C7");
    check_base_class_offset(lv, (S2265C38*), 0, "S20686C7");
    check_field_offset(lv, s20686c7f0, ABISELECT(8,4), "S20686C7.s20686c7f0");
    test_class_info(&lv, &cd_S20686C7);
    dp->~S20686C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C7(Test_S20686C7, "S20686C7", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S20686C7C1Ev();
extern void _ZN8S20686C7D2Ev();
Name_Map name_map_S20686C7[] = {
  NSPAIR(_ZN8S20686C7C1Ev),
  NSPAIR(_ZN8S20686C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20686C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20686C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C7[];
extern void _ZN8S20686C7D1Ev();
extern void _ZN8S20686C7D0Ev();
static  VTBL_ENTRY vtc_S20686C7[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&_ZN8S20686C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S20686C7[];
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
static  VTT_ENTRY vtt_S20686C7[] = {
  {&(_ZTV8S20686C7[7]),  7,9},
  {&(_ZTV8S20686C7[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
Class_Descriptor cd_S20686C7 = {  "S20686C7", // class name
  bases_S20686C7, 5,
  &(vtc_S20686C7[0]), // expected_vtbl_contents
  &(vtt_S20686C7[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S20686C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20686C7),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C7),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C6  : virtual S20686C7 , S2265C38 , virtual S2265C28 {
  void *s20686c6f0;
  ~S20686C6(); // tgen
  S20686C6(); // tgen
};
//SIG(-1 S20686C6) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S20686C6 ::~S20686C6(){ note_dtor("S20686C6", this);} // tgen
S20686C6 ::S20686C6(){ note_ctor("S20686C6", this);} // tgen

static void Test_S20686C6()
{
  extern Class_Descriptor cd_S20686C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S20686C6, buf);
    S20686C6 *dp, &lv = *(dp=new (buf) S20686C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S20686C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C6)");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(64,48), "S20686C6");
    check_base_class_offset(lv, (S20686C8*)(S20686C7*), ABISELECT(64,48), "S20686C6");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(64,48), "S20686C6");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C7*), ABISELECT(88,60), "S20686C6");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(88,60), "S20686C6");
    check_base_class_offset(lv, (S20686C9*)(S20686C7*), 0, "S20686C6");
    check_base_class_offset(lv, (S2265C38*)(S20686C7*), ABISELECT(96,64), "S20686C6");
    check_base_class_offset(lv, (S20686C7*), ABISELECT(16,8), "S20686C6");
    /*is_ambiguous_... S20686C6::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20686C6");
    check_base_class_offset(lv, (S2265C28*), 0, "S20686C6");
    check_field_offset(lv, s20686c6f0, ABISELECT(8,4), "S20686C6.s20686c6f0");
    test_class_info(&lv, &cd_S20686C6);
    dp->~S20686C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C6(Test_S20686C6, "S20686C6", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN8S20686C6C1Ev();
extern void _ZN8S20686C6D1Ev();
Name_Map name_map_S20686C6[] = {
  NSPAIR(_ZN8S20686C6C1Ev),
  NSPAIR(_ZN8S20686C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C7;
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20686C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20686C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20686C7,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C6[];
extern void _ZN8S20686C6D1Ev();
extern void _ZN8S20686C6D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20686C6[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&_ZN8S20686C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C6D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S20686C6[];
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void _ZN8S20686C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
extern void _ZN8S20686C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C6[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7__8S20686C6[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C6[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
static  VTT_ENTRY vtt_S20686C6[] = {
  {&(_ZTV8S20686C6[9]),  9,20},
  {&(_ZTV8S20686C6[18]),  18,20},
  {&(_ZTV8S20686C6[9]),  9,20},
  {&(_tg__ZTV8S20686C7__8S20686C6[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7__8S20686C6[5]),  5,7},
  {&(_tg__ZTV8S20686C9__8S20686C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C6 = {  "S20686C6", // class name
  bases_S20686C6, 8,
  &(vtc_S20686C6[0]), // expected_vtbl_contents
  &(vtt_S20686C6[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI8S20686C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20686C6),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C6),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C14  : S5217C60_nt , S20686C8 {
};
//SIG(-1 S20686C14) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S20686C14()
{
  extern Class_Descriptor cd_S20686C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20686C14, buf);
    S20686C14 &lv = *(new (buf) S20686C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20686C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C14)");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S20686C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(8,4), "S20686C14");
    check_base_class_offset(lv, (S20686C8*), ABISELECT(8,4), "S20686C14");
    test_class_info(&lv, &cd_S20686C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C14(Test_S20686C14, "S20686C14", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
static Base_Class bases_S20686C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20686C14[];
Class_Descriptor cd_S20686C14 = {  "S20686C14", // class name
  bases_S20686C14, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20686C14),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C13  : virtual S5217C60_nt , S2265C38 , virtual S20686C14 , virtual S20686C9 {
  ~S20686C13(); // tgen
  S20686C13(); // tgen
};
//SIG(-1 S20686C13) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S20686C13 ::~S20686C13(){ note_dtor("S20686C13", this);} // tgen
S20686C13 ::S20686C13(){ note_ctor("S20686C13", this);} // tgen

static void Test_S20686C13()
{
  extern Class_Descriptor cd_S20686C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20686C13, buf);
    S20686C13 *dp, &lv = *(dp=new (buf) S20686C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20686C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C13)");
    /*is_ambiguous_... S20686C13::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S20686C13");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(8,4), "S20686C13");
    check_base_class_offset(lv, (S2265C38*), 0, "S20686C13");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(16,8), "S20686C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(24,12), "S20686C13");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(24,12), "S20686C13");
    check_base_class_offset(lv, (S20686C14*), ABISELECT(16,8), "S20686C13");
    /*is_ambiguous_... S20686C13::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(48,24), "S20686C13");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(48,24), "S20686C13");
    check_base_class_offset(lv, (S20686C9*), 0, "S20686C13");
    test_class_info(&lv, &cd_S20686C13);
    dp->~S20686C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C13(Test_S20686C13, "S20686C13", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20686C13C1Ev();
extern void _ZN9S20686C13D1Ev();
Name_Map name_map_S20686C13[] = {
  NSPAIR(_ZN9S20686C13C1Ev),
  NSPAIR(_ZN9S20686C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
static Base_Class bases_S20686C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20686C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20686C13[];
extern void _ZN9S20686C13D1Ev();
extern void _ZN9S20686C13D0Ev();
static  VTBL_ENTRY vtc_S20686C13[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&_ZN9S20686C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C13D0Ev,
};
extern VTBL_ENTRY _ZTV9S20686C13[];
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C13[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
static  VTT_ENTRY vtt_S20686C13[] = {
  {&(_ZTV9S20686C13[7]),  7,9},
  {&(_ZTV9S20686C13[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
Class_Descriptor cd_S20686C13 = {  "S20686C13", // class name
  bases_S20686C13, 9,
  &(vtc_S20686C13[0]), // expected_vtbl_contents
  &(vtt_S20686C13[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20686C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20686C13),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20686C13),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C12  : virtual S20686C13 {
  ::S20686C9 s20686c12f0;
  ~S20686C12(); // tgen
  S20686C12(); // tgen
};
//SIG(-1 S20686C12) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S20686C12 ::~S20686C12(){ note_dtor("S20686C12", this);} // tgen
S20686C12 ::S20686C12(){ note_ctor("S20686C12", this);} // tgen

static void Test_S20686C12()
{
  extern Class_Descriptor cd_S20686C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20686C12, buf);
    S20686C12 *dp, &lv = *(dp=new (buf) S20686C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20686C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C12)");
    /*is_ambiguous_... S20686C13::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*), ABISELECT(48,24), "S20686C12");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(48,24), "S20686C12");
    check_base_class_offset(lv, (S2265C38*)(S20686C13*), 0, "S20686C12");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(56,28), "S20686C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(64,32), "S20686C12");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(64,32), "S20686C12");
    check_base_class_offset(lv, (S20686C14*)(S20686C13*), ABISELECT(56,28), "S20686C12");
    /*is_ambiguous_... S20686C12::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(88,44), "S20686C12");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(88,44), "S20686C12");
    check_base_class_offset(lv, (S20686C9*)(S20686C13*), 0, "S20686C12");
    check_base_class_offset(lv, (S20686C13*), 0, "S20686C12");
    check_field_offset(lv, s20686c12f0, ABISELECT(8,4), "S20686C12.s20686c12f0");
    test_class_info(&lv, &cd_S20686C12);
    dp->~S20686C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C12(Test_S20686C12, "S20686C12", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S20686C12C1Ev();
extern void _ZN9S20686C12D1Ev();
Name_Map name_map_S20686C12[] = {
  NSPAIR(_ZN9S20686C12C1Ev),
  NSPAIR(_ZN9S20686C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
static Base_Class bases_S20686C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20686C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20686C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20686C12[];
extern void _ZN9S20686C12D1Ev();
extern void _ZN9S20686C12D0Ev();
static  VTBL_ENTRY vtc_S20686C12[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&_ZN9S20686C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C12D0Ev,
};
extern VTBL_ENTRY _ZTV9S20686C12[];
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C13__9S20686C12[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C12[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
static  VTT_ENTRY vtt_S20686C12[] = {
  {&(_ZTV9S20686C12[8]),  8,10},
  {&(_ZTV9S20686C12[8]),  8,10},
  {&(_ZTV9S20686C12[8]),  8,10},
  {&(_tg__ZTV9S20686C13__9S20686C12[7]),  7,9},
  {&(_tg__ZTV9S20686C13__9S20686C12[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20686C12[];
extern  VTBL_ENTRY _ZTV9S20686C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C12[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C12 = {  "S20686C12", // class name
  bases_S20686C12, 10,
  &(vtc_S20686C12[0]), // expected_vtbl_contents
  &(vtt_S20686C12[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S20686C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20686C12),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20686C12),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C15  : S2265C38 , virtual S20686C8 , virtual S20686C9 , virtual S20686C14 , virtual S20686C7 {
  __tsi64 s20686c15f0;
  virtual  ~S20686C15(); // _ZN9S20686C15D2Ev
  S20686C15(); // tgen
};
//SIG(-1 S20686C15) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S20686C15 ::~S20686C15(){ note_dtor("S20686C15", this);}
S20686C15 ::S20686C15(){ note_ctor("S20686C15", this);} // tgen

static void Test_S20686C15()
{
  extern Class_Descriptor cd_S20686C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S20686C15, buf);
    S20686C15 *dp, &lv = *(dp=new (buf) S20686C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S20686C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C15)");
    /*is_ambiguous_... S20686C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S20686C15");
    /*is_ambiguous_... S20686C15::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(16,12), "S20686C15");
    /*is_ambiguous_... S20686C15::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*), ABISELECT(16,12), "S20686C15");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(16,12), "S20686C15");
    check_base_class_offset(lv, (S20686C8*)(S20686C7*), ABISELECT(16,12), "S20686C15");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(40,24), "S20686C15");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C7*), ABISELECT(40,24), "S20686C15");
    check_base_class_offset(lv, (S20686C9*), 0, "S20686C15");
    check_base_class_offset(lv, (S20686C9*)(S20686C7*), 0, "S20686C15");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(48,28), "S20686C15");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(56,32), "S20686C15");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(56,32), "S20686C15");
    check_base_class_offset(lv, (S20686C14*), ABISELECT(48,28), "S20686C15");
    check_base_class_offset(lv, (S2265C38*)(S20686C7*), ABISELECT(124,84), "S20686C15");
    check_base_class_offset(lv, (S20686C7*), ABISELECT(80,44), "S20686C15");
    check_field_offset(lv, s20686c15f0, ABISELECT(8,4), "S20686C15.s20686c15f0");
    test_class_info(&lv, &cd_S20686C15);
    dp->~S20686C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C15(Test_S20686C15, "S20686C15", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN9S20686C15C1Ev();
extern void _ZN9S20686C15D2Ev();
Name_Map name_map_S20686C15[] = {
  NSPAIR(_ZN9S20686C15C1Ev),
  NSPAIR(_ZN9S20686C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C7;
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
static Base_Class bases_S20686C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20686C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20686C7,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20686C15[];
extern void _ZN9S20686C15D1Ev();
extern void _ZN9S20686C15D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZThn80_N9S20686C15D1Ev,_ZThn44_N9S20686C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
extern void ABISELECT(_ZThn80_N9S20686C15D0Ev,_ZThn44_N9S20686C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20686C15[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&_ZN9S20686C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C15D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20686C15[];
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C15[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void _ZN8S20686C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
extern void _ZN8S20686C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__9S20686C15[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7__9S20686C15[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
static  VTT_ENTRY vtt_S20686C15[] = {
  {&(_ZTV9S20686C15[9]),  9,20},
  {&(_ZTV9S20686C15[9]),  9,20},
  {&(_ZTV9S20686C15[18]),  18,20},
  {&(_tg__ZTV8S20686C9__9S20686C15[4]),  4,6},
  {&(_tg__ZTV8S20686C7__9S20686C15[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7__9S20686C15[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S20686C15[];
extern  VTBL_ENTRY _ZTV9S20686C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C15[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20686C15D0Ev,_ZThn44_N9S20686C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20686C15D1Ev,_ZThn44_N9S20686C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C15 = {  "S20686C15", // class name
  bases_S20686C15, 11,
  &(vtc_S20686C15[0]), // expected_vtbl_contents
  &(vtt_S20686C15[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI9S20686C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20686C15),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20686C15),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C16  : S20686C14 , S20686C8 , virtual S2265C38 {
  virtual  ~S20686C16(); // _ZN9S20686C16D2Ev
  S20686C16(); // tgen
};
//SIG(-1 S20686C16) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S20686C16 ::~S20686C16(){ note_dtor("S20686C16", this);}
S20686C16 ::S20686C16(){ note_ctor("S20686C16", this);} // tgen

static void Test_S20686C16()
{
  extern Class_Descriptor cd_S20686C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20686C16, buf);
    S20686C16 *dp, &lv = *(dp=new (buf) S20686C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20686C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C16)");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(8,4), "S20686C16");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(16,8), "S20686C16");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(16,8), "S20686C16");
    check_base_class_offset(lv, (S20686C14*), ABISELECT(8,4), "S20686C16");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(40,20), "S20686C16");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*), ABISELECT(40,20), "S20686C16");
    check_base_class_offset(lv, (S2265C38*), 0, "S20686C16");
    test_class_info(&lv, &cd_S20686C16);
    dp->~S20686C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C16(Test_S20686C16, "S20686C16", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20686C16C1Ev();
extern void _ZN9S20686C16D2Ev();
Name_Map name_map_S20686C16[] = {
  NSPAIR(_ZN9S20686C16C1Ev),
  NSPAIR(_ZN9S20686C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20686C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20686C16[];
extern void _ZN9S20686C16D1Ev();
extern void _ZN9S20686C16D0Ev();
static  VTBL_ENTRY vtc_S20686C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C16[0]),
  (VTBL_ENTRY)&_ZN9S20686C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C16D0Ev,
};
extern VTBL_ENTRY _ZTV9S20686C16[];
static  VTT_ENTRY vtt_S20686C16[] = {
  {&(_ZTV9S20686C16[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20686C16[];
extern  VTBL_ENTRY _ZTV9S20686C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C16[];
Class_Descriptor cd_S20686C16 = {  "S20686C16", // class name
  bases_S20686C16, 7,
  &(vtc_S20686C16[0]), // expected_vtbl_contents
  &(vtt_S20686C16[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20686C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20686C16),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20686C16),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C5  : virtual S20686C6 , virtual S20686C12 , virtual S20686C15 , virtual S20686C16 , S20686C13 {
  virtual  ~S20686C5(); // _ZN8S20686C5D2Ev
  S20686C5(); // tgen
};
//SIG(-1 S20686C5) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd FL} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S20686C5 ::~S20686C5(){ note_dtor("S20686C5", this);}
S20686C5 ::S20686C5(){ note_ctor("S20686C5", this);} // tgen

static void Test_S20686C5()
{
  extern Class_Descriptor cd_S20686C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S20686C5, buf);
    S20686C5 *dp, &lv = *(dp=new (buf) S20686C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S20686C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C5)");
    /*is_ambiguous_... S20686C5::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(72,52), "S20686C5");
    check_base_class_offset(lv, (S20686C8*)(S20686C7*), ABISELECT(72,52), "S20686C5");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(72,52), "S20686C5");
    /*is_ambiguous_... S20686C15::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C15*), ABISELECT(72,52), "S20686C5");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C7*), ABISELECT(96,64), "S20686C5");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(96,64), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*), ABISELECT(96,64), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*), ABISELECT(96,64), "S20686C5");
    check_base_class_offset(lv, (S20686C9*)(S20686C7*), ABISELECT(8,4), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*), ABISELECT(8,4), "S20686C5");
    check_base_class_offset(lv, (S20686C9*)(S20686C15*), ABISELECT(8,4), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*), ABISELECT(8,4), "S20686C5");
    check_base_class_offset(lv, (S2265C38*)(S20686C7*), ABISELECT(104,68), "S20686C5");
    check_base_class_offset(lv, (S2265C38*)(S20686C16*), ABISELECT(104,68), "S20686C5");
    check_base_class_offset(lv, (S20686C7*)(S20686C6*), ABISELECT(24,12), "S20686C5");
    check_base_class_offset(lv, (S20686C7*)(S20686C15*), ABISELECT(24,12), "S20686C5");
    /*is_ambiguous_... S20686C6::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*), ABISELECT(8,4), "S20686C5");
    check_base_class_offset(lv, (S2265C28*)(S20686C6*), 0, "S20686C5");
    check_base_class_offset(lv, (S20686C6*), ABISELECT(8,4), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*), ABISELECT(112,72), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(160,96), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(168,100), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C14 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(168,100), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*), ABISELECT(160,96), "S20686C5");
    check_base_class_offset(lv, (S20686C14*)(S20686C15*), ABISELECT(160,96), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*), ABISELECT(160,96), "S20686C5");
    check_base_class_offset(lv, (S20686C13*)(S20686C12*), ABISELECT(112,72), "S20686C5");
    check_base_class_offset(lv, (S20686C12*), ABISELECT(112,72), "S20686C5");
    /*is_ambiguous_... S20686C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C15*), ABISELECT(192,112), "S20686C5");
    check_base_class_offset(lv, (S20686C15*), ABISELECT(192,112), "S20686C5");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*)(S20686C16*), ABISELECT(216,128), "S20686C5");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(224,132), "S20686C5");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(224,132), "S20686C5");
    check_base_class_offset(lv, (S20686C14*)(S20686C16*), ABISELECT(216,128), "S20686C5");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C16*), ABISELECT(248,144), "S20686C5");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C16*), ABISELECT(248,144), "S20686C5");
    check_base_class_offset(lv, (S20686C16*), ABISELECT(208,124), "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*), 0, "S20686C5");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C13*), 0, "S20686C5");
    test_class_info(&lv, &cd_S20686C5);
    dp->~S20686C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C5(Test_S20686C5, "S20686C5", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S20686C5C1Ev();
extern void _ZN8S20686C5D2Ev();
Name_Map name_map_S20686C5[] = {
  NSPAIR(_ZN8S20686C5C1Ev),
  NSPAIR(_ZN8S20686C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C7;
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C12;
extern VTBL_ENTRY _ZTI9S20686C12[];
extern  VTBL_ENTRY _ZTV9S20686C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C15;
extern VTBL_ENTRY _ZTI9S20686C15[];
extern  VTBL_ENTRY _ZTV9S20686C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C16;
extern VTBL_ENTRY _ZTI9S20686C16[];
extern  VTBL_ENTRY _ZTV9S20686C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
static Base_Class bases_S20686C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20686C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20686C7,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20686C6,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20686C13,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20686C12,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20686C15,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20686C16,    ABISELECT(208,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20686C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C5[];
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void _ZN8S20686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void _ZN8S20686C5D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20686C5D1Ev,_ZThn4_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20686C5D0Ev,_ZThn4_N8S20686C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C5D1Ev,_ZThn12_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C5D0Ev,_ZThn12_N8S20686C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S20686C5D1Ev,_ZThn72_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S20686C5D0Ev,_ZThn72_N8S20686C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn192_N8S20686C5D1Ev,_ZThn112_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn192_N8S20686C5D0Ev,_ZThn112_N8S20686C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C5D1Ev,_ZThn124_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C5D0Ev,_ZThn124_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20686C5[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20686C5[];
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C13__A__8S20686C5[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20686C13D1Ev,_ZThn4_N9S20686C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20686C13D0Ev,_ZThn4_N9S20686C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C13__A__8S20686C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C6__8S20686C5[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void _ZN8S20686C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
extern void _ZN8S20686C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C5[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7__8S20686C5[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C5[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void _ZN9S20686C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
extern void _ZN9S20686C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C5[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C12__8S20686C5[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C13__8S20686C5[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C13__8S20686C5[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void _ZN9S20686C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
extern void _ZN9S20686C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C5[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C15__8S20686C5[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C7__9S20686C15__8S20686C5[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void _ZN9S20686C16D1Ev();
extern void _ZN9S20686C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C5[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C16[0]),
  (VTBL_ENTRY)&_ZN9S20686C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C16D0Ev,
};
static  VTT_ENTRY vtt_S20686C5[] = {
  {&(_ZTV8S20686C5[15]),  15,64},
  {&(_tg__ZTV9S20686C13__A__8S20686C5[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C13__A__8S20686C5[5]),  5,7},
  {&(_ZTV8S20686C5[26]),  26,64},
  {&(_ZTV8S20686C5[35]),  35,64},
  {&(_ZTV8S20686C5[26]),  26,64},
  {&(_ZTV8S20686C5[45]),  45,64},
  {&(_ZTV8S20686C5[45]),  45,64},
  {&(_ZTV8S20686C5[56]),  56,64},
  {&(_ZTV8S20686C5[62]),  62,64},
  {&(_tg__ZTV8S20686C6__8S20686C5[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C6__8S20686C5[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C5[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C5[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7__8S20686C5[5]),  5,7},
  {&(_tg__ZTV8S20686C9__8S20686C5[4]),  4,6},
  {&(_tg__ZTV9S20686C12__8S20686C5[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C5[8]),  8,10},
  {&(_tg__ZTV8S20686C9__9S20686C12__8S20686C5[5]),  5,7},
  {&(_tg__ZTV9S20686C13__8S20686C5[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C13__8S20686C5[5]),  5,7},
  {&(_tg__ZTV9S20686C15__8S20686C5[9]),  9,11},
  {&(_tg__ZTV8S20686C9__9S20686C15__8S20686C5[5]),  5,7},
  {&(_tg__ZTV8S20686C7__9S20686C15__8S20686C5[7]),  7,9},
  {&(_tg__ZTV9S20686C16__8S20686C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20686C5[];
extern  VTBL_ENTRY _ZTV8S20686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C5[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20686C13D0Ev,_ZThn4_N9S20686C13D0Ev),
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20686C13D1Ev,_ZThn4_N9S20686C13D1Ev),
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C5D0Ev,_ZThn124_N8S20686C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C5D1Ev,_ZThn124_N8S20686C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20686C5D0Ev,_ZThn112_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20686C5D0Ev,_ZThn72_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C5D0Ev,_ZThn12_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C5D0Ev,_ZThn4_N8S20686C5D0Ev),
  (VTBL_ENTRY)_ZN8S20686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20686C5D1Ev,_ZThn112_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20686C5D1Ev,_ZThn72_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C5D1Ev,_ZThn12_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C5D1Ev,_ZThn4_N8S20686C5D1Ev),
  (VTBL_ENTRY)_ZN8S20686C5D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C5 = {  "S20686C5", // class name
  bases_S20686C5, 27,
  &(vtc_S20686C5[0]), // expected_vtbl_contents
  &(vtt_S20686C5[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S20686C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20686C5),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C5),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C4  : virtual S20686C5 , S2265C28 , S20686C6 {
  ~S20686C4(); // tgen
  S20686C4(); // tgen
};
//SIG(-1 S20686C4) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd FL} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} BC9 BC3}


S20686C4 ::~S20686C4(){ note_dtor("S20686C4", this);} // tgen
S20686C4 ::S20686C4(){ note_ctor("S20686C4", this);} // tgen

static void Test_S20686C4()
{
  extern Class_Descriptor cd_S20686C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20686C4, buf);
    S20686C4 *dp, &lv = *(dp=new (buf) S20686C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20686C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C4)");
    /*is_ambiguous_... S20686C4::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(88,60), "S20686C4");
    check_base_class_offset(lv, (S20686C8*)(S20686C7*), ABISELECT(88,60), "S20686C4");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(88,60), "S20686C4");
    /*is_ambiguous_... S20686C15::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C15*), ABISELECT(88,60), "S20686C4");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C7*), ABISELECT(112,72), "S20686C4");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(112,72), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*), ABISELECT(112,72), "S20686C4");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*)(S20686C5*), ABISELECT(112,72), "S20686C4");
    check_base_class_offset(lv, (S20686C9*)(S20686C7*), ABISELECT(24,12), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*), ABISELECT(24,12), "S20686C4");
    check_base_class_offset(lv, (S20686C9*)(S20686C15*), ABISELECT(24,12), "S20686C4");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*)(S20686C5*), ABISELECT(24,12), "S20686C4");
    check_base_class_offset(lv, (S2265C38*)(S20686C7*), ABISELECT(120,76), "S20686C4");
    check_base_class_offset(lv, (S2265C38*)(S20686C16*), ABISELECT(120,76), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C7*)(S20686C6*), ABISELECT(40,20), "S20686C4");
    check_base_class_offset(lv, (S20686C7*)(S20686C15*), ABISELECT(40,20), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C7*)(S20686C6*), ABISELECT(40,20), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*), ABISELECT(24,12), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C6*), ABISELECT(120,76), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C6*), ABISELECT(120,76), "S20686C4");
    check_base_class_offset(lv, (S20686C6*)(S20686C5*), ABISELECT(24,12), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*), ABISELECT(128,80), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(176,104), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(184,108), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C14 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(184,108), "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*), ABISELECT(176,104), "S20686C4");
    check_base_class_offset(lv, (S20686C14*)(S20686C15*), ABISELECT(176,104), "S20686C4");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*)(S20686C5*), ABISELECT(176,104), "S20686C4");
    check_base_class_offset(lv, (S20686C13*)(S20686C12*), ABISELECT(128,80), "S20686C4");
    check_base_class_offset(lv, (S20686C12*)(S20686C5*), ABISELECT(128,80), "S20686C4");
    /*is_ambiguous_... S20686C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C15*), ABISELECT(208,120), "S20686C4");
    check_base_class_offset(lv, (S20686C15*)(S20686C5*), ABISELECT(208,120), "S20686C4");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*)(S20686C16*), ABISELECT(232,136), "S20686C4");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(240,140), "S20686C4");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(240,140), "S20686C4");
    check_base_class_offset(lv, (S20686C14*)(S20686C16*), ABISELECT(232,136), "S20686C4");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C16*), ABISELECT(264,152), "S20686C4");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C16*), ABISELECT(264,152), "S20686C4");
    check_base_class_offset(lv, (S20686C16*)(S20686C5*), ABISELECT(224,132), "S20686C4");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*)(S20686C5*), ABISELECT(16,8), "S20686C4");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C13*)(S20686C5*), ABISELECT(16,8), "S20686C4");
    check_base_class_offset(lv, (S20686C5*), ABISELECT(16,8), "S20686C4");
    /*is_ambiguous_... S20686C4::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*), 0, "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*), 0, "S20686C4");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C6*), 0, "S20686C4");
    test_class_info(&lv, &cd_S20686C4);
    dp->~S20686C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C4(Test_S20686C4, "S20686C4", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN8S20686C4C1Ev();
extern void _ZN8S20686C4D1Ev();
Name_Map name_map_S20686C4[] = {
  NSPAIR(_ZN8S20686C4C1Ev),
  NSPAIR(_ZN8S20686C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C7;
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C12;
extern VTBL_ENTRY _ZTI9S20686C12[];
extern  VTBL_ENTRY _ZTV9S20686C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C15;
extern VTBL_ENTRY _ZTI9S20686C15[];
extern  VTBL_ENTRY _ZTV9S20686C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C16;
extern VTBL_ENTRY _ZTI9S20686C16[];
extern  VTBL_ENTRY _ZTV9S20686C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C5;
extern VTBL_ENTRY _ZTI8S20686C5[];
extern  VTBL_ENTRY _ZTV8S20686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C5[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
static Base_Class bases_S20686C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20686C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20686C7,    ABISELECT(40,20), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20686C6,    ABISELECT(24,12), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20686C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20686C12,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20686C15,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20686C16,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20686C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20686C5,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20686C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C4[];
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void _ZN8S20686C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void _ZN8S20686C4D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20686C4D1Ev,_ZThn8_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20686C4D0Ev,_ZThn8_N8S20686C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C4D1Ev,_ZThn12_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C4D0Ev,_ZThn12_N8S20686C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S20686C4D1Ev,_ZThn20_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S20686C4D0Ev,_ZThn20_N8S20686C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20686C4D1Ev,_ZThn80_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20686C4D0Ev,_ZThn80_N8S20686C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C4D1Ev,_ZThn120_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C4D0Ev,_ZThn120_N8S20686C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20686C4D1Ev,_ZThn132_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20686C4D0Ev,_ZThn132_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20686C4[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  ABISELECT(-16,-8),
  ABISELECT(72,52),
  ABISELECT(96,64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20686C4[];
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__A__8S20686C4[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(112,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S20686C6D1Ev,_ZThn20_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S20686C6D0Ev,_ZThn20_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C6__A__8S20686C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C6D1Ev,_ZThn12_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C6D0Ev,_ZThn12_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C6__A__8S20686C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void _ZN8S20686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void _ZN8S20686C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C5__8S20686C4[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C138S20686C5__A1__8S20686C4[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20686C13D1Ev,_ZThn4_N9S20686C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20686C13D0Ev,_ZThn4_N9S20686C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C138S20686C5__A1__8S20686C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20686C5D1Ev,_ZThn4_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20686C5D0Ev,_ZThn4_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C5__8S20686C4[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C5D1Ev,_ZThn12_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C5D0Ev,_ZThn12_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C5__8S20686C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S20686C5D1Ev,_ZThn72_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S20686C5D0Ev,_ZThn72_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C5__8S20686C4[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn192_N8S20686C5D1Ev,_ZThn112_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn192_N8S20686C5D0Ev,_ZThn112_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C5__8S20686C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C5D1Ev,_ZThn124_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C5D0Ev,_ZThn124_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C5__8S20686C4[] = {
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C4[] = {
  ABISELECT(96,64),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C6__8S20686C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void _ZN8S20686C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
extern void _ZN8S20686C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7__8S20686C4[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C4[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void _ZN9S20686C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
extern void _ZN9S20686C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C4[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C12__8S20686C4[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C13__8S20686C4[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C13__8S20686C4[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void _ZN9S20686C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
extern void _ZN9S20686C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C4[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C15__8S20686C4[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C7__9S20686C15__8S20686C4[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void _ZN9S20686C16D1Ev();
extern void _ZN9S20686C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C4[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C16[0]),
  (VTBL_ENTRY)&_ZN9S20686C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C16D0Ev,
};
static  VTT_ENTRY vtt_S20686C4[] = {
  {&(_ZTV8S20686C4[16]),  16,82},
  {&(_tg__ZTV8S20686C6__A__8S20686C4[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C6__A__8S20686C4[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C6__A__8S20686C4[5]),  5,7},
  {&(_ZTV8S20686C4[33]),  33,82},
  {&(_ZTV8S20686C4[44]),  44,82},
  {&(_ZTV8S20686C4[53]),  53,82},
  {&(_ZTV8S20686C4[44]),  44,82},
  {&(_ZTV8S20686C4[63]),  63,82},
  {&(_ZTV8S20686C4[63]),  63,82},
  {&(_ZTV8S20686C4[74]),  74,82},
  {&(_ZTV8S20686C4[80]),  80,82},
  {&(_tg__ZTV8S20686C5__8S20686C4[15]),  15,17},
  {&(_tg__ZTV9S20686C138S20686C5__A1__8S20686C4[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C138S20686C5__A1__8S20686C4[5]),  5,7},
  {&(_tg__ZTV8S20686C6__8S20686C5__8S20686C4[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C5__8S20686C4[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C5__8S20686C4[9]),  9,11},
  {&(_tg__ZTV9S20686C12__8S20686C5__8S20686C4[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C5__8S20686C4[8]),  8,10},
  {&(_tg__ZTV9S20686C15__8S20686C5__8S20686C4[9]),  9,11},
  {&(_tg__ZTV9S20686C16__8S20686C5__8S20686C4[4]),  4,6},
  {&(_tg__ZTV8S20686C6__8S20686C4[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C6__8S20686C4[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C4[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C4[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7__8S20686C4[5]),  5,7},
  {&(_tg__ZTV8S20686C9__8S20686C4[4]),  4,6},
  {&(_tg__ZTV9S20686C12__8S20686C4[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C4[8]),  8,10},
  {&(_tg__ZTV8S20686C9__9S20686C12__8S20686C4[5]),  5,7},
  {&(_tg__ZTV9S20686C13__8S20686C4[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C13__8S20686C4[5]),  5,7},
  {&(_tg__ZTV9S20686C15__8S20686C4[9]),  9,11},
  {&(_tg__ZTV8S20686C9__9S20686C15__8S20686C4[5]),  5,7},
  {&(_tg__ZTV8S20686C7__9S20686C15__8S20686C4[7]),  7,9},
  {&(_tg__ZTV9S20686C16__8S20686C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20686C4[];
extern  VTBL_ENTRY _ZTV8S20686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C4[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C5D0Ev,_ZThn124_N8S20686C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C5D1Ev,_ZThn124_N8S20686C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20686C13D0Ev,_ZThn4_N9S20686C13D0Ev),
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20686C13D1Ev,_ZThn4_N9S20686C13D1Ev),
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20686C5D0Ev,_ZThn112_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20686C5D0Ev,_ZThn72_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C5D0Ev,_ZThn12_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C5D0Ev,_ZThn4_N8S20686C5D0Ev),
  (VTBL_ENTRY)_ZN8S20686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20686C5D1Ev,_ZThn112_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20686C5D1Ev,_ZThn72_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C5D1Ev,_ZThn12_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C5D1Ev,_ZThn4_N8S20686C5D1Ev),
  (VTBL_ENTRY)_ZN8S20686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C6D0Ev,_ZThn12_N8S20686C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C6D0Ev,_ZThn20_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C6D1Ev,_ZThn12_N8S20686C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C6D1Ev,_ZThn20_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C4D0Ev,_ZThn132_N8S20686C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C4D1Ev,_ZThn132_N8S20686C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C4D0Ev,_ZThn120_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C4D0Ev,_ZThn80_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C4D0Ev,_ZThn20_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C4D0Ev,_ZThn12_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C4D0Ev,_ZThn8_N8S20686C4D0Ev),
  (VTBL_ENTRY)_ZN8S20686C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C4D1Ev,_ZThn120_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C4D1Ev,_ZThn80_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C4D1Ev,_ZThn20_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C4D1Ev,_ZThn12_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C4D1Ev,_ZThn8_N8S20686C4D1Ev),
  (VTBL_ENTRY)_ZN8S20686C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C4 = {  "S20686C4", // class name
  bases_S20686C4, 31,
  &(vtc_S20686C4[0]), // expected_vtbl_contents
  &(vtt_S20686C4[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI8S20686C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20686C4),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C4),37, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C2  : virtual S5217C60_nt , S20686C4 {
  ~S20686C2(); // tgen
  S20686C2(); // tgen
};
//SIG(-1 S20686C2) C1{ VBC2{ m Fp} BC3{ VBC4{ VBC5{ VBC6{ VBC7{ BC2 Fp[2]} VBC2 VBC8{ VBC2 VBC7 vd} VBC9{ m} vd Fi[9]} BC9 VBC10{ m} Fp} VBC11{ VBC12{ VBC2 BC9 VBC13{ BC2 BC7} VBC8} FC8} VBC14{ BC9 VBC7 VBC8 VBC13 VBC6 vd FL} VBC15{ BC13 BC7 VBC9 vd} BC12 vd} BC10 BC5}}


S20686C2 ::~S20686C2(){ note_dtor("S20686C2", this);} // tgen
S20686C2 ::S20686C2(){ note_ctor("S20686C2", this);} // tgen

static void Test_S20686C2()
{
  extern Class_Descriptor cd_S20686C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20686C2, buf);
    S20686C2 *dp, &lv = *(dp=new (buf) S20686C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20686C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C2)");
    /*is_ambiguous_... S20686C2::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S20686C2");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C7*), ABISELECT(16,8), "S20686C2");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(16,8), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*), ABISELECT(16,8), "S20686C2");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*)(S20686C5*), ABISELECT(16,8), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(96,64), "S20686C2");
    check_base_class_offset(lv, (S20686C8*)(S20686C7*), ABISELECT(96,64), "S20686C2");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(96,64), "S20686C2");
    /*is_ambiguous_... S20686C15::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C15*), ABISELECT(96,64), "S20686C2");
    check_base_class_offset(lv, (S20686C9*)(S20686C7*), ABISELECT(32,16), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*), ABISELECT(32,16), "S20686C2");
    check_base_class_offset(lv, (S20686C9*)(S20686C15*), ABISELECT(32,16), "S20686C2");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*)(S20686C5*), ABISELECT(32,16), "S20686C2");
    check_base_class_offset(lv, (S2265C38*)(S20686C7*), ABISELECT(120,76), "S20686C2");
    check_base_class_offset(lv, (S2265C38*)(S20686C16*), ABISELECT(120,76), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C7*)(S20686C6*), ABISELECT(48,24), "S20686C2");
    check_base_class_offset(lv, (S20686C7*)(S20686C15*), ABISELECT(48,24), "S20686C2");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C7*)(S20686C6*)(S20686C4*), ABISELECT(48,24), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*), ABISELECT(32,16), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C6*), ABISELECT(120,76), "S20686C2");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C6*)(S20686C4*), ABISELECT(120,76), "S20686C2");
    check_base_class_offset(lv, (S20686C6*)(S20686C5*), ABISELECT(32,16), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*), ABISELECT(128,80), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(176,104), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(184,108), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C14 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(184,108), "S20686C2");
    /*is_ambiguous_... S20686C2::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*), ABISELECT(176,104), "S20686C2");
    check_base_class_offset(lv, (S20686C14*)(S20686C15*), ABISELECT(176,104), "S20686C2");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*)(S20686C5*), ABISELECT(176,104), "S20686C2");
    check_base_class_offset(lv, (S20686C13*)(S20686C12*), ABISELECT(128,80), "S20686C2");
    check_base_class_offset(lv, (S20686C12*)(S20686C5*), ABISELECT(128,80), "S20686C2");
    /*is_ambiguous_... S20686C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C15*), ABISELECT(208,120), "S20686C2");
    check_base_class_offset(lv, (S20686C15*)(S20686C5*), ABISELECT(208,120), "S20686C2");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*)(S20686C16*), ABISELECT(232,136), "S20686C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(240,140), "S20686C2");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(240,140), "S20686C2");
    check_base_class_offset(lv, (S20686C14*)(S20686C16*), ABISELECT(232,136), "S20686C2");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C16*), ABISELECT(264,152), "S20686C2");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C16*), ABISELECT(264,152), "S20686C2");
    check_base_class_offset(lv, (S20686C16*)(S20686C5*), ABISELECT(224,132), "S20686C2");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*)(S20686C5*), ABISELECT(24,12), "S20686C2");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C13*)(S20686C5*), ABISELECT(24,12), "S20686C2");
    check_base_class_offset(lv, (S20686C5*)(S20686C4*), ABISELECT(24,12), "S20686C2");
    /*is_ambiguous_... S20686C4::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C4*), 0, "S20686C2");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*)(S20686C4*), 0, "S20686C2");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C6*)(S20686C4*), 0, "S20686C2");
    check_base_class_offset(lv, (S20686C4*), 0, "S20686C2");
    test_class_info(&lv, &cd_S20686C2);
    dp->~S20686C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C2(Test_S20686C2, "S20686C2", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN8S20686C2C1Ev();
extern void _ZN8S20686C2D1Ev();
Name_Map name_map_S20686C2[] = {
  NSPAIR(_ZN8S20686C2C1Ev),
  NSPAIR(_ZN8S20686C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C7;
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C12;
extern VTBL_ENTRY _ZTI9S20686C12[];
extern  VTBL_ENTRY _ZTV9S20686C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C15;
extern VTBL_ENTRY _ZTI9S20686C15[];
extern  VTBL_ENTRY _ZTV9S20686C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C16;
extern VTBL_ENTRY _ZTI9S20686C16[];
extern  VTBL_ENTRY _ZTV9S20686C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C5;
extern VTBL_ENTRY _ZTI8S20686C5[];
extern  VTBL_ENTRY _ZTV8S20686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C5[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
extern Class_Descriptor cd_S20686C4;
extern VTBL_ENTRY _ZTI8S20686C4[];
extern  VTBL_ENTRY _ZTV8S20686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C4[];
static Base_Class bases_S20686C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20686C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20686C7,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20686C6,    ABISELECT(32,16), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20686C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20686C12,    ABISELECT(128,80), //bcp->offset
    55, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20686C15,    ABISELECT(208,120), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20686C16,    ABISELECT(224,132), //bcp->offset
    76, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20686C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20686C5,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20686C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20686C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C2[];
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void _ZN8S20686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void _ZN8S20686C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C2D1Ev,_ZThn12_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C2D0Ev,_ZThn12_N8S20686C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20686C2D1Ev,_ZThn16_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20686C2D0Ev,_ZThn16_N8S20686C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20686C2D1Ev,_ZThn24_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20686C2D0Ev,_ZThn24_N8S20686C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S20686C2D1Ev,_ZThn80_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S20686C2D0Ev,_ZThn80_N8S20686C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C2D1Ev,_ZThn120_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C2D0Ev,_ZThn120_N8S20686C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C2D1Ev,_ZTv0_n16_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn224_N8S20686C2D1Ev,_ZThn132_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C2D0Ev,_ZTv0_n16_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn224_N8S20686C2D0Ev,_ZThn132_N8S20686C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20686C2[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C2D1Ev,_ZTv0_n16_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C2D0Ev,_ZTv0_n16_N8S20686C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20686C2[];
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void _ZN8S20686C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void _ZN8S20686C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C4__8S20686C2[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(176,104),
  ABISELECT(128,80),
  ABISELECT(128,80),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C68S20686C4__A1__8S20686C2[] = {
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(32,16),
  ABISELECT(48,24),
  0,
  ABISELECT(96,64),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S20686C6D1Ev,_ZThn24_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S20686C6D0Ev,_ZThn24_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C68S20686C4__A1__8S20686C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S20686C6D1Ev,_ZThn16_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S20686C6D0Ev,_ZThn16_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C68S20686C4__A1__8S20686C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C4D1Ev,_ZThn12_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C4D0Ev,_ZThn12_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C5__8S20686C4__8S20686C2[] = {
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  ABISELECT(-24,-12),
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20686C4D1Ev,_ZThn16_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20686C4D0Ev,_ZThn16_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C4__8S20686C2[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20686C4D1Ev,_ZThn24_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20686C4D0Ev,_ZThn24_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C4__8S20686C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20686C4D1Ev,_ZThn80_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20686C4D0Ev,_ZThn80_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C4__8S20686C2[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C4D1Ev,_ZThn120_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C4D0Ev,_ZThn120_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C4__8S20686C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn224_N8S20686C4D1Ev,_ZThn132_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn224_N8S20686C4D0Ev,_ZThn132_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C4__8S20686C2[] = {
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void _ZN8S20686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void _ZN8S20686C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C5__8S20686C2[] = {
  ABISELECT(200,120),
  ABISELECT(184,108),
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(96,64),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C138S20686C5__A1__8S20686C2[] = {
  ABISELECT(8,4),
  ABISELECT(152,92),
  0,
  ABISELECT(72,52),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20686C13D1Ev,_ZThn4_N9S20686C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20686C13D0Ev,_ZThn4_N9S20686C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C138S20686C5__A1__8S20686C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20686C5D1Ev,_ZThn4_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20686C5D0Ev,_ZThn4_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C5__8S20686C2[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C5D1Ev,_ZThn12_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C5D0Ev,_ZThn12_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C5__8S20686C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20686C5D1Ev,_ZThn68_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20686C5D0Ev,_ZThn68_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C5__8S20686C2[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-104,-68),
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn184_N8S20686C5D1Ev,_ZThn108_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn184_N8S20686C5D0Ev,_ZThn108_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C5__8S20686C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-184,-108),
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn200_N8S20686C5D1Ev,_ZThn120_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn200_N8S20686C5D0Ev,_ZThn120_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C5__8S20686C2[] = {
  ABISELECT(-200,-120),
  ABISELECT(-104,-56),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C2[] = {
  ABISELECT(88,60),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C6__8S20686C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void _ZN8S20686C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
extern void _ZN8S20686C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7__8S20686C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C2[] = {
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void _ZN9S20686C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
extern void _ZN9S20686C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C2[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C12__8S20686C2[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C13__8S20686C2[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C13__8S20686C2[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void _ZN9S20686C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
extern void _ZN9S20686C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C15__8S20686C2[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-16,-8),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C7__9S20686C15__8S20686C2[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-32,-16),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void _ZN9S20686C16D1Ev();
extern void _ZN9S20686C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C2[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C16[0]),
  (VTBL_ENTRY)&_ZN9S20686C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C16D0Ev,
};
static  VTT_ENTRY vtt_S20686C2[] = {
  {&(_ZTV8S20686C2[16]),  16,82},
  {&(_tg__ZTV8S20686C4__8S20686C2[16]),  16,18},
  {&(_tg__ZTV8S20686C68S20686C4__A1__8S20686C2[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C68S20686C4__A1__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C68S20686C4__A1__8S20686C2[5]),  5,7},
  {&(_tg__ZTV8S20686C5__8S20686C4__8S20686C2[15]),  15,17},
  {&(_tg__ZTV8S20686C6__8S20686C4__8S20686C2[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C4__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C4__8S20686C2[9]),  9,11},
  {&(_tg__ZTV9S20686C12__8S20686C4__8S20686C2[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C4__8S20686C2[8]),  8,10},
  {&(_tg__ZTV9S20686C15__8S20686C4__8S20686C2[9]),  9,11},
  {&(_tg__ZTV9S20686C16__8S20686C4__8S20686C2[4]),  4,6},
  {&(_ZTV8S20686C2[33]),  33,82},
  {&(_ZTV8S20686C2[44]),  44,82},
  {&(_ZTV8S20686C2[53]),  53,82},
  {&(_ZTV8S20686C2[44]),  44,82},
  {&(_ZTV8S20686C2[63]),  63,82},
  {&(_ZTV8S20686C2[63]),  63,82},
  {&(_ZTV8S20686C2[74]),  74,82},
  {&(_ZTV8S20686C2[80]),  80,82},
  {&(_tg__ZTV8S20686C5__8S20686C2[15]),  15,17},
  {&(_tg__ZTV9S20686C138S20686C5__A1__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C138S20686C5__A1__8S20686C2[5]),  5,7},
  {&(_tg__ZTV8S20686C6__8S20686C5__8S20686C2[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C5__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C5__8S20686C2[9]),  9,11},
  {&(_tg__ZTV9S20686C12__8S20686C5__8S20686C2[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C5__8S20686C2[8]),  8,10},
  {&(_tg__ZTV9S20686C15__8S20686C5__8S20686C2[9]),  9,11},
  {&(_tg__ZTV9S20686C16__8S20686C5__8S20686C2[4]),  4,6},
  {&(_tg__ZTV8S20686C6__8S20686C2[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C6__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C2[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7__8S20686C2[5]),  5,7},
  {&(_tg__ZTV8S20686C9__8S20686C2[4]),  4,6},
  {&(_tg__ZTV9S20686C12__8S20686C2[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C2[8]),  8,10},
  {&(_tg__ZTV8S20686C9__9S20686C12__8S20686C2[5]),  5,7},
  {&(_tg__ZTV9S20686C13__8S20686C2[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C13__8S20686C2[5]),  5,7},
  {&(_tg__ZTV9S20686C15__8S20686C2[9]),  9,11},
  {&(_tg__ZTV8S20686C9__9S20686C15__8S20686C2[5]),  5,7},
  {&(_tg__ZTV8S20686C7__9S20686C15__8S20686C2[7]),  7,9},
  {&(_tg__ZTV9S20686C16__8S20686C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20686C2[];
extern  VTBL_ENTRY _ZTV8S20686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C2[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20686C5D0Ev,_ZThn120_N8S20686C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20686C5D1Ev,_ZThn120_N8S20686C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20686C13D0Ev,_ZThn4_N9S20686C13D0Ev),
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20686C13D1Ev,_ZThn4_N9S20686C13D1Ev),
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20686C5D0Ev,_ZThn108_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20686C5D0Ev,_ZThn68_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C5D0Ev,_ZThn12_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C5D0Ev,_ZThn4_N8S20686C5D0Ev),
  (VTBL_ENTRY)_ZN8S20686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20686C5D1Ev,_ZThn108_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20686C5D1Ev,_ZThn68_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C5D1Ev,_ZThn12_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C5D1Ev,_ZThn4_N8S20686C5D1Ev),
  (VTBL_ENTRY)_ZN8S20686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C4D0Ev,_ZThn132_N8S20686C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C4D1Ev,_ZThn132_N8S20686C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C6D0Ev,_ZThn16_N8S20686C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C6D0Ev,_ZThn24_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C6D1Ev,_ZThn16_N8S20686C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C6D1Ev,_ZThn24_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C4D0Ev,_ZThn120_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C4D0Ev,_ZThn80_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C4D0Ev,_ZThn24_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C4D0Ev,_ZThn16_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C4D0Ev,_ZThn12_N8S20686C4D0Ev),
  (VTBL_ENTRY)_ZN8S20686C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C4D1Ev,_ZThn120_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C4D1Ev,_ZThn80_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C4D1Ev,_ZThn24_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C4D1Ev,_ZThn16_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C4D1Ev,_ZThn12_N8S20686C4D1Ev),
  (VTBL_ENTRY)_ZN8S20686C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C2D0Ev,_ZTv0_n16_N8S20686C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C2D0Ev,_ZThn132_N8S20686C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C2D1Ev,_ZTv0_n16_N8S20686C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C2D1Ev,_ZThn132_N8S20686C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C2D0Ev,_ZThn120_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C2D0Ev,_ZThn80_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C2D0Ev,_ZThn24_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C2D0Ev,_ZThn16_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C2D0Ev,_ZThn12_N8S20686C2D0Ev),
  (VTBL_ENTRY)_ZN8S20686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C2D1Ev,_ZThn120_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C2D1Ev,_ZThn80_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C2D1Ev,_ZThn24_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C2D1Ev,_ZThn16_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C2D1Ev,_ZThn12_N8S20686C2D1Ev),
  (VTBL_ENTRY)_ZN8S20686C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C2 = {  "S20686C2", // class name
  bases_S20686C2, 32,
  &(vtc_S20686C2[0]), // expected_vtbl_contents
  &(vtt_S20686C2[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI8S20686C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20686C2),82, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C2),46, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20686C1  : virtual S20686C2 {
  ~S20686C1(); // tgen
  S20686C1(); // tgen
};
//SIG(1 S20686C1) C1{ VBC2{ VBC3{ m Fp} BC4{ VBC5{ VBC6{ VBC7{ VBC8{ BC3 Fp[2]} VBC3 VBC9{ VBC3 VBC8 vd} VBC10{ m} vd Fi[9]} BC10 VBC11{ m} Fp} VBC12{ VBC13{ VBC3 BC10 VBC14{ BC3 BC8} VBC9} FC9} VBC15{ BC10 VBC8 VBC9 VBC14 VBC7 vd FL} VBC16{ BC14 BC8 VBC10 vd} BC13 vd} BC11 BC6}}}


S20686C1 ::~S20686C1(){ note_dtor("S20686C1", this);} // tgen
S20686C1 ::S20686C1(){ note_ctor("S20686C1", this);} // tgen

static void Test_S20686C1()
{
  extern Class_Descriptor cd_S20686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,42)];
    init_test(&cd_S20686C1, buf);
    S20686C1 *dp, &lv = *(dp=new (buf) S20686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,164), "sizeof(S20686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20686C1)");
    /*is_ambiguous_... S20686C2::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C2*), ABISELECT(24,12), "S20686C1");
    /*is_ambiguous_... S20686C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C7*), ABISELECT(24,12), "S20686C1");
    /*is_ambiguous_... S20686C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C9*), ABISELECT(24,12), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*), ABISELECT(24,12), "S20686C1");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C13*)(S20686C5*), ABISELECT(24,12), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*), ABISELECT(96,64), "S20686C1");
    check_base_class_offset(lv, (S20686C8*)(S20686C7*), ABISELECT(96,64), "S20686C1");
    check_base_class_offset(lv, (S20686C8*)(S20686C9*), ABISELECT(96,64), "S20686C1");
    /*is_ambiguous_... S20686C15::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C15*), ABISELECT(96,64), "S20686C1");
    check_base_class_offset(lv, (S20686C9*)(S20686C7*), ABISELECT(32,16), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*), ABISELECT(32,16), "S20686C1");
    check_base_class_offset(lv, (S20686C9*)(S20686C15*), ABISELECT(32,16), "S20686C1");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C9*)(S20686C13*)(S20686C5*), ABISELECT(32,16), "S20686C1");
    check_base_class_offset(lv, (S2265C38*)(S20686C7*), ABISELECT(120,76), "S20686C1");
    check_base_class_offset(lv, (S2265C38*)(S20686C16*), ABISELECT(120,76), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C7*)(S20686C6*), ABISELECT(48,24), "S20686C1");
    check_base_class_offset(lv, (S20686C7*)(S20686C15*), ABISELECT(48,24), "S20686C1");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C7*)(S20686C6*)(S20686C4*)(S20686C2*), ABISELECT(48,24), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*), ABISELECT(32,16), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C6*), 0, "S20686C1");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C6*)(S20686C4*)(S20686C2*), 0, "S20686C1");
    check_base_class_offset(lv, (S20686C6*)(S20686C5*), ABISELECT(32,16), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*), ABISELECT(128,80), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*), ABISELECT(176,104), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C14 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*), ABISELECT(184,108), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C14 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C14*), ABISELECT(184,108), "S20686C1");
    /*is_ambiguous_... S20686C1::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*), ABISELECT(176,104), "S20686C1");
    check_base_class_offset(lv, (S20686C14*)(S20686C15*), ABISELECT(176,104), "S20686C1");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C14*)(S20686C13*)(S20686C5*), ABISELECT(176,104), "S20686C1");
    check_base_class_offset(lv, (S20686C13*)(S20686C12*), ABISELECT(128,80), "S20686C1");
    check_base_class_offset(lv, (S20686C12*)(S20686C5*), ABISELECT(128,80), "S20686C1");
    /*is_ambiguous_... S20686C15::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C15*), ABISELECT(208,120), "S20686C1");
    check_base_class_offset(lv, (S20686C15*)(S20686C5*), ABISELECT(208,120), "S20686C1");
    /*is_ambiguous_... S20686C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C14*)(S20686C16*), ABISELECT(232,136), "S20686C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(240,140), "S20686C1");
    check_base_class_offset(lv, (S20686C8*)(S20686C14*)(S20686C16*), ABISELECT(240,140), "S20686C1");
    check_base_class_offset(lv, (S20686C14*)(S20686C16*), ABISELECT(232,136), "S20686C1");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S20686C8*)(S20686C16*), ABISELECT(264,152), "S20686C1");
    /*is_ambiguous_... S20686C16::S20686C8 */ AMB_check_base_class_offset(lv, (S20686C8*)(S20686C16*), ABISELECT(264,152), "S20686C1");
    check_base_class_offset(lv, (S20686C16*)(S20686C5*), ABISELECT(224,132), "S20686C1");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C13*)(S20686C5*), 0, "S20686C1");
    /*is_ambiguous_... S20686C5::S20686C13 */ AMB_check_base_class_offset(lv, (S20686C13*)(S20686C5*), 0, "S20686C1");
    check_base_class_offset(lv, (S20686C5*)(S20686C4*)(S20686C2*), 0, "S20686C1");
    /*is_ambiguous_... S20686C4::S2265C28 */ AMB_check_base_class_offset(lv, (S2265C28*)(S20686C4*)(S20686C2*), ABISELECT(8,4), "S20686C1");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S2265C38*)(S20686C6*)(S20686C4*)(S20686C2*), ABISELECT(8,4), "S20686C1");
    /*is_ambiguous_... S20686C4::S20686C6 */ AMB_check_base_class_offset(lv, (S20686C6*)(S20686C4*)(S20686C2*), ABISELECT(8,4), "S20686C1");
    check_base_class_offset(lv, (S20686C4*)(S20686C2*), ABISELECT(8,4), "S20686C1");
    check_base_class_offset(lv, (S20686C2*), ABISELECT(8,4), "S20686C1");
    test_class_info(&lv, &cd_S20686C1);
    dp->~S20686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20686C1(Test_S20686C1, "S20686C1", ABISELECT(288,164));

#else // __cplusplus

extern void _ZN8S20686C1C1Ev();
extern void _ZN8S20686C1D1Ev();
Name_Map name_map_S20686C1[] = {
  NSPAIR(_ZN8S20686C1C1Ev),
  NSPAIR(_ZN8S20686C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C9;
extern VTBL_ENTRY _ZTI8S20686C9[];
extern  VTBL_ENTRY _ZTV8S20686C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C7;
extern VTBL_ENTRY _ZTI8S20686C7[];
extern  VTBL_ENTRY _ZTV8S20686C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C12;
extern VTBL_ENTRY _ZTI9S20686C12[];
extern  VTBL_ENTRY _ZTV9S20686C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C15;
extern VTBL_ENTRY _ZTI9S20686C15[];
extern  VTBL_ENTRY _ZTV9S20686C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C15[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C14;
extern VTBL_ENTRY _ZTI9S20686C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S20686C8;
extern VTBL_ENTRY _ZTI8S20686C8[];
extern Class_Descriptor cd_S20686C16;
extern VTBL_ENTRY _ZTI9S20686C16[];
extern  VTBL_ENTRY _ZTV9S20686C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C16[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C13;
extern VTBL_ENTRY _ZTI9S20686C13[];
extern  VTBL_ENTRY _ZTV9S20686C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20686C13[];
extern Class_Descriptor cd_S20686C5;
extern VTBL_ENTRY _ZTI8S20686C5[];
extern  VTBL_ENTRY _ZTV8S20686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C5[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20686C6;
extern VTBL_ENTRY _ZTI8S20686C6[];
extern  VTBL_ENTRY _ZTV8S20686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C6[];
extern Class_Descriptor cd_S20686C4;
extern VTBL_ENTRY _ZTI8S20686C4[];
extern  VTBL_ENTRY _ZTV8S20686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C4[];
extern Class_Descriptor cd_S20686C2;
extern VTBL_ENTRY _ZTI8S20686C2[];
extern  VTBL_ENTRY _ZTV8S20686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C2[];
static Base_Class bases_S20686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20686C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20686C7,    ABISELECT(48,24), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20686C6,    ABISELECT(32,16), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20686C13,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20686C12,    ABISELECT(128,80), //bcp->offset
    57, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20686C15,    ABISELECT(208,120), //bcp->offset
    67, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(240,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20686C14,    ABISELECT(232,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20686C8,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20686C16,    ABISELECT(224,132), //bcp->offset
    78, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20686C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20686C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20686C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20686C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20686C2,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20686C1[];
extern void ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev)();
extern void _ZN8S20686C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev)();
extern void _ZN8S20686C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20686C1D1Ev,_ZThn4_N8S20686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20686C1D0Ev,_ZThn4_N8S20686C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20686C1D1Ev,_ZThn16_N8S20686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20686C1D0Ev,_ZThn16_N8S20686C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S20686C1D1Ev,_ZThn24_N8S20686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S20686C1D0Ev,_ZThn24_N8S20686C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20686C1D1Ev,_ZThn80_N8S20686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20686C1D0Ev,_ZThn80_N8S20686C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C1D1Ev,_ZThn120_N8S20686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C1D0Ev,_ZThn120_N8S20686C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C1D1Ev,_ZTv0_n16_N8S20686C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20686C1D1Ev,_ZThn132_N8S20686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C1D0Ev,_ZTv0_n16_N8S20686C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20686C1D0Ev,_ZThn132_N8S20686C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20686C1[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  0,
  ABISELECT(96,64),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev),
  ABISELECT(216,128),
  ABISELECT(200,116),
  ABISELECT(168,100),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  ABISELECT(88,60),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev),
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C1D1Ev,_ZTv0_n16_N8S20686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C1D0Ev,_ZTv0_n16_N8S20686C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20686C1[];
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void _ZN8S20686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void _ZN8S20686C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C2__8S20686C1[] = {
  ABISELECT(216,128),
  ABISELECT(200,116),
  ABISELECT(168,100),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void _ZN8S20686C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void _ZN8S20686C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C48S20686C2__8S20686C1[] = {
  ABISELECT(216,128),
  ABISELECT(200,116),
  ABISELECT(168,100),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C68S20686C48S20686C2__A1__8S20686C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  ABISELECT(24,12),
  ABISELECT(40,20),
  0,
  ABISELECT(88,60),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S20686C6D1Ev,_ZThn20_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S20686C6D0Ev,_ZThn20_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C68S20686C48S20686C2__A1__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C6D1Ev,_ZThn12_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C6D0Ev,_ZThn12_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C68S20686C48S20686C2__A1__8S20686C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C5__8S20686C48S20686C2__8S20686C1[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  ABISELECT(8,4),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C4D1Ev,_ZThn12_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C4D0Ev,_ZThn12_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C48S20686C2__8S20686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S20686C4D1Ev,_ZThn20_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S20686C4D0Ev,_ZThn20_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C48S20686C2__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn120_N8S20686C4D1Ev,_ZThn76_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn120_N8S20686C4D0Ev,_ZThn76_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C48S20686C2__8S20686C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-120,-76),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn200_N8S20686C4D1Ev,_ZThn116_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn200_N8S20686C4D0Ev,_ZThn116_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C48S20686C2__8S20686C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-200,-116),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev)();
extern void ABISELECT(_ZThn216_N8S20686C4D1Ev,_ZThn128_N8S20686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev)();
extern void ABISELECT(_ZThn216_N8S20686C4D0Ev,_ZThn128_N8S20686C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C48S20686C2__8S20686C1[] = {
  ABISELECT(-216,-128),
  ABISELECT(-104,-56),
  ABISELECT(-216,-128),
  (VTBL_ENTRY)&(_ZTI8S20686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C5__8S20686C2__8S20686C1[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  ABISELECT(8,4),
  ABISELECT(96,64),
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20686C2D1Ev,_ZThn12_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20686C2D0Ev,_ZThn12_N8S20686C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C2__8S20686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S20686C2D1Ev,_ZThn20_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S20686C2D0Ev,_ZThn20_N8S20686C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C2__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S20686C2D1Ev,_ZThn76_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S20686C2D0Ev,_ZThn76_N8S20686C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C2__8S20686C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-120,-76),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn200_N8S20686C2D1Ev,_ZThn116_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn200_N8S20686C2D0Ev,_ZThn116_N8S20686C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C2__8S20686C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-200,-116),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20686C2D1Ev,_ZTv0_n16_N8S20686C2D1Ev)();
extern void ABISELECT(_ZThn216_N8S20686C2D1Ev,_ZThn128_N8S20686C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C2D0Ev,_ZTv0_n16_N8S20686C2D0Ev)();
extern void ABISELECT(_ZThn216_N8S20686C2D0Ev,_ZThn128_N8S20686C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C2__8S20686C1[] = {
  ABISELECT(-216,-128),
  ABISELECT(-104,-56),
  ABISELECT(-216,-128),
  (VTBL_ENTRY)&(_ZTI8S20686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C2D1Ev,_ZTv0_n16_N8S20686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C2D0Ev,_ZTv0_n16_N8S20686C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void _ZN8S20686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void _ZN8S20686C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C5__8S20686C1[] = {
  ABISELECT(224,132),
  ABISELECT(208,120),
  ABISELECT(128,80),
  ABISELECT(128,80),
  0,
  ABISELECT(120,76),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(176,104),
  0,
  ABISELECT(96,64),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C138S20686C5__A1__8S20686C1[] = {
  ABISELECT(32,16),
  ABISELECT(176,104),
  0,
  ABISELECT(96,64),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S20686C13D1Ev,_ZThn16_N9S20686C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S20686C13D0Ev,_ZThn16_N9S20686C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C138S20686C5__A1__8S20686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S20686C5D1Ev,_ZThn16_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S20686C5D0Ev,_ZThn16_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C5__8S20686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S20686C5D1Ev,_ZThn24_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S20686C5D0Ev,_ZThn24_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C5__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn128_N8S20686C5D1Ev,_ZThn80_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn128_N8S20686C5D0Ev,_ZThn80_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C5__8S20686C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  ABISELECT(-128,-80),
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn208_N8S20686C5D1Ev,_ZThn120_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn208_N8S20686C5D0Ev,_ZThn120_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C5__8S20686C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  ABISELECT(-208,-120),
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev)();
extern void ABISELECT(_ZThn224_N8S20686C5D1Ev,_ZThn132_N8S20686C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev)();
extern void ABISELECT(_ZThn224_N8S20686C5D0Ev,_ZThn132_N8S20686C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C5__8S20686C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-104,-56),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void _ZN8S20686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void _ZN8S20686C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C6__8S20686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(88,60),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C6__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void _ZN8S20686C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
extern void _ZN8S20686C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20686C7__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C7__8S20686C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20686C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev),
};
extern void _ZN8S20686C9D1Ev();
extern void _ZN8S20686C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20686C9__8S20686C1[] = {
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20686C9[0]),
  (VTBL_ENTRY)&_ZN8S20686C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20686C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void _ZN9S20686C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
extern void _ZN9S20686C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C12__8S20686C1[] = {
  0,
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C12__8S20686C1[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20686C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void _ZN9S20686C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
extern void _ZN9S20686C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C13__8S20686C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(48,24),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C13__8S20686C1[] = {
  ABISELECT(96,64),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S20686C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void _ZN9S20686C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
extern void _ZN9S20686C15D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20686C15__8S20686C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-160,-96),
  ABISELECT(-32,-16),
  ABISELECT(-176,-104),
  0,
  ABISELECT(-112,-56),
  ABISELECT(-184,-108),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C9__9S20686C15__8S20686C1[] = {
  ABISELECT(176,104),
  ABISELECT(64,48),
  ABISELECT(-8,-4),
  ABISELECT(176,104),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20686C7__9S20686C15__8S20686C1[] = {
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(160,96),
  ABISELECT(48,40),
  ABISELECT(-24,-12),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S20686C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev),
};
extern void _ZN9S20686C16D1Ev();
extern void _ZN9S20686C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20686C16__8S20686C1[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20686C16[0]),
  (VTBL_ENTRY)&_ZN9S20686C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20686C16D0Ev,
};
static  VTT_ENTRY vtt_S20686C1[] = {
  {&(_ZTV8S20686C1[17]),  17,84},
  {&(_ZTV8S20686C1[35]),  35,84},
  {&(_ZTV8S20686C1[17]),  17,84},
  {&(_ZTV8S20686C1[46]),  46,84},
  {&(_ZTV8S20686C1[55]),  55,84},
  {&(_ZTV8S20686C1[46]),  46,84},
  {&(_ZTV8S20686C1[65]),  65,84},
  {&(_ZTV8S20686C1[65]),  65,84},
  {&(_ZTV8S20686C1[76]),  76,84},
  {&(_ZTV8S20686C1[82]),  82,84},
  {&(_tg__ZTV8S20686C2__8S20686C1[16]),  16,18},
  {&(_tg__ZTV8S20686C48S20686C2__8S20686C1[16]),  16,18},
  {&(_tg__ZTV8S20686C68S20686C48S20686C2__A1__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C68S20686C48S20686C2__A1__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C68S20686C48S20686C2__A1__8S20686C1[5]),  5,7},
  {&(_tg__ZTV8S20686C5__8S20686C48S20686C2__8S20686C1[15]),  15,17},
  {&(_tg__ZTV8S20686C6__8S20686C48S20686C2__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C48S20686C2__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C48S20686C2__8S20686C1[9]),  9,11},
  {&(_tg__ZTV9S20686C12__8S20686C48S20686C2__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C48S20686C2__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C15__8S20686C48S20686C2__8S20686C1[9]),  9,11},
  {&(_tg__ZTV9S20686C16__8S20686C48S20686C2__8S20686C1[4]),  4,6},
  {&(_tg__ZTV8S20686C5__8S20686C2__8S20686C1[15]),  15,17},
  {&(_tg__ZTV8S20686C6__8S20686C2__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C2__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C2__8S20686C1[9]),  9,11},
  {&(_tg__ZTV9S20686C12__8S20686C2__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C2__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C15__8S20686C2__8S20686C1[9]),  9,11},
  {&(_tg__ZTV9S20686C16__8S20686C2__8S20686C1[4]),  4,6},
  {&(_tg__ZTV8S20686C5__8S20686C1[15]),  15,17},
  {&(_tg__ZTV9S20686C138S20686C5__A1__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C138S20686C5__A1__8S20686C1[5]),  5,7},
  {&(_tg__ZTV8S20686C6__8S20686C5__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C5__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C5__8S20686C1[9]),  9,11},
  {&(_tg__ZTV9S20686C12__8S20686C5__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C5__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C15__8S20686C5__8S20686C1[9]),  9,11},
  {&(_tg__ZTV9S20686C16__8S20686C5__8S20686C1[4]),  4,6},
  {&(_tg__ZTV8S20686C6__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C6__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C6__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C7__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C9__8S20686C7__8S20686C1[5]),  5,7},
  {&(_tg__ZTV8S20686C9__8S20686C1[4]),  4,6},
  {&(_tg__ZTV9S20686C12__8S20686C1[8]),  8,10},
  {&(_tg__ZTV9S20686C12__8S20686C1[8]),  8,10},
  {&(_tg__ZTV8S20686C9__9S20686C12__8S20686C1[5]),  5,7},
  {&(_tg__ZTV9S20686C13__8S20686C1[7]),  7,9},
  {&(_tg__ZTV8S20686C9__9S20686C13__8S20686C1[5]),  5,7},
  {&(_tg__ZTV9S20686C15__8S20686C1[9]),  9,11},
  {&(_tg__ZTV8S20686C9__9S20686C15__8S20686C1[5]),  5,7},
  {&(_tg__ZTV8S20686C7__9S20686C15__8S20686C1[7]),  7,9},
  {&(_tg__ZTV9S20686C16__8S20686C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20686C1[];
extern  VTBL_ENTRY _ZTV8S20686C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20686C1[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D0Ev,_ZTv0_n20_N9S20686C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C15D1Ev,_ZTv0_n20_N9S20686C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D0Ev,_ZTv0_n20_N9S20686C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C12D1Ev,_ZTv0_n20_N9S20686C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D0Ev,_ZTv0_n20_N8S20686C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C7D1Ev,_ZTv0_n20_N8S20686C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S20686C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D0Ev,_ZTv0_n16_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C5D0Ev,_ZThn132_N8S20686C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C5D1Ev,_ZTv0_n16_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C5D1Ev,_ZThn132_N8S20686C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D0Ev,_ZTv0_n20_N9S20686C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20686C13D0Ev,_ZThn16_N9S20686C13D0Ev),
  (VTBL_ENTRY)_ZN9S20686C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20686C13D1Ev,_ZTv0_n20_N9S20686C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20686C13D1Ev,_ZThn16_N9S20686C13D1Ev),
  (VTBL_ENTRY)_ZN9S20686C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D0Ev,_ZTv0_n20_N8S20686C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C5D0Ev,_ZThn120_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C5D0Ev,_ZThn80_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C5D0Ev,_ZThn24_N8S20686C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C5D0Ev,_ZThn16_N8S20686C5D0Ev),
  (VTBL_ENTRY)_ZN8S20686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C5D1Ev,_ZTv0_n20_N8S20686C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C5D1Ev,_ZThn120_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C5D1Ev,_ZThn80_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C5D1Ev,_ZThn24_N8S20686C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C5D1Ev,_ZThn16_N8S20686C5D1Ev),
  (VTBL_ENTRY)_ZN8S20686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C2D0Ev,_ZTv0_n16_N8S20686C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20686C2D0Ev,_ZThn128_N8S20686C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C2D1Ev,_ZTv0_n16_N8S20686C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20686C2D1Ev,_ZThn128_N8S20686C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C4D0Ev,_ZTv0_n16_N8S20686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20686C4D0Ev,_ZThn128_N8S20686C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C4D1Ev,_ZTv0_n16_N8S20686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20686C4D1Ev,_ZThn128_N8S20686C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D0Ev,_ZTv0_n20_N8S20686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D0Ev,_ZThn8_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C6D0Ev,_ZThn12_N8S20686C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C6D0Ev,_ZThn20_N8S20686C6D0Ev),
  (VTBL_ENTRY)_ZN8S20686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C6D1Ev,_ZTv0_n20_N8S20686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20686C6D1Ev,_ZThn8_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C6D1Ev,_ZThn12_N8S20686C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C6D1Ev,_ZThn20_N8S20686C6D1Ev),
  (VTBL_ENTRY)_ZN8S20686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C4D0Ev,_ZTv0_n20_N8S20686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20686C4D0Ev,_ZThn116_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20686C4D0Ev,_ZThn76_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C4D0Ev,_ZThn20_N8S20686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C4D0Ev,_ZThn12_N8S20686C4D0Ev),
  (VTBL_ENTRY)_ZN8S20686C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C4D1Ev,_ZTv0_n20_N8S20686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20686C4D1Ev,_ZThn116_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20686C4D1Ev,_ZThn76_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C4D1Ev,_ZThn20_N8S20686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C4D1Ev,_ZThn12_N8S20686C4D1Ev),
  (VTBL_ENTRY)_ZN8S20686C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C2D0Ev,_ZTv0_n20_N8S20686C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20686C2D0Ev,_ZThn116_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20686C2D0Ev,_ZThn76_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C2D0Ev,_ZThn20_N8S20686C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C2D0Ev,_ZThn12_N8S20686C2D0Ev),
  (VTBL_ENTRY)_ZN8S20686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C2D1Ev,_ZTv0_n20_N8S20686C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20686C2D1Ev,_ZThn116_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20686C2D1Ev,_ZThn76_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20686C2D1Ev,_ZThn20_N8S20686C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20686C2D1Ev,_ZThn12_N8S20686C2D1Ev),
  (VTBL_ENTRY)_ZN8S20686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C1D0Ev,_ZTv0_n16_N8S20686C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C1D0Ev,_ZThn132_N8S20686C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20686C1D1Ev,_ZTv0_n16_N8S20686C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20686C1D1Ev,_ZThn132_N8S20686C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C1D0Ev,_ZTv0_n20_N8S20686C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C1D0Ev,_ZThn120_N8S20686C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C1D0Ev,_ZThn80_N8S20686C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C1D0Ev,_ZThn24_N8S20686C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C1D0Ev,_ZThn16_N8S20686C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C1D0Ev,_ZThn4_N8S20686C1D0Ev),
  (VTBL_ENTRY)_ZN8S20686C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20686C1D1Ev,_ZTv0_n20_N8S20686C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20686C1D1Ev,_ZThn120_N8S20686C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20686C1D1Ev,_ZThn80_N8S20686C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20686C1D1Ev,_ZThn24_N8S20686C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20686C1D1Ev,_ZThn16_N8S20686C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20686C1D1Ev,_ZThn4_N8S20686C1D1Ev),
  (VTBL_ENTRY)_ZN8S20686C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20686C1 = {  "S20686C1", // class name
  bases_S20686C1, 33,
  &(vtc_S20686C1[0]), // expected_vtbl_contents
  &(vtt_S20686C1[0]), // expected_vtt_contents
  ABISELECT(288,164), // object size
  NSPAIRA(_ZTI8S20686C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20686C1),84, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20686C1),56, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1801C3  : S1778C4_nt {
  virtual void  v4(); // _ZN7S1801C32v4Ev
  virtual void  v5(); // _ZN7S1801C32v5Ev
  virtual void  v6(); // _ZN7S1801C32v6Ev
  virtual void  v7(); // _ZN7S1801C32v7Ev
  virtual void  v8(); // _ZN7S1801C32v8Ev
  virtual void  v9(); // _ZN7S1801C32v9Ev
  virtual void  v10(); // _ZN7S1801C33v10Ev
  virtual void  v11(); // _ZN7S1801C33v11Ev
  virtual void  v12(); // _ZN7S1801C33v12Ev
  virtual void  v13(); // _ZN7S1801C33v13Ev
  virtual void  v14(); // _ZN7S1801C33v14Ev
  virtual void  v15(); // _ZN7S1801C33v15Ev
  virtual void  v16(); // _ZN7S1801C33v16Ev
  virtual void  v17(); // _ZN7S1801C33v17Ev
  virtual void  v18(); // _ZN7S1801C33v18Ev
  virtual void  v19(); // _ZN7S1801C33v19Ev
  virtual void  v20(); // _ZN7S1801C33v20Ev
  virtual void  v21(); // _ZN7S1801C33v21Ev
  virtual void  v22(); // _ZN7S1801C33v22Ev
  virtual void  v23(); // _ZN7S1801C33v23Ev
  virtual void  v24(); // _ZN7S1801C33v24Ev
  virtual void  v25(); // _ZN7S1801C33v25Ev
  virtual void  v26(); // _ZN7S1801C33v26Ev
  virtual void  v27(); // _ZN7S1801C33v27Ev
  virtual void  v28(); // _ZN7S1801C33v28Ev
  virtual void  v29(); // _ZN7S1801C33v29Ev
  virtual void  v30(); // _ZN7S1801C33v30Ev
  virtual void  v31(); // _ZN7S1801C33v31Ev
  virtual void  v32(); // _ZN7S1801C33v32Ev
  virtual void  v33(); // _ZN7S1801C33v33Ev
  virtual void  v34(); // _ZN7S1801C33v34Ev
  virtual void  v35(); // _ZN7S1801C33v35Ev
  virtual void  v36(); // _ZN7S1801C33v36Ev
  virtual void  v37(); // _ZN7S1801C33v37Ev
  virtual void  v38(); // _ZN7S1801C33v38Ev
  virtual void  v39(); // _ZN7S1801C33v39Ev
  virtual void  v40(); // _ZN7S1801C33v40Ev
  virtual void  v41(); // _ZN7S1801C33v41Ev
  virtual void  v42(); // _ZN7S1801C33v42Ev
  virtual void  v43(); // _ZN7S1801C33v43Ev
  virtual void  v44(); // _ZN7S1801C33v44Ev
  virtual void  v45(); // _ZN7S1801C33v45Ev
  virtual void  v46(); // _ZN7S1801C33v46Ev
  virtual void  v47(); // _ZN7S1801C33v47Ev
  virtual void  v48(); // _ZN7S1801C33v48Ev
  virtual void  v49(); // _ZN7S1801C33v49Ev
  virtual void  v50(); // _ZN7S1801C33v50Ev
  virtual void  v51(); // _ZN7S1801C33v51Ev
  virtual void  v52(); // _ZN7S1801C33v52Ev
  virtual void  v53(); // _ZN7S1801C33v53Ev
  ~S1801C3(); // tgen
  S1801C3(); // tgen
};
//SIG(-1 S1801C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1801C3 ::v4(){vfunc_called(this, "_ZN7S1801C32v4Ev");}
void  S1801C3 ::v5(){vfunc_called(this, "_ZN7S1801C32v5Ev");}
void  S1801C3 ::v6(){vfunc_called(this, "_ZN7S1801C32v6Ev");}
void  S1801C3 ::v7(){vfunc_called(this, "_ZN7S1801C32v7Ev");}
void  S1801C3 ::v8(){vfunc_called(this, "_ZN7S1801C32v8Ev");}
void  S1801C3 ::v9(){vfunc_called(this, "_ZN7S1801C32v9Ev");}
void  S1801C3 ::v10(){vfunc_called(this, "_ZN7S1801C33v10Ev");}
void  S1801C3 ::v11(){vfunc_called(this, "_ZN7S1801C33v11Ev");}
void  S1801C3 ::v12(){vfunc_called(this, "_ZN7S1801C33v12Ev");}
void  S1801C3 ::v13(){vfunc_called(this, "_ZN7S1801C33v13Ev");}
void  S1801C3 ::v14(){vfunc_called(this, "_ZN7S1801C33v14Ev");}
void  S1801C3 ::v15(){vfunc_called(this, "_ZN7S1801C33v15Ev");}
void  S1801C3 ::v16(){vfunc_called(this, "_ZN7S1801C33v16Ev");}
void  S1801C3 ::v17(){vfunc_called(this, "_ZN7S1801C33v17Ev");}
void  S1801C3 ::v18(){vfunc_called(this, "_ZN7S1801C33v18Ev");}
void  S1801C3 ::v19(){vfunc_called(this, "_ZN7S1801C33v19Ev");}
void  S1801C3 ::v20(){vfunc_called(this, "_ZN7S1801C33v20Ev");}
void  S1801C3 ::v21(){vfunc_called(this, "_ZN7S1801C33v21Ev");}
void  S1801C3 ::v22(){vfunc_called(this, "_ZN7S1801C33v22Ev");}
void  S1801C3 ::v23(){vfunc_called(this, "_ZN7S1801C33v23Ev");}
void  S1801C3 ::v24(){vfunc_called(this, "_ZN7S1801C33v24Ev");}
void  S1801C3 ::v25(){vfunc_called(this, "_ZN7S1801C33v25Ev");}
void  S1801C3 ::v26(){vfunc_called(this, "_ZN7S1801C33v26Ev");}
void  S1801C3 ::v27(){vfunc_called(this, "_ZN7S1801C33v27Ev");}
void  S1801C3 ::v28(){vfunc_called(this, "_ZN7S1801C33v28Ev");}
void  S1801C3 ::v29(){vfunc_called(this, "_ZN7S1801C33v29Ev");}
void  S1801C3 ::v30(){vfunc_called(this, "_ZN7S1801C33v30Ev");}
void  S1801C3 ::v31(){vfunc_called(this, "_ZN7S1801C33v31Ev");}
void  S1801C3 ::v32(){vfunc_called(this, "_ZN7S1801C33v32Ev");}
void  S1801C3 ::v33(){vfunc_called(this, "_ZN7S1801C33v33Ev");}
void  S1801C3 ::v34(){vfunc_called(this, "_ZN7S1801C33v34Ev");}
void  S1801C3 ::v35(){vfunc_called(this, "_ZN7S1801C33v35Ev");}
void  S1801C3 ::v36(){vfunc_called(this, "_ZN7S1801C33v36Ev");}
void  S1801C3 ::v37(){vfunc_called(this, "_ZN7S1801C33v37Ev");}
void  S1801C3 ::v38(){vfunc_called(this, "_ZN7S1801C33v38Ev");}
void  S1801C3 ::v39(){vfunc_called(this, "_ZN7S1801C33v39Ev");}
void  S1801C3 ::v40(){vfunc_called(this, "_ZN7S1801C33v40Ev");}
void  S1801C3 ::v41(){vfunc_called(this, "_ZN7S1801C33v41Ev");}
void  S1801C3 ::v42(){vfunc_called(this, "_ZN7S1801C33v42Ev");}
void  S1801C3 ::v43(){vfunc_called(this, "_ZN7S1801C33v43Ev");}
void  S1801C3 ::v44(){vfunc_called(this, "_ZN7S1801C33v44Ev");}
void  S1801C3 ::v45(){vfunc_called(this, "_ZN7S1801C33v45Ev");}
void  S1801C3 ::v46(){vfunc_called(this, "_ZN7S1801C33v46Ev");}
void  S1801C3 ::v47(){vfunc_called(this, "_ZN7S1801C33v47Ev");}
void  S1801C3 ::v48(){vfunc_called(this, "_ZN7S1801C33v48Ev");}
void  S1801C3 ::v49(){vfunc_called(this, "_ZN7S1801C33v49Ev");}
void  S1801C3 ::v50(){vfunc_called(this, "_ZN7S1801C33v50Ev");}
void  S1801C3 ::v51(){vfunc_called(this, "_ZN7S1801C33v51Ev");}
void  S1801C3 ::v52(){vfunc_called(this, "_ZN7S1801C33v52Ev");}
void  S1801C3 ::v53(){vfunc_called(this, "_ZN7S1801C33v53Ev");}
S1801C3 ::~S1801C3(){ note_dtor("S1801C3", this);} // tgen
S1801C3 ::S1801C3(){ note_ctor("S1801C3", this);} // tgen

static void Test_S1801C3()
{
  extern Class_Descriptor cd_S1801C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1801C3, buf);
    S1801C3 *dp, &lv = *(dp=new (buf) S1801C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1801C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1801C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1801C3");
    test_class_info(&lv, &cd_S1801C3);
    dp->~S1801C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1801C3(Test_S1801C3, "S1801C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1801C3C1Ev();
extern void _ZN7S1801C3D1Ev();
Name_Map name_map_S1801C3[] = {
  NSPAIR(_ZN7S1801C3C1Ev),
  NSPAIR(_ZN7S1801C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1801C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1801C3[];
extern void _ZN7S1801C3D1Ev();
extern void _ZN7S1801C3D0Ev();
extern void _ZN7S1801C32v4Ev();
extern void _ZN7S1801C32v5Ev();
extern void _ZN7S1801C32v6Ev();
extern void _ZN7S1801C32v7Ev();
extern void _ZN7S1801C32v8Ev();
extern void _ZN7S1801C32v9Ev();
extern void _ZN7S1801C33v10Ev();
extern void _ZN7S1801C33v11Ev();
extern void _ZN7S1801C33v12Ev();
extern void _ZN7S1801C33v13Ev();
extern void _ZN7S1801C33v14Ev();
extern void _ZN7S1801C33v15Ev();
extern void _ZN7S1801C33v16Ev();
extern void _ZN7S1801C33v17Ev();
extern void _ZN7S1801C33v18Ev();
extern void _ZN7S1801C33v19Ev();
extern void _ZN7S1801C33v20Ev();
extern void _ZN7S1801C33v21Ev();
extern void _ZN7S1801C33v22Ev();
extern void _ZN7S1801C33v23Ev();
extern void _ZN7S1801C33v24Ev();
extern void _ZN7S1801C33v25Ev();
extern void _ZN7S1801C33v26Ev();
extern void _ZN7S1801C33v27Ev();
extern void _ZN7S1801C33v28Ev();
extern void _ZN7S1801C33v29Ev();
extern void _ZN7S1801C33v30Ev();
extern void _ZN7S1801C33v31Ev();
extern void _ZN7S1801C33v32Ev();
extern void _ZN7S1801C33v33Ev();
extern void _ZN7S1801C33v34Ev();
extern void _ZN7S1801C33v35Ev();
extern void _ZN7S1801C33v36Ev();
extern void _ZN7S1801C33v37Ev();
extern void _ZN7S1801C33v38Ev();
extern void _ZN7S1801C33v39Ev();
extern void _ZN7S1801C33v40Ev();
extern void _ZN7S1801C33v41Ev();
extern void _ZN7S1801C33v42Ev();
extern void _ZN7S1801C33v43Ev();
extern void _ZN7S1801C33v44Ev();
extern void _ZN7S1801C33v45Ev();
extern void _ZN7S1801C33v46Ev();
extern void _ZN7S1801C33v47Ev();
extern void _ZN7S1801C33v48Ev();
extern void _ZN7S1801C33v49Ev();
extern void _ZN7S1801C33v50Ev();
extern void _ZN7S1801C33v51Ev();
extern void _ZN7S1801C33v52Ev();
extern void _ZN7S1801C33v53Ev();
static  VTBL_ENTRY vtc_S1801C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1801C3[0]),
  (VTBL_ENTRY)&_ZN7S1801C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1801C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v53Ev,
};
extern VTBL_ENTRY _ZTI7S1801C3[];
extern  VTBL_ENTRY _ZTV7S1801C3[];
Class_Descriptor cd_S1801C3 = {  "S1801C3", // class name
  bases_S1801C3, 1,
  &(vtc_S1801C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1801C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1801C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1801C2  : S1801C3 {
  virtual void  v54(); // _ZN7S1801C23v54Ev
  ~S1801C2(); // tgen
  S1801C2(); // tgen
};
//SIG(-1 S1801C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1801C2 ::v54(){vfunc_called(this, "_ZN7S1801C23v54Ev");}
S1801C2 ::~S1801C2(){ note_dtor("S1801C2", this);} // tgen
S1801C2 ::S1801C2(){ note_ctor("S1801C2", this);} // tgen

static void Test_S1801C2()
{
  extern Class_Descriptor cd_S1801C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1801C2, buf);
    S1801C2 *dp, &lv = *(dp=new (buf) S1801C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1801C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1801C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1801C3*), 0, "S1801C2");
    check_base_class_offset(lv, (S1801C3*), 0, "S1801C2");
    test_class_info(&lv, &cd_S1801C2);
    dp->~S1801C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1801C2(Test_S1801C2, "S1801C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1801C2C1Ev();
extern void _ZN7S1801C2D1Ev();
Name_Map name_map_S1801C2[] = {
  NSPAIR(_ZN7S1801C2C1Ev),
  NSPAIR(_ZN7S1801C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1801C3;
extern VTBL_ENTRY _ZTI7S1801C3[];
extern  VTBL_ENTRY _ZTV7S1801C3[];
static Base_Class bases_S1801C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1801C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1801C2[];
extern void _ZN7S1801C2D1Ev();
extern void _ZN7S1801C2D0Ev();
extern void _ZN7S1801C32v4Ev();
extern void _ZN7S1801C32v5Ev();
extern void _ZN7S1801C32v6Ev();
extern void _ZN7S1801C32v7Ev();
extern void _ZN7S1801C32v8Ev();
extern void _ZN7S1801C32v9Ev();
extern void _ZN7S1801C33v10Ev();
extern void _ZN7S1801C33v11Ev();
extern void _ZN7S1801C33v12Ev();
extern void _ZN7S1801C33v13Ev();
extern void _ZN7S1801C33v14Ev();
extern void _ZN7S1801C33v15Ev();
extern void _ZN7S1801C33v16Ev();
extern void _ZN7S1801C33v17Ev();
extern void _ZN7S1801C33v18Ev();
extern void _ZN7S1801C33v19Ev();
extern void _ZN7S1801C33v20Ev();
extern void _ZN7S1801C33v21Ev();
extern void _ZN7S1801C33v22Ev();
extern void _ZN7S1801C33v23Ev();
extern void _ZN7S1801C33v24Ev();
extern void _ZN7S1801C33v25Ev();
extern void _ZN7S1801C33v26Ev();
extern void _ZN7S1801C33v27Ev();
extern void _ZN7S1801C33v28Ev();
extern void _ZN7S1801C33v29Ev();
extern void _ZN7S1801C33v30Ev();
extern void _ZN7S1801C33v31Ev();
extern void _ZN7S1801C33v32Ev();
extern void _ZN7S1801C33v33Ev();
extern void _ZN7S1801C33v34Ev();
extern void _ZN7S1801C33v35Ev();
extern void _ZN7S1801C33v36Ev();
extern void _ZN7S1801C33v37Ev();
extern void _ZN7S1801C33v38Ev();
extern void _ZN7S1801C33v39Ev();
extern void _ZN7S1801C33v40Ev();
extern void _ZN7S1801C33v41Ev();
extern void _ZN7S1801C33v42Ev();
extern void _ZN7S1801C33v43Ev();
extern void _ZN7S1801C33v44Ev();
extern void _ZN7S1801C33v45Ev();
extern void _ZN7S1801C33v46Ev();
extern void _ZN7S1801C33v47Ev();
extern void _ZN7S1801C33v48Ev();
extern void _ZN7S1801C33v49Ev();
extern void _ZN7S1801C33v50Ev();
extern void _ZN7S1801C33v51Ev();
extern void _ZN7S1801C33v52Ev();
extern void _ZN7S1801C33v53Ev();
extern void _ZN7S1801C23v54Ev();
static  VTBL_ENTRY vtc_S1801C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1801C2[0]),
  (VTBL_ENTRY)&_ZN7S1801C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1801C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1801C23v54Ev,
};
extern VTBL_ENTRY _ZTI7S1801C2[];
extern  VTBL_ENTRY _ZTV7S1801C2[];
Class_Descriptor cd_S1801C2 = {  "S1801C2", // class name
  bases_S1801C2, 2,
  &(vtc_S1801C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1801C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1801C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1801C1  : S1801C2 {
  virtual void  v1(); // _ZN7S1801C12v1Ev
  virtual void  v2(); // _ZN7S1801C12v2Ev
  virtual void  v3(); // _ZN7S1801C12v3Ev
  ~S1801C1(); // tgen
  S1801C1(); // tgen
};
//SIG(1 S1801C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53} v54} v1 v2 v3}


void  S1801C1 ::v1(){vfunc_called(this, "_ZN7S1801C12v1Ev");}
void  S1801C1 ::v2(){vfunc_called(this, "_ZN7S1801C12v2Ev");}
void  S1801C1 ::v3(){vfunc_called(this, "_ZN7S1801C12v3Ev");}
S1801C1 ::~S1801C1(){ note_dtor("S1801C1", this);} // tgen
S1801C1 ::S1801C1(){ note_ctor("S1801C1", this);} // tgen

static void Test_S1801C1()
{
  extern Class_Descriptor cd_S1801C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1801C1, buf);
    S1801C1 *dp, &lv = *(dp=new (buf) S1801C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1801C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1801C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1801C3*)(S1801C2*), 0, "S1801C1");
    check_base_class_offset(lv, (S1801C3*)(S1801C2*), 0, "S1801C1");
    check_base_class_offset(lv, (S1801C2*), 0, "S1801C1");
    test_class_info(&lv, &cd_S1801C1);
    dp->~S1801C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1801C1(Test_S1801C1, "S1801C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1801C1C1Ev();
extern void _ZN7S1801C1D1Ev();
Name_Map name_map_S1801C1[] = {
  NSPAIR(_ZN7S1801C1C1Ev),
  NSPAIR(_ZN7S1801C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1801C3;
extern VTBL_ENTRY _ZTI7S1801C3[];
extern  VTBL_ENTRY _ZTV7S1801C3[];
extern Class_Descriptor cd_S1801C2;
extern VTBL_ENTRY _ZTI7S1801C2[];
extern  VTBL_ENTRY _ZTV7S1801C2[];
static Base_Class bases_S1801C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1801C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1801C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1801C1[];
extern void _ZN7S1801C1D1Ev();
extern void _ZN7S1801C1D0Ev();
extern void _ZN7S1801C32v4Ev();
extern void _ZN7S1801C32v5Ev();
extern void _ZN7S1801C32v6Ev();
extern void _ZN7S1801C32v7Ev();
extern void _ZN7S1801C32v8Ev();
extern void _ZN7S1801C32v9Ev();
extern void _ZN7S1801C33v10Ev();
extern void _ZN7S1801C33v11Ev();
extern void _ZN7S1801C33v12Ev();
extern void _ZN7S1801C33v13Ev();
extern void _ZN7S1801C33v14Ev();
extern void _ZN7S1801C33v15Ev();
extern void _ZN7S1801C33v16Ev();
extern void _ZN7S1801C33v17Ev();
extern void _ZN7S1801C33v18Ev();
extern void _ZN7S1801C33v19Ev();
extern void _ZN7S1801C33v20Ev();
extern void _ZN7S1801C33v21Ev();
extern void _ZN7S1801C33v22Ev();
extern void _ZN7S1801C33v23Ev();
extern void _ZN7S1801C33v24Ev();
extern void _ZN7S1801C33v25Ev();
extern void _ZN7S1801C33v26Ev();
extern void _ZN7S1801C33v27Ev();
extern void _ZN7S1801C33v28Ev();
extern void _ZN7S1801C33v29Ev();
extern void _ZN7S1801C33v30Ev();
extern void _ZN7S1801C33v31Ev();
extern void _ZN7S1801C33v32Ev();
extern void _ZN7S1801C33v33Ev();
extern void _ZN7S1801C33v34Ev();
extern void _ZN7S1801C33v35Ev();
extern void _ZN7S1801C33v36Ev();
extern void _ZN7S1801C33v37Ev();
extern void _ZN7S1801C33v38Ev();
extern void _ZN7S1801C33v39Ev();
extern void _ZN7S1801C33v40Ev();
extern void _ZN7S1801C33v41Ev();
extern void _ZN7S1801C33v42Ev();
extern void _ZN7S1801C33v43Ev();
extern void _ZN7S1801C33v44Ev();
extern void _ZN7S1801C33v45Ev();
extern void _ZN7S1801C33v46Ev();
extern void _ZN7S1801C33v47Ev();
extern void _ZN7S1801C33v48Ev();
extern void _ZN7S1801C33v49Ev();
extern void _ZN7S1801C33v50Ev();
extern void _ZN7S1801C33v51Ev();
extern void _ZN7S1801C33v52Ev();
extern void _ZN7S1801C33v53Ev();
extern void _ZN7S1801C23v54Ev();
extern void _ZN7S1801C12v1Ev();
extern void _ZN7S1801C12v2Ev();
extern void _ZN7S1801C12v3Ev();
static  VTBL_ENTRY vtc_S1801C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1801C1[0]),
  (VTBL_ENTRY)&_ZN7S1801C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1801C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1801C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1801C23v54Ev,
  (VTBL_ENTRY)&_ZN7S1801C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1801C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1801C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1801C1[];
extern  VTBL_ENTRY _ZTV7S1801C1[];
Class_Descriptor cd_S1801C1 = {  "S1801C1", // class name
  bases_S1801C1, 3,
  &(vtc_S1801C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1801C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1801C1),58, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1792C3  : S1778C4_nt {
  virtual void  v3(); // _ZN7S1792C32v3Ev
  virtual void  v4(); // _ZN7S1792C32v4Ev
  virtual void  v5(); // _ZN7S1792C32v5Ev
  virtual void  v6(); // _ZN7S1792C32v6Ev
  virtual void  v7(); // _ZN7S1792C32v7Ev
  virtual void  v8(); // _ZN7S1792C32v8Ev
  virtual void  v9(); // _ZN7S1792C32v9Ev
  virtual void  v10(); // _ZN7S1792C33v10Ev
  virtual void  v11(); // _ZN7S1792C33v11Ev
  virtual void  v12(); // _ZN7S1792C33v12Ev
  virtual void  v13(); // _ZN7S1792C33v13Ev
  virtual void  v14(); // _ZN7S1792C33v14Ev
  virtual void  v15(); // _ZN7S1792C33v15Ev
  virtual void  v16(); // _ZN7S1792C33v16Ev
  virtual void  v17(); // _ZN7S1792C33v17Ev
  virtual void  v18(); // _ZN7S1792C33v18Ev
  virtual void  v19(); // _ZN7S1792C33v19Ev
  virtual void  v20(); // _ZN7S1792C33v20Ev
  virtual void  v21(); // _ZN7S1792C33v21Ev
  virtual void  v22(); // _ZN7S1792C33v22Ev
  virtual void  v23(); // _ZN7S1792C33v23Ev
  virtual void  v24(); // _ZN7S1792C33v24Ev
  virtual void  v25(); // _ZN7S1792C33v25Ev
  virtual void  v26(); // _ZN7S1792C33v26Ev
  virtual void  v27(); // _ZN7S1792C33v27Ev
  virtual void  v28(); // _ZN7S1792C33v28Ev
  virtual void  v29(); // _ZN7S1792C33v29Ev
  virtual void  v30(); // _ZN7S1792C33v30Ev
  virtual void  v31(); // _ZN7S1792C33v31Ev
  virtual void  v32(); // _ZN7S1792C33v32Ev
  virtual void  v33(); // _ZN7S1792C33v33Ev
  virtual void  v34(); // _ZN7S1792C33v34Ev
  virtual void  v35(); // _ZN7S1792C33v35Ev
  virtual void  v36(); // _ZN7S1792C33v36Ev
  virtual void  v37(); // _ZN7S1792C33v37Ev
  virtual void  v38(); // _ZN7S1792C33v38Ev
  virtual void  v39(); // _ZN7S1792C33v39Ev
  virtual void  v40(); // _ZN7S1792C33v40Ev
  virtual void  v41(); // _ZN7S1792C33v41Ev
  virtual void  v42(); // _ZN7S1792C33v42Ev
  virtual void  v43(); // _ZN7S1792C33v43Ev
  virtual void  v44(); // _ZN7S1792C33v44Ev
  virtual void  v45(); // _ZN7S1792C33v45Ev
  virtual void  v46(); // _ZN7S1792C33v46Ev
  virtual void  v47(); // _ZN7S1792C33v47Ev
  virtual void  v48(); // _ZN7S1792C33v48Ev
  virtual void  v49(); // _ZN7S1792C33v49Ev
  virtual void  v50(); // _ZN7S1792C33v50Ev
  virtual void  v51(); // _ZN7S1792C33v51Ev
  virtual void  v52(); // _ZN7S1792C33v52Ev
  ~S1792C3(); // tgen
  S1792C3(); // tgen
};
//SIG(-1 S1792C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1792C3 ::v3(){vfunc_called(this, "_ZN7S1792C32v3Ev");}
void  S1792C3 ::v4(){vfunc_called(this, "_ZN7S1792C32v4Ev");}
void  S1792C3 ::v5(){vfunc_called(this, "_ZN7S1792C32v5Ev");}
void  S1792C3 ::v6(){vfunc_called(this, "_ZN7S1792C32v6Ev");}
void  S1792C3 ::v7(){vfunc_called(this, "_ZN7S1792C32v7Ev");}
void  S1792C3 ::v8(){vfunc_called(this, "_ZN7S1792C32v8Ev");}
void  S1792C3 ::v9(){vfunc_called(this, "_ZN7S1792C32v9Ev");}
void  S1792C3 ::v10(){vfunc_called(this, "_ZN7S1792C33v10Ev");}
void  S1792C3 ::v11(){vfunc_called(this, "_ZN7S1792C33v11Ev");}
void  S1792C3 ::v12(){vfunc_called(this, "_ZN7S1792C33v12Ev");}
void  S1792C3 ::v13(){vfunc_called(this, "_ZN7S1792C33v13Ev");}
void  S1792C3 ::v14(){vfunc_called(this, "_ZN7S1792C33v14Ev");}
void  S1792C3 ::v15(){vfunc_called(this, "_ZN7S1792C33v15Ev");}
void  S1792C3 ::v16(){vfunc_called(this, "_ZN7S1792C33v16Ev");}
void  S1792C3 ::v17(){vfunc_called(this, "_ZN7S1792C33v17Ev");}
void  S1792C3 ::v18(){vfunc_called(this, "_ZN7S1792C33v18Ev");}
void  S1792C3 ::v19(){vfunc_called(this, "_ZN7S1792C33v19Ev");}
void  S1792C3 ::v20(){vfunc_called(this, "_ZN7S1792C33v20Ev");}
void  S1792C3 ::v21(){vfunc_called(this, "_ZN7S1792C33v21Ev");}
void  S1792C3 ::v22(){vfunc_called(this, "_ZN7S1792C33v22Ev");}
void  S1792C3 ::v23(){vfunc_called(this, "_ZN7S1792C33v23Ev");}
void  S1792C3 ::v24(){vfunc_called(this, "_ZN7S1792C33v24Ev");}
void  S1792C3 ::v25(){vfunc_called(this, "_ZN7S1792C33v25Ev");}
void  S1792C3 ::v26(){vfunc_called(this, "_ZN7S1792C33v26Ev");}
void  S1792C3 ::v27(){vfunc_called(this, "_ZN7S1792C33v27Ev");}
void  S1792C3 ::v28(){vfunc_called(this, "_ZN7S1792C33v28Ev");}
void  S1792C3 ::v29(){vfunc_called(this, "_ZN7S1792C33v29Ev");}
void  S1792C3 ::v30(){vfunc_called(this, "_ZN7S1792C33v30Ev");}
void  S1792C3 ::v31(){vfunc_called(this, "_ZN7S1792C33v31Ev");}
void  S1792C3 ::v32(){vfunc_called(this, "_ZN7S1792C33v32Ev");}
void  S1792C3 ::v33(){vfunc_called(this, "_ZN7S1792C33v33Ev");}
void  S1792C3 ::v34(){vfunc_called(this, "_ZN7S1792C33v34Ev");}
void  S1792C3 ::v35(){vfunc_called(this, "_ZN7S1792C33v35Ev");}
void  S1792C3 ::v36(){vfunc_called(this, "_ZN7S1792C33v36Ev");}
void  S1792C3 ::v37(){vfunc_called(this, "_ZN7S1792C33v37Ev");}
void  S1792C3 ::v38(){vfunc_called(this, "_ZN7S1792C33v38Ev");}
void  S1792C3 ::v39(){vfunc_called(this, "_ZN7S1792C33v39Ev");}
void  S1792C3 ::v40(){vfunc_called(this, "_ZN7S1792C33v40Ev");}
void  S1792C3 ::v41(){vfunc_called(this, "_ZN7S1792C33v41Ev");}
void  S1792C3 ::v42(){vfunc_called(this, "_ZN7S1792C33v42Ev");}
void  S1792C3 ::v43(){vfunc_called(this, "_ZN7S1792C33v43Ev");}
void  S1792C3 ::v44(){vfunc_called(this, "_ZN7S1792C33v44Ev");}
void  S1792C3 ::v45(){vfunc_called(this, "_ZN7S1792C33v45Ev");}
void  S1792C3 ::v46(){vfunc_called(this, "_ZN7S1792C33v46Ev");}
void  S1792C3 ::v47(){vfunc_called(this, "_ZN7S1792C33v47Ev");}
void  S1792C3 ::v48(){vfunc_called(this, "_ZN7S1792C33v48Ev");}
void  S1792C3 ::v49(){vfunc_called(this, "_ZN7S1792C33v49Ev");}
void  S1792C3 ::v50(){vfunc_called(this, "_ZN7S1792C33v50Ev");}
void  S1792C3 ::v51(){vfunc_called(this, "_ZN7S1792C33v51Ev");}
void  S1792C3 ::v52(){vfunc_called(this, "_ZN7S1792C33v52Ev");}
S1792C3 ::~S1792C3(){ note_dtor("S1792C3", this);} // tgen
S1792C3 ::S1792C3(){ note_ctor("S1792C3", this);} // tgen

static void Test_S1792C3()
{
  extern Class_Descriptor cd_S1792C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1792C3, buf);
    S1792C3 *dp, &lv = *(dp=new (buf) S1792C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1792C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1792C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1792C3");
    test_class_info(&lv, &cd_S1792C3);
    dp->~S1792C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1792C3(Test_S1792C3, "S1792C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1792C3C1Ev();
extern void _ZN7S1792C3D1Ev();
Name_Map name_map_S1792C3[] = {
  NSPAIR(_ZN7S1792C3C1Ev),
  NSPAIR(_ZN7S1792C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1792C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1792C3[];
extern void _ZN7S1792C3D1Ev();
extern void _ZN7S1792C3D0Ev();
extern void _ZN7S1792C32v3Ev();
extern void _ZN7S1792C32v4Ev();
extern void _ZN7S1792C32v5Ev();
extern void _ZN7S1792C32v6Ev();
extern void _ZN7S1792C32v7Ev();
extern void _ZN7S1792C32v8Ev();
extern void _ZN7S1792C32v9Ev();
extern void _ZN7S1792C33v10Ev();
extern void _ZN7S1792C33v11Ev();
extern void _ZN7S1792C33v12Ev();
extern void _ZN7S1792C33v13Ev();
extern void _ZN7S1792C33v14Ev();
extern void _ZN7S1792C33v15Ev();
extern void _ZN7S1792C33v16Ev();
extern void _ZN7S1792C33v17Ev();
extern void _ZN7S1792C33v18Ev();
extern void _ZN7S1792C33v19Ev();
extern void _ZN7S1792C33v20Ev();
extern void _ZN7S1792C33v21Ev();
extern void _ZN7S1792C33v22Ev();
extern void _ZN7S1792C33v23Ev();
extern void _ZN7S1792C33v24Ev();
extern void _ZN7S1792C33v25Ev();
extern void _ZN7S1792C33v26Ev();
extern void _ZN7S1792C33v27Ev();
extern void _ZN7S1792C33v28Ev();
extern void _ZN7S1792C33v29Ev();
extern void _ZN7S1792C33v30Ev();
extern void _ZN7S1792C33v31Ev();
extern void _ZN7S1792C33v32Ev();
extern void _ZN7S1792C33v33Ev();
extern void _ZN7S1792C33v34Ev();
extern void _ZN7S1792C33v35Ev();
extern void _ZN7S1792C33v36Ev();
extern void _ZN7S1792C33v37Ev();
extern void _ZN7S1792C33v38Ev();
extern void _ZN7S1792C33v39Ev();
extern void _ZN7S1792C33v40Ev();
extern void _ZN7S1792C33v41Ev();
extern void _ZN7S1792C33v42Ev();
extern void _ZN7S1792C33v43Ev();
extern void _ZN7S1792C33v44Ev();
extern void _ZN7S1792C33v45Ev();
extern void _ZN7S1792C33v46Ev();
extern void _ZN7S1792C33v47Ev();
extern void _ZN7S1792C33v48Ev();
extern void _ZN7S1792C33v49Ev();
extern void _ZN7S1792C33v50Ev();
extern void _ZN7S1792C33v51Ev();
extern void _ZN7S1792C33v52Ev();
static  VTBL_ENTRY vtc_S1792C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1792C3[0]),
  (VTBL_ENTRY)&_ZN7S1792C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1792C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v52Ev,
};
extern VTBL_ENTRY _ZTI7S1792C3[];
extern  VTBL_ENTRY _ZTV7S1792C3[];
Class_Descriptor cd_S1792C3 = {  "S1792C3", // class name
  bases_S1792C3, 1,
  &(vtc_S1792C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1792C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1792C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1792C2  : S1792C3 {
  virtual void  v53(); // _ZN7S1792C23v53Ev
  ~S1792C2(); // tgen
  S1792C2(); // tgen
};
//SIG(-1 S1792C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1792C2 ::v53(){vfunc_called(this, "_ZN7S1792C23v53Ev");}
S1792C2 ::~S1792C2(){ note_dtor("S1792C2", this);} // tgen
S1792C2 ::S1792C2(){ note_ctor("S1792C2", this);} // tgen

static void Test_S1792C2()
{
  extern Class_Descriptor cd_S1792C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1792C2, buf);
    S1792C2 *dp, &lv = *(dp=new (buf) S1792C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1792C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1792C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1792C3*), 0, "S1792C2");
    check_base_class_offset(lv, (S1792C3*), 0, "S1792C2");
    test_class_info(&lv, &cd_S1792C2);
    dp->~S1792C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1792C2(Test_S1792C2, "S1792C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1792C2C1Ev();
extern void _ZN7S1792C2D1Ev();
Name_Map name_map_S1792C2[] = {
  NSPAIR(_ZN7S1792C2C1Ev),
  NSPAIR(_ZN7S1792C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1792C3;
extern VTBL_ENTRY _ZTI7S1792C3[];
extern  VTBL_ENTRY _ZTV7S1792C3[];
static Base_Class bases_S1792C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1792C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1792C2[];
extern void _ZN7S1792C2D1Ev();
extern void _ZN7S1792C2D0Ev();
extern void _ZN7S1792C32v3Ev();
extern void _ZN7S1792C32v4Ev();
extern void _ZN7S1792C32v5Ev();
extern void _ZN7S1792C32v6Ev();
extern void _ZN7S1792C32v7Ev();
extern void _ZN7S1792C32v8Ev();
extern void _ZN7S1792C32v9Ev();
extern void _ZN7S1792C33v10Ev();
extern void _ZN7S1792C33v11Ev();
extern void _ZN7S1792C33v12Ev();
extern void _ZN7S1792C33v13Ev();
extern void _ZN7S1792C33v14Ev();
extern void _ZN7S1792C33v15Ev();
extern void _ZN7S1792C33v16Ev();
extern void _ZN7S1792C33v17Ev();
extern void _ZN7S1792C33v18Ev();
extern void _ZN7S1792C33v19Ev();
extern void _ZN7S1792C33v20Ev();
extern void _ZN7S1792C33v21Ev();
extern void _ZN7S1792C33v22Ev();
extern void _ZN7S1792C33v23Ev();
extern void _ZN7S1792C33v24Ev();
extern void _ZN7S1792C33v25Ev();
extern void _ZN7S1792C33v26Ev();
extern void _ZN7S1792C33v27Ev();
extern void _ZN7S1792C33v28Ev();
extern void _ZN7S1792C33v29Ev();
extern void _ZN7S1792C33v30Ev();
extern void _ZN7S1792C33v31Ev();
extern void _ZN7S1792C33v32Ev();
extern void _ZN7S1792C33v33Ev();
extern void _ZN7S1792C33v34Ev();
extern void _ZN7S1792C33v35Ev();
extern void _ZN7S1792C33v36Ev();
extern void _ZN7S1792C33v37Ev();
extern void _ZN7S1792C33v38Ev();
extern void _ZN7S1792C33v39Ev();
extern void _ZN7S1792C33v40Ev();
extern void _ZN7S1792C33v41Ev();
extern void _ZN7S1792C33v42Ev();
extern void _ZN7S1792C33v43Ev();
extern void _ZN7S1792C33v44Ev();
extern void _ZN7S1792C33v45Ev();
extern void _ZN7S1792C33v46Ev();
extern void _ZN7S1792C33v47Ev();
extern void _ZN7S1792C33v48Ev();
extern void _ZN7S1792C33v49Ev();
extern void _ZN7S1792C33v50Ev();
extern void _ZN7S1792C33v51Ev();
extern void _ZN7S1792C33v52Ev();
extern void _ZN7S1792C23v53Ev();
static  VTBL_ENTRY vtc_S1792C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1792C2[0]),
  (VTBL_ENTRY)&_ZN7S1792C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1792C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1792C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S1792C2[];
extern  VTBL_ENTRY _ZTV7S1792C2[];
Class_Descriptor cd_S1792C2 = {  "S1792C2", // class name
  bases_S1792C2, 2,
  &(vtc_S1792C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1792C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1792C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1792C1  : S1792C2 {
  virtual void  v1(); // _ZN7S1792C12v1Ev
  virtual void  v2(); // _ZN7S1792C12v2Ev
  ~S1792C1(); // tgen
  S1792C1(); // tgen
};
//SIG(1 S1792C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52} v53} v1 v2}


void  S1792C1 ::v1(){vfunc_called(this, "_ZN7S1792C12v1Ev");}
void  S1792C1 ::v2(){vfunc_called(this, "_ZN7S1792C12v2Ev");}
S1792C1 ::~S1792C1(){ note_dtor("S1792C1", this);} // tgen
S1792C1 ::S1792C1(){ note_ctor("S1792C1", this);} // tgen

static void Test_S1792C1()
{
  extern Class_Descriptor cd_S1792C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1792C1, buf);
    S1792C1 *dp, &lv = *(dp=new (buf) S1792C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1792C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1792C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1792C3*)(S1792C2*), 0, "S1792C1");
    check_base_class_offset(lv, (S1792C3*)(S1792C2*), 0, "S1792C1");
    check_base_class_offset(lv, (S1792C2*), 0, "S1792C1");
    test_class_info(&lv, &cd_S1792C1);
    dp->~S1792C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1792C1(Test_S1792C1, "S1792C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1792C1C1Ev();
extern void _ZN7S1792C1D1Ev();
Name_Map name_map_S1792C1[] = {
  NSPAIR(_ZN7S1792C1C1Ev),
  NSPAIR(_ZN7S1792C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1792C3;
extern VTBL_ENTRY _ZTI7S1792C3[];
extern  VTBL_ENTRY _ZTV7S1792C3[];
extern Class_Descriptor cd_S1792C2;
extern VTBL_ENTRY _ZTI7S1792C2[];
extern  VTBL_ENTRY _ZTV7S1792C2[];
static Base_Class bases_S1792C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1792C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1792C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1792C1[];
extern void _ZN7S1792C1D1Ev();
extern void _ZN7S1792C1D0Ev();
extern void _ZN7S1792C32v3Ev();
extern void _ZN7S1792C32v4Ev();
extern void _ZN7S1792C32v5Ev();
extern void _ZN7S1792C32v6Ev();
extern void _ZN7S1792C32v7Ev();
extern void _ZN7S1792C32v8Ev();
extern void _ZN7S1792C32v9Ev();
extern void _ZN7S1792C33v10Ev();
extern void _ZN7S1792C33v11Ev();
extern void _ZN7S1792C33v12Ev();
extern void _ZN7S1792C33v13Ev();
extern void _ZN7S1792C33v14Ev();
extern void _ZN7S1792C33v15Ev();
extern void _ZN7S1792C33v16Ev();
extern void _ZN7S1792C33v17Ev();
extern void _ZN7S1792C33v18Ev();
extern void _ZN7S1792C33v19Ev();
extern void _ZN7S1792C33v20Ev();
extern void _ZN7S1792C33v21Ev();
extern void _ZN7S1792C33v22Ev();
extern void _ZN7S1792C33v23Ev();
extern void _ZN7S1792C33v24Ev();
extern void _ZN7S1792C33v25Ev();
extern void _ZN7S1792C33v26Ev();
extern void _ZN7S1792C33v27Ev();
extern void _ZN7S1792C33v28Ev();
extern void _ZN7S1792C33v29Ev();
extern void _ZN7S1792C33v30Ev();
extern void _ZN7S1792C33v31Ev();
extern void _ZN7S1792C33v32Ev();
extern void _ZN7S1792C33v33Ev();
extern void _ZN7S1792C33v34Ev();
extern void _ZN7S1792C33v35Ev();
extern void _ZN7S1792C33v36Ev();
extern void _ZN7S1792C33v37Ev();
extern void _ZN7S1792C33v38Ev();
extern void _ZN7S1792C33v39Ev();
extern void _ZN7S1792C33v40Ev();
extern void _ZN7S1792C33v41Ev();
extern void _ZN7S1792C33v42Ev();
extern void _ZN7S1792C33v43Ev();
extern void _ZN7S1792C33v44Ev();
extern void _ZN7S1792C33v45Ev();
extern void _ZN7S1792C33v46Ev();
extern void _ZN7S1792C33v47Ev();
extern void _ZN7S1792C33v48Ev();
extern void _ZN7S1792C33v49Ev();
extern void _ZN7S1792C33v50Ev();
extern void _ZN7S1792C33v51Ev();
extern void _ZN7S1792C33v52Ev();
extern void _ZN7S1792C23v53Ev();
extern void _ZN7S1792C12v1Ev();
extern void _ZN7S1792C12v2Ev();
static  VTBL_ENTRY vtc_S1792C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1792C1[0]),
  (VTBL_ENTRY)&_ZN7S1792C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1792C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1792C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1792C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1792C23v53Ev,
  (VTBL_ENTRY)&_ZN7S1792C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1792C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1792C1[];
extern  VTBL_ENTRY _ZTV7S1792C1[];
Class_Descriptor cd_S1792C1 = {  "S1792C1", // class name
  bases_S1792C1, 3,
  &(vtc_S1792C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1792C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1792C1),57, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1781C3  : S1778C4_nt {
  virtual void  v2(); // _ZN7S1781C32v2Ev
  virtual void  v3(); // _ZN7S1781C32v3Ev
  virtual void  v4(); // _ZN7S1781C32v4Ev
  virtual void  v5(); // _ZN7S1781C32v5Ev
  virtual void  v6(); // _ZN7S1781C32v6Ev
  virtual void  v7(); // _ZN7S1781C32v7Ev
  virtual void  v8(); // _ZN7S1781C32v8Ev
  virtual void  v9(); // _ZN7S1781C32v9Ev
  virtual void  v10(); // _ZN7S1781C33v10Ev
  virtual void  v11(); // _ZN7S1781C33v11Ev
  virtual void  v12(); // _ZN7S1781C33v12Ev
  virtual void  v13(); // _ZN7S1781C33v13Ev
  virtual void  v14(); // _ZN7S1781C33v14Ev
  virtual void  v15(); // _ZN7S1781C33v15Ev
  virtual void  v16(); // _ZN7S1781C33v16Ev
  virtual void  v17(); // _ZN7S1781C33v17Ev
  virtual void  v18(); // _ZN7S1781C33v18Ev
  virtual void  v19(); // _ZN7S1781C33v19Ev
  virtual void  v20(); // _ZN7S1781C33v20Ev
  virtual void  v21(); // _ZN7S1781C33v21Ev
  virtual void  v22(); // _ZN7S1781C33v22Ev
  virtual void  v23(); // _ZN7S1781C33v23Ev
  virtual void  v24(); // _ZN7S1781C33v24Ev
  virtual void  v25(); // _ZN7S1781C33v25Ev
  virtual void  v26(); // _ZN7S1781C33v26Ev
  virtual void  v27(); // _ZN7S1781C33v27Ev
  virtual void  v28(); // _ZN7S1781C33v28Ev
  virtual void  v29(); // _ZN7S1781C33v29Ev
  virtual void  v30(); // _ZN7S1781C33v30Ev
  virtual void  v31(); // _ZN7S1781C33v31Ev
  virtual void  v32(); // _ZN7S1781C33v32Ev
  virtual void  v33(); // _ZN7S1781C33v33Ev
  virtual void  v34(); // _ZN7S1781C33v34Ev
  virtual void  v35(); // _ZN7S1781C33v35Ev
  virtual void  v36(); // _ZN7S1781C33v36Ev
  virtual void  v37(); // _ZN7S1781C33v37Ev
  virtual void  v38(); // _ZN7S1781C33v38Ev
  virtual void  v39(); // _ZN7S1781C33v39Ev
  virtual void  v40(); // _ZN7S1781C33v40Ev
  virtual void  v41(); // _ZN7S1781C33v41Ev
  virtual void  v42(); // _ZN7S1781C33v42Ev
  virtual void  v43(); // _ZN7S1781C33v43Ev
  virtual void  v44(); // _ZN7S1781C33v44Ev
  virtual void  v45(); // _ZN7S1781C33v45Ev
  virtual void  v46(); // _ZN7S1781C33v46Ev
  virtual void  v47(); // _ZN7S1781C33v47Ev
  virtual void  v48(); // _ZN7S1781C33v48Ev
  virtual void  v49(); // _ZN7S1781C33v49Ev
  virtual void  v50(); // _ZN7S1781C33v50Ev
  virtual void  v51(); // _ZN7S1781C33v51Ev
  ~S1781C3(); // tgen
  S1781C3(); // tgen
};
//SIG(-1 S1781C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50}


void  S1781C3 ::v2(){vfunc_called(this, "_ZN7S1781C32v2Ev");}
void  S1781C3 ::v3(){vfunc_called(this, "_ZN7S1781C32v3Ev");}
void  S1781C3 ::v4(){vfunc_called(this, "_ZN7S1781C32v4Ev");}
void  S1781C3 ::v5(){vfunc_called(this, "_ZN7S1781C32v5Ev");}
void  S1781C3 ::v6(){vfunc_called(this, "_ZN7S1781C32v6Ev");}
void  S1781C3 ::v7(){vfunc_called(this, "_ZN7S1781C32v7Ev");}
void  S1781C3 ::v8(){vfunc_called(this, "_ZN7S1781C32v8Ev");}
void  S1781C3 ::v9(){vfunc_called(this, "_ZN7S1781C32v9Ev");}
void  S1781C3 ::v10(){vfunc_called(this, "_ZN7S1781C33v10Ev");}
void  S1781C3 ::v11(){vfunc_called(this, "_ZN7S1781C33v11Ev");}
void  S1781C3 ::v12(){vfunc_called(this, "_ZN7S1781C33v12Ev");}
void  S1781C3 ::v13(){vfunc_called(this, "_ZN7S1781C33v13Ev");}
void  S1781C3 ::v14(){vfunc_called(this, "_ZN7S1781C33v14Ev");}
void  S1781C3 ::v15(){vfunc_called(this, "_ZN7S1781C33v15Ev");}
void  S1781C3 ::v16(){vfunc_called(this, "_ZN7S1781C33v16Ev");}
void  S1781C3 ::v17(){vfunc_called(this, "_ZN7S1781C33v17Ev");}
void  S1781C3 ::v18(){vfunc_called(this, "_ZN7S1781C33v18Ev");}
void  S1781C3 ::v19(){vfunc_called(this, "_ZN7S1781C33v19Ev");}
void  S1781C3 ::v20(){vfunc_called(this, "_ZN7S1781C33v20Ev");}
void  S1781C3 ::v21(){vfunc_called(this, "_ZN7S1781C33v21Ev");}
void  S1781C3 ::v22(){vfunc_called(this, "_ZN7S1781C33v22Ev");}
void  S1781C3 ::v23(){vfunc_called(this, "_ZN7S1781C33v23Ev");}
void  S1781C3 ::v24(){vfunc_called(this, "_ZN7S1781C33v24Ev");}
void  S1781C3 ::v25(){vfunc_called(this, "_ZN7S1781C33v25Ev");}
void  S1781C3 ::v26(){vfunc_called(this, "_ZN7S1781C33v26Ev");}
void  S1781C3 ::v27(){vfunc_called(this, "_ZN7S1781C33v27Ev");}
void  S1781C3 ::v28(){vfunc_called(this, "_ZN7S1781C33v28Ev");}
void  S1781C3 ::v29(){vfunc_called(this, "_ZN7S1781C33v29Ev");}
void  S1781C3 ::v30(){vfunc_called(this, "_ZN7S1781C33v30Ev");}
void  S1781C3 ::v31(){vfunc_called(this, "_ZN7S1781C33v31Ev");}
void  S1781C3 ::v32(){vfunc_called(this, "_ZN7S1781C33v32Ev");}
void  S1781C3 ::v33(){vfunc_called(this, "_ZN7S1781C33v33Ev");}
void  S1781C3 ::v34(){vfunc_called(this, "_ZN7S1781C33v34Ev");}
void  S1781C3 ::v35(){vfunc_called(this, "_ZN7S1781C33v35Ev");}
void  S1781C3 ::v36(){vfunc_called(this, "_ZN7S1781C33v36Ev");}
void  S1781C3 ::v37(){vfunc_called(this, "_ZN7S1781C33v37Ev");}
void  S1781C3 ::v38(){vfunc_called(this, "_ZN7S1781C33v38Ev");}
void  S1781C3 ::v39(){vfunc_called(this, "_ZN7S1781C33v39Ev");}
void  S1781C3 ::v40(){vfunc_called(this, "_ZN7S1781C33v40Ev");}
void  S1781C3 ::v41(){vfunc_called(this, "_ZN7S1781C33v41Ev");}
void  S1781C3 ::v42(){vfunc_called(this, "_ZN7S1781C33v42Ev");}
void  S1781C3 ::v43(){vfunc_called(this, "_ZN7S1781C33v43Ev");}
void  S1781C3 ::v44(){vfunc_called(this, "_ZN7S1781C33v44Ev");}
void  S1781C3 ::v45(){vfunc_called(this, "_ZN7S1781C33v45Ev");}
void  S1781C3 ::v46(){vfunc_called(this, "_ZN7S1781C33v46Ev");}
void  S1781C3 ::v47(){vfunc_called(this, "_ZN7S1781C33v47Ev");}
void  S1781C3 ::v48(){vfunc_called(this, "_ZN7S1781C33v48Ev");}
void  S1781C3 ::v49(){vfunc_called(this, "_ZN7S1781C33v49Ev");}
void  S1781C3 ::v50(){vfunc_called(this, "_ZN7S1781C33v50Ev");}
void  S1781C3 ::v51(){vfunc_called(this, "_ZN7S1781C33v51Ev");}
S1781C3 ::~S1781C3(){ note_dtor("S1781C3", this);} // tgen
S1781C3 ::S1781C3(){ note_ctor("S1781C3", this);} // tgen

static void Test_S1781C3()
{
  extern Class_Descriptor cd_S1781C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1781C3, buf);
    S1781C3 *dp, &lv = *(dp=new (buf) S1781C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1781C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1781C3)");
    check_base_class_offset(lv, (S1778C4_nt*), 0, "S1781C3");
    test_class_info(&lv, &cd_S1781C3);
    dp->~S1781C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1781C3(Test_S1781C3, "S1781C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1781C3C1Ev();
extern void _ZN7S1781C3D1Ev();
Name_Map name_map_S1781C3[] = {
  NSPAIR(_ZN7S1781C3C1Ev),
  NSPAIR(_ZN7S1781C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
static Base_Class bases_S1781C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1781C3[];
extern void _ZN7S1781C3D1Ev();
extern void _ZN7S1781C3D0Ev();
extern void _ZN7S1781C32v2Ev();
extern void _ZN7S1781C32v3Ev();
extern void _ZN7S1781C32v4Ev();
extern void _ZN7S1781C32v5Ev();
extern void _ZN7S1781C32v6Ev();
extern void _ZN7S1781C32v7Ev();
extern void _ZN7S1781C32v8Ev();
extern void _ZN7S1781C32v9Ev();
extern void _ZN7S1781C33v10Ev();
extern void _ZN7S1781C33v11Ev();
extern void _ZN7S1781C33v12Ev();
extern void _ZN7S1781C33v13Ev();
extern void _ZN7S1781C33v14Ev();
extern void _ZN7S1781C33v15Ev();
extern void _ZN7S1781C33v16Ev();
extern void _ZN7S1781C33v17Ev();
extern void _ZN7S1781C33v18Ev();
extern void _ZN7S1781C33v19Ev();
extern void _ZN7S1781C33v20Ev();
extern void _ZN7S1781C33v21Ev();
extern void _ZN7S1781C33v22Ev();
extern void _ZN7S1781C33v23Ev();
extern void _ZN7S1781C33v24Ev();
extern void _ZN7S1781C33v25Ev();
extern void _ZN7S1781C33v26Ev();
extern void _ZN7S1781C33v27Ev();
extern void _ZN7S1781C33v28Ev();
extern void _ZN7S1781C33v29Ev();
extern void _ZN7S1781C33v30Ev();
extern void _ZN7S1781C33v31Ev();
extern void _ZN7S1781C33v32Ev();
extern void _ZN7S1781C33v33Ev();
extern void _ZN7S1781C33v34Ev();
extern void _ZN7S1781C33v35Ev();
extern void _ZN7S1781C33v36Ev();
extern void _ZN7S1781C33v37Ev();
extern void _ZN7S1781C33v38Ev();
extern void _ZN7S1781C33v39Ev();
extern void _ZN7S1781C33v40Ev();
extern void _ZN7S1781C33v41Ev();
extern void _ZN7S1781C33v42Ev();
extern void _ZN7S1781C33v43Ev();
extern void _ZN7S1781C33v44Ev();
extern void _ZN7S1781C33v45Ev();
extern void _ZN7S1781C33v46Ev();
extern void _ZN7S1781C33v47Ev();
extern void _ZN7S1781C33v48Ev();
extern void _ZN7S1781C33v49Ev();
extern void _ZN7S1781C33v50Ev();
extern void _ZN7S1781C33v51Ev();
static  VTBL_ENTRY vtc_S1781C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1781C3[0]),
  (VTBL_ENTRY)&_ZN7S1781C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1781C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v51Ev,
};
extern VTBL_ENTRY _ZTI7S1781C3[];
extern  VTBL_ENTRY _ZTV7S1781C3[];
Class_Descriptor cd_S1781C3 = {  "S1781C3", // class name
  bases_S1781C3, 1,
  &(vtc_S1781C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1781C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1781C3),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1781C2  : S1781C3 {
  virtual void  v52(); // _ZN7S1781C23v52Ev
  ~S1781C2(); // tgen
  S1781C2(); // tgen
};
//SIG(-1 S1781C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v1}


void  S1781C2 ::v52(){vfunc_called(this, "_ZN7S1781C23v52Ev");}
S1781C2 ::~S1781C2(){ note_dtor("S1781C2", this);} // tgen
S1781C2 ::S1781C2(){ note_ctor("S1781C2", this);} // tgen

static void Test_S1781C2()
{
  extern Class_Descriptor cd_S1781C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1781C2, buf);
    S1781C2 *dp, &lv = *(dp=new (buf) S1781C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1781C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1781C2)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1781C3*), 0, "S1781C2");
    check_base_class_offset(lv, (S1781C3*), 0, "S1781C2");
    test_class_info(&lv, &cd_S1781C2);
    dp->~S1781C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1781C2(Test_S1781C2, "S1781C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1781C2C1Ev();
extern void _ZN7S1781C2D1Ev();
Name_Map name_map_S1781C2[] = {
  NSPAIR(_ZN7S1781C2C1Ev),
  NSPAIR(_ZN7S1781C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1781C3;
extern VTBL_ENTRY _ZTI7S1781C3[];
extern  VTBL_ENTRY _ZTV7S1781C3[];
static Base_Class bases_S1781C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1781C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1781C2[];
extern void _ZN7S1781C2D1Ev();
extern void _ZN7S1781C2D0Ev();
extern void _ZN7S1781C32v2Ev();
extern void _ZN7S1781C32v3Ev();
extern void _ZN7S1781C32v4Ev();
extern void _ZN7S1781C32v5Ev();
extern void _ZN7S1781C32v6Ev();
extern void _ZN7S1781C32v7Ev();
extern void _ZN7S1781C32v8Ev();
extern void _ZN7S1781C32v9Ev();
extern void _ZN7S1781C33v10Ev();
extern void _ZN7S1781C33v11Ev();
extern void _ZN7S1781C33v12Ev();
extern void _ZN7S1781C33v13Ev();
extern void _ZN7S1781C33v14Ev();
extern void _ZN7S1781C33v15Ev();
extern void _ZN7S1781C33v16Ev();
extern void _ZN7S1781C33v17Ev();
extern void _ZN7S1781C33v18Ev();
extern void _ZN7S1781C33v19Ev();
extern void _ZN7S1781C33v20Ev();
extern void _ZN7S1781C33v21Ev();
extern void _ZN7S1781C33v22Ev();
extern void _ZN7S1781C33v23Ev();
extern void _ZN7S1781C33v24Ev();
extern void _ZN7S1781C33v25Ev();
extern void _ZN7S1781C33v26Ev();
extern void _ZN7S1781C33v27Ev();
extern void _ZN7S1781C33v28Ev();
extern void _ZN7S1781C33v29Ev();
extern void _ZN7S1781C33v30Ev();
extern void _ZN7S1781C33v31Ev();
extern void _ZN7S1781C33v32Ev();
extern void _ZN7S1781C33v33Ev();
extern void _ZN7S1781C33v34Ev();
extern void _ZN7S1781C33v35Ev();
extern void _ZN7S1781C33v36Ev();
extern void _ZN7S1781C33v37Ev();
extern void _ZN7S1781C33v38Ev();
extern void _ZN7S1781C33v39Ev();
extern void _ZN7S1781C33v40Ev();
extern void _ZN7S1781C33v41Ev();
extern void _ZN7S1781C33v42Ev();
extern void _ZN7S1781C33v43Ev();
extern void _ZN7S1781C33v44Ev();
extern void _ZN7S1781C33v45Ev();
extern void _ZN7S1781C33v46Ev();
extern void _ZN7S1781C33v47Ev();
extern void _ZN7S1781C33v48Ev();
extern void _ZN7S1781C33v49Ev();
extern void _ZN7S1781C33v50Ev();
extern void _ZN7S1781C33v51Ev();
extern void _ZN7S1781C23v52Ev();
static  VTBL_ENTRY vtc_S1781C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1781C2[0]),
  (VTBL_ENTRY)&_ZN7S1781C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1781C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1781C23v52Ev,
};
extern VTBL_ENTRY _ZTI7S1781C2[];
extern  VTBL_ENTRY _ZTV7S1781C2[];
Class_Descriptor cd_S1781C2 = {  "S1781C2", // class name
  bases_S1781C2, 2,
  &(vtc_S1781C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1781C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1781C2),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1781C1  : S1781C2 {
  virtual void  v1(); // _ZN7S1781C12v1Ev
  ~S1781C1(); // tgen
  S1781C1(); // tgen
};
//SIG(1 S1781C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51} v52} v1}


void  S1781C1 ::v1(){vfunc_called(this, "_ZN7S1781C12v1Ev");}
S1781C1 ::~S1781C1(){ note_dtor("S1781C1", this);} // tgen
S1781C1 ::S1781C1(){ note_ctor("S1781C1", this);} // tgen

static void Test_S1781C1()
{
  extern Class_Descriptor cd_S1781C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1781C1, buf);
    S1781C1 *dp, &lv = *(dp=new (buf) S1781C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1781C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1781C1)");
    check_base_class_offset(lv, (S1778C4_nt*)(S1781C3*)(S1781C2*), 0, "S1781C1");
    check_base_class_offset(lv, (S1781C3*)(S1781C2*), 0, "S1781C1");
    check_base_class_offset(lv, (S1781C2*), 0, "S1781C1");
    test_class_info(&lv, &cd_S1781C1);
    dp->~S1781C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1781C1(Test_S1781C1, "S1781C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1781C1C1Ev();
extern void _ZN7S1781C1D1Ev();
Name_Map name_map_S1781C1[] = {
  NSPAIR(_ZN7S1781C1C1Ev),
  NSPAIR(_ZN7S1781C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1778C4_nt;
extern VTBL_ENTRY _ZTI10S1778C4_nt[];
extern  VTBL_ENTRY _ZTV10S1778C4_nt[];
extern Class_Descriptor cd_S1781C3;
extern VTBL_ENTRY _ZTI7S1781C3[];
extern  VTBL_ENTRY _ZTV7S1781C3[];
extern Class_Descriptor cd_S1781C2;
extern VTBL_ENTRY _ZTI7S1781C2[];
extern  VTBL_ENTRY _ZTV7S1781C2[];
static Base_Class bases_S1781C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1778C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1781C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1781C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1781C1[];
extern void _ZN7S1781C1D1Ev();
extern void _ZN7S1781C1D0Ev();
extern void _ZN7S1781C32v2Ev();
extern void _ZN7S1781C32v3Ev();
extern void _ZN7S1781C32v4Ev();
extern void _ZN7S1781C32v5Ev();
extern void _ZN7S1781C32v6Ev();
extern void _ZN7S1781C32v7Ev();
extern void _ZN7S1781C32v8Ev();
extern void _ZN7S1781C32v9Ev();
extern void _ZN7S1781C33v10Ev();
extern void _ZN7S1781C33v11Ev();
extern void _ZN7S1781C33v12Ev();
extern void _ZN7S1781C33v13Ev();
extern void _ZN7S1781C33v14Ev();
extern void _ZN7S1781C33v15Ev();
extern void _ZN7S1781C33v16Ev();
extern void _ZN7S1781C33v17Ev();
extern void _ZN7S1781C33v18Ev();
extern void _ZN7S1781C33v19Ev();
extern void _ZN7S1781C33v20Ev();
extern void _ZN7S1781C33v21Ev();
extern void _ZN7S1781C33v22Ev();
extern void _ZN7S1781C33v23Ev();
extern void _ZN7S1781C33v24Ev();
extern void _ZN7S1781C33v25Ev();
extern void _ZN7S1781C33v26Ev();
extern void _ZN7S1781C33v27Ev();
extern void _ZN7S1781C33v28Ev();
extern void _ZN7S1781C33v29Ev();
extern void _ZN7S1781C33v30Ev();
extern void _ZN7S1781C33v31Ev();
extern void _ZN7S1781C33v32Ev();
extern void _ZN7S1781C33v33Ev();
extern void _ZN7S1781C33v34Ev();
extern void _ZN7S1781C33v35Ev();
extern void _ZN7S1781C33v36Ev();
extern void _ZN7S1781C33v37Ev();
extern void _ZN7S1781C33v38Ev();
extern void _ZN7S1781C33v39Ev();
extern void _ZN7S1781C33v40Ev();
extern void _ZN7S1781C33v41Ev();
extern void _ZN7S1781C33v42Ev();
extern void _ZN7S1781C33v43Ev();
extern void _ZN7S1781C33v44Ev();
extern void _ZN7S1781C33v45Ev();
extern void _ZN7S1781C33v46Ev();
extern void _ZN7S1781C33v47Ev();
extern void _ZN7S1781C33v48Ev();
extern void _ZN7S1781C33v49Ev();
extern void _ZN7S1781C33v50Ev();
extern void _ZN7S1781C33v51Ev();
extern void _ZN7S1781C23v52Ev();
extern void _ZN7S1781C12v1Ev();
static  VTBL_ENTRY vtc_S1781C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1781C1[0]),
  (VTBL_ENTRY)&_ZN7S1781C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1781C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1781C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1781C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1781C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1781C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1781C1[];
extern  VTBL_ENTRY _ZTV7S1781C1[];
Class_Descriptor cd_S1781C1 = {  "S1781C1", // class name
  bases_S1781C1, 3,
  &(vtc_S1781C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1781C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1781C1),56, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19972C2  {
  long double s19972c2f0;
  int s19972c2f1[2];
  char s19972c2f2;
  void *s19972c2f3;
  ::S20570C17 s19972c2f4;
  int s19972c2f5;
  void *s19972c2f6;
  int s19972c2f7[2];
  virtual  ~S19972C2(); // _ZN8S19972C2D1Ev
  virtual void  v1(); // _ZN8S19972C22v1Ev
  S19972C2(); // tgen
};
//SIG(-1 S19972C2) C1{ vd v1 FD Fi[2] Fc Fp FC2{ vd m Fp Fl Fi Fp} Fi Fp Fi[2]}


 S19972C2 ::~S19972C2(){ note_dtor("S19972C2", this);}
void  S19972C2 ::v1(){vfunc_called(this, "_ZN8S19972C22v1Ev");}
S19972C2 ::S19972C2(){ note_ctor("S19972C2", this);} // tgen

static void Test_S19972C2()
{
  extern Class_Descriptor cd_S19972C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S19972C2, buf);
    S19972C2 *dp, &lv = *(dp=new (buf) S19972C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S19972C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19972C2)");
    check_field_offset(lv, s19972c2f0, ABISELECT(16,4), "S19972C2.s19972c2f0");
    check_field_offset(lv, s19972c2f1, ABISELECT(32,16), "S19972C2.s19972c2f1");
    check_field_offset(lv, s19972c2f2, ABISELECT(40,24), "S19972C2.s19972c2f2");
    check_field_offset(lv, s19972c2f3, ABISELECT(48,28), "S19972C2.s19972c2f3");
    check_field_offset(lv, s19972c2f4, ABISELECT(56,32), "S19972C2.s19972c2f4");
    check_field_offset(lv, s19972c2f5, ABISELECT(96,52), "S19972C2.s19972c2f5");
    check_field_offset(lv, s19972c2f6, ABISELECT(104,56), "S19972C2.s19972c2f6");
    check_field_offset(lv, s19972c2f7, ABISELECT(112,60), "S19972C2.s19972c2f7");
    test_class_info(&lv, &cd_S19972C2);
    dp->~S19972C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19972C2(Test_S19972C2, "S19972C2", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S19972C2C1Ev();
extern void _ZN8S19972C2D1Ev();
Name_Map name_map_S19972C2[] = {
  NSPAIR(_ZN8S19972C2C1Ev),
  NSPAIR(_ZN8S19972C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19972C2[];
extern void _ZN8S19972C2D1Ev();
extern void _ZN8S19972C2D0Ev();
extern void _ZN8S19972C22v1Ev();
static  VTBL_ENTRY vtc_S19972C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C2[0]),
  (VTBL_ENTRY)&_ZN8S19972C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19972C2[];
extern  VTBL_ENTRY _ZTV8S19972C2[];
Class_Descriptor cd_S19972C2 = {  "S19972C2", // class name
  0,0,//no base classes
  &(vtc_S19972C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S19972C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19972C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19972C6  : virtual S20570C5 {
  long s19972c6f0[3];
  __tsi64 s19972c6f1;
  short s19972c6f2;
  int s19972c6f3;
  __tsi64 s19972c6f4;
  int s19972c6f5;
  virtual  ~S19972C6(); // _ZN8S19972C6D2Ev
  virtual void  v2(); // _ZN8S19972C62v2Ev
  S19972C6(); // tgen
};
//SIG(-1 S19972C6) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 Fl[3] FL Fs Fi FL Fi}


 S19972C6 ::~S19972C6(){ note_dtor("S19972C6", this);}
void  S19972C6 ::v2(){vfunc_called(this, "_ZN8S19972C62v2Ev");}
S19972C6 ::S19972C6(){ note_ctor("S19972C6", this);} // tgen

static void Test_S19972C6()
{
  extern Class_Descriptor cd_S19972C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,54)];
    init_test(&cd_S19972C6, buf);
    S19972C6 *dp, &lv = *(dp=new (buf) S19972C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,212), "sizeof(S19972C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19972C6)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(64,44), "S19972C6");
    check_field_offset(lv, s19972c6f0, ABISELECT(8,4), "S19972C6.s19972c6f0");
    check_field_offset(lv, s19972c6f1, ABISELECT(32,16), "S19972C6.s19972c6f1");
    check_field_offset(lv, s19972c6f2, ABISELECT(40,24), "S19972C6.s19972c6f2");
    check_field_offset(lv, s19972c6f3, ABISELECT(44,28), "S19972C6.s19972c6f3");
    check_field_offset(lv, s19972c6f4, ABISELECT(48,32), "S19972C6.s19972c6f4");
    check_field_offset(lv, s19972c6f5, ABISELECT(56,40), "S19972C6.s19972c6f5");
    test_class_info(&lv, &cd_S19972C6);
    dp->~S19972C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19972C6(Test_S19972C6, "S19972C6", ABISELECT(288,212));

#else // __cplusplus

extern void _ZN8S19972C6C1Ev();
extern void _ZN8S19972C6D2Ev();
Name_Map name_map_S19972C6[] = {
  NSPAIR(_ZN8S19972C6C1Ev),
  NSPAIR(_ZN8S19972C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S19972C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(64,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19972C6[];
extern void _ZN8S19972C6D1Ev();
extern void _ZN8S19972C6D0Ev();
extern void _ZN8S19972C62v2Ev();
static  VTBL_ENTRY vtc_S19972C6[] = {
  ABISELECT(64,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C6[0]),
  (VTBL_ENTRY)&_ZN8S19972C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S19972C6[];
static  VTT_ENTRY vtt_S19972C6[] = {
  {&(_ZTV8S19972C6[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19972C6[];
extern  VTBL_ENTRY _ZTV8S19972C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C6[];
Class_Descriptor cd_S19972C6 = {  "S19972C6", // class name
  bases_S19972C6, 1,
  &(vtc_S19972C6[0]), // expected_vtbl_contents
  &(vtt_S19972C6[0]), // expected_vtt_contents
  ABISELECT(288,212), // object size
  NSPAIRA(_ZTI8S19972C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19972C6),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19972C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19972C5  : S19972C6 {
  int s19972c5f0;
  void *s19972c5f1;
  int s19972c5f2;
  long double s19972c5f3[9];
  long s19972c5f4;
  int s19972c5f5;
  __tsi64 s19972c5f6;
  void *s19972c5f7[5];
  __tsi64 s19972c5f8;
  virtual void  v3(); // _ZN8S19972C52v3Ev
  virtual void  v4(); // _ZN8S19972C52v4Ev
  ~S19972C5(); // tgen
  S19972C5(); // tgen
};
//SIG(-1 S19972C5) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v3 Fl[3] FL Fs Fi FL Fi} v1 v2 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL}


void  S19972C5 ::v3(){vfunc_called(this, "_ZN8S19972C52v3Ev");}
void  S19972C5 ::v4(){vfunc_called(this, "_ZN8S19972C52v4Ev");}
S19972C5 ::~S19972C5(){ note_dtor("S19972C5", this);} // tgen
S19972C5 ::S19972C5(){ note_ctor("S19972C5", this);} // tgen

static void Test_S19972C5()
{
  extern Class_Descriptor cd_S19972C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,95)];
    init_test(&cd_S19972C5, buf);
    S19972C5 *dp, &lv = *(dp=new (buf) S19972C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,376), "sizeof(S19972C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19972C5)");
    check_base_class_offset(lv, (S20570C5*)(S19972C6*), ABISELECT(304,208), "S19972C5");
    check_base_class_offset(lv, (S19972C6*), 0, "S19972C5");
    check_field_offset(lv, s19972c5f0, ABISELECT(60,44), "S19972C5.s19972c5f0");
    check_field_offset(lv, s19972c5f1, ABISELECT(64,48), "S19972C5.s19972c5f1");
    check_field_offset(lv, s19972c5f2, ABISELECT(72,52), "S19972C5.s19972c5f2");
    check_field_offset(lv, s19972c5f3, ABISELECT(80,56), "S19972C5.s19972c5f3");
    check_field_offset(lv, s19972c5f4, ABISELECT(224,164), "S19972C5.s19972c5f4");
    check_field_offset(lv, s19972c5f5, ABISELECT(232,168), "S19972C5.s19972c5f5");
    check_field_offset(lv, s19972c5f6, ABISELECT(240,172), "S19972C5.s19972c5f6");
    check_field_offset(lv, s19972c5f7, ABISELECT(248,180), "S19972C5.s19972c5f7");
    check_field_offset(lv, s19972c5f8, ABISELECT(288,200), "S19972C5.s19972c5f8");
    test_class_info(&lv, &cd_S19972C5);
    dp->~S19972C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19972C5(Test_S19972C5, "S19972C5", ABISELECT(528,376));

#else // __cplusplus

extern void _ZN8S19972C5C1Ev();
extern void _ZN8S19972C5D1Ev();
Name_Map name_map_S19972C5[] = {
  NSPAIR(_ZN8S19972C5C1Ev),
  NSPAIR(_ZN8S19972C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S19972C6;
extern VTBL_ENTRY _ZTI8S19972C6[];
extern  VTBL_ENTRY _ZTV8S19972C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C6[];
static Base_Class bases_S19972C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(304,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19972C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19972C5[];
extern void _ZN8S19972C5D1Ev();
extern void _ZN8S19972C5D0Ev();
extern void _ZN8S19972C62v2Ev();
extern void _ZN8S19972C52v3Ev();
extern void _ZN8S19972C52v4Ev();
static  VTBL_ENTRY vtc_S19972C5[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C5[0]),
  (VTBL_ENTRY)&_ZN8S19972C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19972C5[];
extern void _ZN8S19972C6D1Ev();
extern void _ZN8S19972C6D0Ev();
extern void _ZN8S19972C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C6__8S19972C5[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C6[0]),
  (VTBL_ENTRY)&_ZN8S19972C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
};
static  VTT_ENTRY vtt_S19972C5[] = {
  {&(_ZTV8S19972C5[3]),  3,8},
  {&(_tg__ZTV8S19972C6__8S19972C5[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19972C5[];
extern  VTBL_ENTRY _ZTV8S19972C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C5[];
Class_Descriptor cd_S19972C5 = {  "S19972C5", // class name
  bases_S19972C5, 2,
  &(vtc_S19972C5[0]), // expected_vtbl_contents
  &(vtt_S19972C5[0]), // expected_vtt_contents
  ABISELECT(528,376), // object size
  NSPAIRA(_ZTI8S19972C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19972C5),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19972C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19972C4  : virtual S19972C5 {
  int s19972c4f0:26;
  char s19972c4f1[2];
  virtual  ~S19972C4(); // _ZN8S19972C4D2Ev
  virtual void  v5(); // _ZN8S19972C42v5Ev
  S19972C4(); // tgen
};
//SIG(-1 S19972C4) C1{ VBC2{ BC3{ VBC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 Fl[3] FL Fs Fi FL Fi} v3 v4 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v1 Fi:26 Fc[2]}


 S19972C4 ::~S19972C4(){ note_dtor("S19972C4", this);}
void  S19972C4 ::v5(){vfunc_called(this, "_ZN8S19972C42v5Ev");}
S19972C4 ::S19972C4(){ note_ctor("S19972C4", this);} // tgen

static void Test_S19972C4()
{
  extern Class_Descriptor cd_S19972C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(35,98)];
    init_test(&cd_S19972C4, buf);
    S19972C4 *dp, &lv = *(dp=new (buf) S19972C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,388), "sizeof(S19972C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19972C4)");
    check_base_class_offset(lv, (S20570C5*)(S19972C6*)(S19972C5*), ABISELECT(320,220), "S19972C4");
    check_base_class_offset(lv, (S19972C6*)(S19972C5*), ABISELECT(16,12), "S19972C4");
    check_base_class_offset(lv, (S19972C5*), ABISELECT(16,12), "S19972C4");
    set_bf_and_test(lv, s19972c4f0, ABISELECT(8,4), 0, 26, 1, "S19972C4");
    set_bf_and_test(lv, s19972c4f0, ABISELECT(8,4), 0, 26, hide_sll(1LL<<25), "S19972C4");
    check_field_offset(lv, s19972c4f1, ABISELECT(12,8), "S19972C4.s19972c4f1");
    test_class_info(&lv, &cd_S19972C4);
    dp->~S19972C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19972C4(Test_S19972C4, "S19972C4", ABISELECT(544,388));

#else // __cplusplus

extern void _ZN8S19972C4C1Ev();
extern void _ZN8S19972C4D2Ev();
Name_Map name_map_S19972C4[] = {
  NSPAIR(_ZN8S19972C4C1Ev),
  NSPAIR(_ZN8S19972C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S19972C6;
extern VTBL_ENTRY _ZTI8S19972C6[];
extern  VTBL_ENTRY _ZTV8S19972C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C6[];
extern Class_Descriptor cd_S19972C5;
extern VTBL_ENTRY _ZTI8S19972C5[];
extern  VTBL_ENTRY _ZTV8S19972C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C5[];
static Base_Class bases_S19972C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(320,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19972C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19972C5,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19972C4[];
extern void _ZN8S19972C4D1Ev();
extern void _ZN8S19972C4D0Ev();
extern void _ZN8S19972C42v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S19972C4D1Ev,_ZTv0_n16_N8S19972C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S19972C4D1Ev,_ZThn12_N8S19972C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19972C4D0Ev,_ZTv0_n16_N8S19972C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S19972C4D0Ev,_ZThn12_N8S19972C4D0Ev)() __attribute__((weak));
extern void _ZN8S19972C62v2Ev();
extern void _ZN8S19972C52v3Ev();
extern void _ZN8S19972C52v4Ev();
static  VTBL_ENTRY vtc_S19972C4[] = {
  ABISELECT(320,220),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C4[0]),
  (VTBL_ENTRY)&_ZN8S19972C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C42v5Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(304,208),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19972C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19972C4D1Ev,_ZTv0_n16_N8S19972C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19972C4D0Ev,_ZTv0_n16_N8S19972C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19972C4[];
extern void _ZN8S19972C5D1Ev();
extern void _ZN8S19972C5D0Ev();
extern void _ZN8S19972C62v2Ev();
extern void _ZN8S19972C52v3Ev();
extern void _ZN8S19972C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C5__8S19972C4[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C5[0]),
  (VTBL_ENTRY)&_ZN8S19972C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v4Ev,
};
extern void _ZN8S19972C6D1Ev();
extern void _ZN8S19972C6D0Ev();
extern void _ZN8S19972C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C68S19972C5__8S19972C4[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C6[0]),
  (VTBL_ENTRY)&_ZN8S19972C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
};
static  VTT_ENTRY vtt_S19972C4[] = {
  {&(_ZTV8S19972C4[4]),  4,19},
  {&(_ZTV8S19972C4[14]),  14,19},
  {&(_tg__ZTV8S19972C5__8S19972C4[3]),  3,8},
  {&(_tg__ZTV8S19972C68S19972C5__8S19972C4[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19972C4[];
extern  VTBL_ENTRY _ZTV8S19972C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C4[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19972C4D0Ev,_ZTv0_n16_N8S19972C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19972C4D0Ev,_ZThn12_N8S19972C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19972C4D1Ev,_ZTv0_n16_N8S19972C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19972C4D1Ev,_ZThn12_N8S19972C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19972C4 = {  "S19972C4", // class name
  bases_S19972C4, 3,
  &(vtc_S19972C4[0]), // expected_vtbl_contents
  &(vtt_S19972C4[0]), // expected_vtt_contents
  ABISELECT(544,388), // object size
  NSPAIRA(_ZTI8S19972C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19972C4),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19972C4),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19972C1  : virtual S19972C2 , virtual S19972C4 {
  int s19972c1f0[7];
  virtual  ~S19972C1(); // _ZN8S19972C1D2Ev
  S19972C1(); // tgen
};
//SIG(1 S19972C1) C1{ VBC2{ vd v1 FD Fi[2] Fc Fp FC3{ vd m Fp Fl Fi Fp} Fi Fp Fi[2]} VBC4{ VBC5{ BC6{ VBC7{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 Fl[3] FL Fs Fi FL Fi} v3 v4 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v5 Fi:26 Fc[2]} vd Fi[7]}


 S19972C1 ::~S19972C1(){ note_dtor("S19972C1", this);}
S19972C1 ::S19972C1(){ note_ctor("S19972C1", this);} // tgen

static void Test_S19972C1()
{
  extern Class_Descriptor cd_S19972C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,123)];
    init_test(&cd_S19972C1, buf);
    S19972C1 *dp, &lv = *(dp=new (buf) S19972C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,488), "sizeof(S19972C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19972C1)");
    check_base_class_offset(lv, (S19972C2*), ABISELECT(48,32), "S19972C1");
    check_base_class_offset(lv, (S20570C5*)(S19972C6*)(S19972C5*), ABISELECT(496,320), "S19972C1");
    check_base_class_offset(lv, (S19972C6*)(S19972C5*), ABISELECT(192,112), "S19972C1");
    check_base_class_offset(lv, (S19972C5*)(S19972C4*), ABISELECT(192,112), "S19972C1");
    check_base_class_offset(lv, (S19972C4*), ABISELECT(168,100), "S19972C1");
    check_field_offset(lv, s19972c1f0, ABISELECT(8,4), "S19972C1.s19972c1f0");
    test_class_info(&lv, &cd_S19972C1);
    dp->~S19972C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19972C1(Test_S19972C1, "S19972C1", ABISELECT(720,488));

#else // __cplusplus

extern void _ZN8S19972C1C1Ev();
extern void _ZN8S19972C1D2Ev();
Name_Map name_map_S19972C1[] = {
  NSPAIR(_ZN8S19972C1C1Ev),
  NSPAIR(_ZN8S19972C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19972C2;
extern VTBL_ENTRY _ZTI8S19972C2[];
extern  VTBL_ENTRY _ZTV8S19972C2[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S19972C6;
extern VTBL_ENTRY _ZTI8S19972C6[];
extern  VTBL_ENTRY _ZTV8S19972C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C6[];
extern Class_Descriptor cd_S19972C5;
extern VTBL_ENTRY _ZTI8S19972C5[];
extern  VTBL_ENTRY _ZTV8S19972C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C5[];
extern Class_Descriptor cd_S19972C4;
extern VTBL_ENTRY _ZTI8S19972C4[];
extern  VTBL_ENTRY _ZTV8S19972C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C4[];
static Base_Class bases_S19972C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19972C2,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(496,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19972C6,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19972C5,    ABISELECT(192,112), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19972C4,    ABISELECT(168,100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19972C1[];
extern void _ZN8S19972C1D1Ev();
extern void _ZN8S19972C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19972C1D1Ev,_ZTv0_n12_N8S19972C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19972C1D1Ev,_ZThn32_N8S19972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19972C1D0Ev,_ZTv0_n12_N8S19972C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19972C1D0Ev,_ZThn32_N8S19972C1D0Ev)() __attribute__((weak));
extern void _ZN8S19972C22v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19972C1D1Ev,_ZTv0_n20_N8S19972C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S19972C1D1Ev,_ZThn100_N8S19972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19972C1D0Ev,_ZTv0_n20_N8S19972C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S19972C1D0Ev,_ZThn100_N8S19972C1D0Ev)() __attribute__((weak));
extern void _ZN8S19972C42v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S19972C1D1Ev,_ZTv0_n16_N8S19972C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19972C1D1Ev,_ZThn112_N8S19972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19972C1D0Ev,_ZTv0_n16_N8S19972C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19972C1D0Ev,_ZThn112_N8S19972C1D0Ev)() __attribute__((weak));
extern void _ZN8S19972C62v2Ev();
extern void _ZN8S19972C52v3Ev();
extern void _ZN8S19972C52v4Ev();
static  VTBL_ENTRY vtc_S19972C1[] = {
  ABISELECT(496,320),
  ABISELECT(192,112),
  ABISELECT(168,100),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C1[0]),
  (VTBL_ENTRY)&_ZN8S19972C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C1D0Ev,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19972C1D1Ev,_ZTv0_n12_N8S19972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19972C1D0Ev,_ZTv0_n12_N8S19972C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19972C22v1Ev,
  0,
  ABISELECT(-168,-100),
  ABISELECT(328,220),
  ABISELECT(24,12),
  ABISELECT(-168,-100),
  (VTBL_ENTRY)&(_ZTI8S19972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19972C1D1Ev,_ZTv0_n20_N8S19972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19972C1D0Ev,_ZTv0_n20_N8S19972C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19972C42v5Ev,
  0,
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(304,208),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S19972C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19972C1D1Ev,_ZTv0_n16_N8S19972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19972C1D0Ev,_ZTv0_n16_N8S19972C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19972C1[];
extern void _ZN8S19972C4D1Ev();
extern void _ZN8S19972C4D0Ev();
extern void _ZN8S19972C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C4__8S19972C1[] = {
  ABISELECT(328,220),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C4[0]),
  (VTBL_ENTRY)&_ZN8S19972C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C42v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19972C4D1Ev,_ZTv0_n16_N8S19972C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19972C4D1Ev,_ZThn12_N8S19972C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19972C4D0Ev,_ZTv0_n16_N8S19972C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19972C4D0Ev,_ZThn12_N8S19972C4D0Ev)() __attribute__((weak));
extern void _ZN8S19972C62v2Ev();
extern void _ZN8S19972C52v3Ev();
extern void _ZN8S19972C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C5__8S19972C4__8S19972C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(304,208),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19972C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19972C4D1Ev,_ZTv0_n16_N8S19972C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19972C4D0Ev,_ZTv0_n16_N8S19972C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v4Ev,
};
extern void _ZN8S19972C5D1Ev();
extern void _ZN8S19972C5D0Ev();
extern void _ZN8S19972C62v2Ev();
extern void _ZN8S19972C52v3Ev();
extern void _ZN8S19972C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C5__8S19972C1[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C5[0]),
  (VTBL_ENTRY)&_ZN8S19972C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19972C52v4Ev,
};
extern void _ZN8S19972C6D1Ev();
extern void _ZN8S19972C6D0Ev();
extern void _ZN8S19972C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19972C68S19972C5__8S19972C1[] = {
  ABISELECT(304,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19972C6[0]),
  (VTBL_ENTRY)&_ZN8S19972C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19972C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19972C62v2Ev,
};
static  VTT_ENTRY vtt_S19972C1[] = {
  {&(_ZTV8S19972C1[6]),  6,36},
  {&(_ZTV8S19972C1[12]),  12,36},
  {&(_ZTV8S19972C1[21]),  21,36},
  {&(_ZTV8S19972C1[31]),  31,36},
  {&(_tg__ZTV8S19972C4__8S19972C1[4]),  4,7},
  {&(_tg__ZTV8S19972C5__8S19972C4__8S19972C1[7]),  7,12},
  {&(_tg__ZTV8S19972C5__8S19972C1[3]),  3,8},
  {&(_tg__ZTV8S19972C68S19972C5__8S19972C1[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19972C1[];
extern  VTBL_ENTRY _ZTV8S19972C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19972C1[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19972C4D0Ev,_ZTv0_n16_N8S19972C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19972C4D0Ev,_ZThn12_N8S19972C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19972C4D1Ev,_ZTv0_n16_N8S19972C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19972C4D1Ev,_ZThn12_N8S19972C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19972C1D0Ev,_ZTv0_n16_N8S19972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19972C1D0Ev,_ZThn112_N8S19972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19972C1D1Ev,_ZTv0_n16_N8S19972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19972C1D1Ev,_ZThn112_N8S19972C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19972C1D0Ev,_ZTv0_n20_N8S19972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19972C1D0Ev,_ZThn100_N8S19972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19972C1D1Ev,_ZTv0_n20_N8S19972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19972C1D1Ev,_ZThn100_N8S19972C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19972C1D0Ev,_ZTv0_n12_N8S19972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19972C1D0Ev,_ZThn32_N8S19972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19972C1D1Ev,_ZTv0_n12_N8S19972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19972C1D1Ev,_ZThn32_N8S19972C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19972C1 = {  "S19972C1", // class name
  bases_S19972C1, 5,
  &(vtc_S19972C1[0]), // expected_vtbl_contents
  &(vtt_S19972C1[0]), // expected_vtt_contents
  ABISELECT(720,488), // object size
  NSPAIRA(_ZTI8S19972C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19972C1),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19972C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19973C2  {
  long double s19973c2f0;
  int s19973c2f1[2];
  char s19973c2f2;
  void *s19973c2f3;
  ::S20570C17 s19973c2f4;
  int s19973c2f5;
  void *s19973c2f6;
  int s19973c2f7[2];
  virtual  ~S19973C2(); // _ZN8S19973C2D1Ev
  virtual void  v1(); // _ZN8S19973C22v1Ev
  S19973C2(); // tgen
};
//SIG(-1 S19973C2) C1{ vd v1 FD Fi[2] Fc Fp FC2{ vd m Fp Fl Fi Fp} Fi Fp Fi[2]}


 S19973C2 ::~S19973C2(){ note_dtor("S19973C2", this);}
void  S19973C2 ::v1(){vfunc_called(this, "_ZN8S19973C22v1Ev");}
S19973C2 ::S19973C2(){ note_ctor("S19973C2", this);} // tgen

static void Test_S19973C2()
{
  extern Class_Descriptor cd_S19973C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S19973C2, buf);
    S19973C2 *dp, &lv = *(dp=new (buf) S19973C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S19973C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19973C2)");
    check_field_offset(lv, s19973c2f0, ABISELECT(16,4), "S19973C2.s19973c2f0");
    check_field_offset(lv, s19973c2f1, ABISELECT(32,16), "S19973C2.s19973c2f1");
    check_field_offset(lv, s19973c2f2, ABISELECT(40,24), "S19973C2.s19973c2f2");
    check_field_offset(lv, s19973c2f3, ABISELECT(48,28), "S19973C2.s19973c2f3");
    check_field_offset(lv, s19973c2f4, ABISELECT(56,32), "S19973C2.s19973c2f4");
    check_field_offset(lv, s19973c2f5, ABISELECT(96,52), "S19973C2.s19973c2f5");
    check_field_offset(lv, s19973c2f6, ABISELECT(104,56), "S19973C2.s19973c2f6");
    check_field_offset(lv, s19973c2f7, ABISELECT(112,60), "S19973C2.s19973c2f7");
    test_class_info(&lv, &cd_S19973C2);
    dp->~S19973C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19973C2(Test_S19973C2, "S19973C2", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S19973C2C1Ev();
extern void _ZN8S19973C2D1Ev();
Name_Map name_map_S19973C2[] = {
  NSPAIR(_ZN8S19973C2C1Ev),
  NSPAIR(_ZN8S19973C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19973C2[];
extern void _ZN8S19973C2D1Ev();
extern void _ZN8S19973C2D0Ev();
extern void _ZN8S19973C22v1Ev();
static  VTBL_ENTRY vtc_S19973C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C2[0]),
  (VTBL_ENTRY)&_ZN8S19973C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19973C2[];
extern  VTBL_ENTRY _ZTV8S19973C2[];
Class_Descriptor cd_S19973C2 = {  "S19973C2", // class name
  0,0,//no base classes
  &(vtc_S19973C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S19973C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19973C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19973C6  : virtual S20570C5 {
  __tsi64 s19973c6f0[4];
  short s19973c6f1;
  int s19973c6f2;
  __tsi64 s19973c6f3;
  int s19973c6f4;
  virtual  ~S19973C6(); // _ZN8S19973C6D2Ev
  virtual void  v2(); // _ZN8S19973C62v2Ev
  S19973C6(); // tgen
};
//SIG(-1 S19973C6) C1{ VBC2{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v1 FL[4] Fs Fi FL Fi}


 S19973C6 ::~S19973C6(){ note_dtor("S19973C6", this);}
void  S19973C6 ::v2(){vfunc_called(this, "_ZN8S19973C62v2Ev");}
S19973C6 ::S19973C6(){ note_ctor("S19973C6", this);} // tgen

static void Test_S19973C6()
{
  extern Class_Descriptor cd_S19973C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,57)];
    init_test(&cd_S19973C6, buf);
    S19973C6 *dp, &lv = *(dp=new (buf) S19973C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,224), "sizeof(S19973C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19973C6)");
    check_base_class_offset(lv, (S20570C5*), ABISELECT(64,56), "S19973C6");
    check_field_offset(lv, s19973c6f0, ABISELECT(8,4), "S19973C6.s19973c6f0");
    check_field_offset(lv, s19973c6f1, ABISELECT(40,36), "S19973C6.s19973c6f1");
    check_field_offset(lv, s19973c6f2, ABISELECT(44,40), "S19973C6.s19973c6f2");
    check_field_offset(lv, s19973c6f3, ABISELECT(48,44), "S19973C6.s19973c6f3");
    check_field_offset(lv, s19973c6f4, ABISELECT(56,52), "S19973C6.s19973c6f4");
    test_class_info(&lv, &cd_S19973C6);
    dp->~S19973C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19973C6(Test_S19973C6, "S19973C6", ABISELECT(288,224));

#else // __cplusplus

extern void _ZN8S19973C6C1Ev();
extern void _ZN8S19973C6D2Ev();
Name_Map name_map_S19973C6[] = {
  NSPAIR(_ZN8S19973C6C1Ev),
  NSPAIR(_ZN8S19973C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
static Base_Class bases_S19973C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(64,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19973C6[];
extern void _ZN8S19973C6D1Ev();
extern void _ZN8S19973C6D0Ev();
extern void _ZN8S19973C62v2Ev();
static  VTBL_ENTRY vtc_S19973C6[] = {
  ABISELECT(64,56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C6[0]),
  (VTBL_ENTRY)&_ZN8S19973C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S19973C6[];
static  VTT_ENTRY vtt_S19973C6[] = {
  {&(_ZTV8S19973C6[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19973C6[];
extern  VTBL_ENTRY _ZTV8S19973C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C6[];
Class_Descriptor cd_S19973C6 = {  "S19973C6", // class name
  bases_S19973C6, 1,
  &(vtc_S19973C6[0]), // expected_vtbl_contents
  &(vtt_S19973C6[0]), // expected_vtt_contents
  ABISELECT(288,224), // object size
  NSPAIRA(_ZTI8S19973C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19973C6),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19973C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19973C5  : S19973C6 {
  int s19973c5f0;
  void *s19973c5f1;
  int s19973c5f2;
  long double s19973c5f3[9];
  long s19973c5f4;
  int s19973c5f5;
  __tsi64 s19973c5f6;
  void *s19973c5f7[5];
  __tsi64 s19973c5f8;
  virtual void  v3(); // _ZN8S19973C52v3Ev
  virtual void  v4(); // _ZN8S19973C52v4Ev
  ~S19973C5(); // tgen
  S19973C5(); // tgen
};
//SIG(-1 S19973C5) C1{ BC2{ VBC3{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v3 FL[4] Fs Fi FL Fi} v1 v2 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL}


void  S19973C5 ::v3(){vfunc_called(this, "_ZN8S19973C52v3Ev");}
void  S19973C5 ::v4(){vfunc_called(this, "_ZN8S19973C52v4Ev");}
S19973C5 ::~S19973C5(){ note_dtor("S19973C5", this);} // tgen
S19973C5 ::S19973C5(){ note_ctor("S19973C5", this);} // tgen

static void Test_S19973C5()
{
  extern Class_Descriptor cd_S19973C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,98)];
    init_test(&cd_S19973C5, buf);
    S19973C5 *dp, &lv = *(dp=new (buf) S19973C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,388), "sizeof(S19973C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19973C5)");
    check_base_class_offset(lv, (S20570C5*)(S19973C6*), ABISELECT(304,220), "S19973C5");
    check_base_class_offset(lv, (S19973C6*), 0, "S19973C5");
    check_field_offset(lv, s19973c5f0, ABISELECT(60,56), "S19973C5.s19973c5f0");
    check_field_offset(lv, s19973c5f1, ABISELECT(64,60), "S19973C5.s19973c5f1");
    check_field_offset(lv, s19973c5f2, ABISELECT(72,64), "S19973C5.s19973c5f2");
    check_field_offset(lv, s19973c5f3, ABISELECT(80,68), "S19973C5.s19973c5f3");
    check_field_offset(lv, s19973c5f4, ABISELECT(224,176), "S19973C5.s19973c5f4");
    check_field_offset(lv, s19973c5f5, ABISELECT(232,180), "S19973C5.s19973c5f5");
    check_field_offset(lv, s19973c5f6, ABISELECT(240,184), "S19973C5.s19973c5f6");
    check_field_offset(lv, s19973c5f7, ABISELECT(248,192), "S19973C5.s19973c5f7");
    check_field_offset(lv, s19973c5f8, ABISELECT(288,212), "S19973C5.s19973c5f8");
    test_class_info(&lv, &cd_S19973C5);
    dp->~S19973C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19973C5(Test_S19973C5, "S19973C5", ABISELECT(528,388));

#else // __cplusplus

extern void _ZN8S19973C5C1Ev();
extern void _ZN8S19973C5D1Ev();
Name_Map name_map_S19973C5[] = {
  NSPAIR(_ZN8S19973C5C1Ev),
  NSPAIR(_ZN8S19973C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S19973C6;
extern VTBL_ENTRY _ZTI8S19973C6[];
extern  VTBL_ENTRY _ZTV8S19973C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C6[];
static Base_Class bases_S19973C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(304,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19973C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19973C5[];
extern void _ZN8S19973C5D1Ev();
extern void _ZN8S19973C5D0Ev();
extern void _ZN8S19973C62v2Ev();
extern void _ZN8S19973C52v3Ev();
extern void _ZN8S19973C52v4Ev();
static  VTBL_ENTRY vtc_S19973C5[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C5[0]),
  (VTBL_ENTRY)&_ZN8S19973C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19973C5[];
extern void _ZN8S19973C6D1Ev();
extern void _ZN8S19973C6D0Ev();
extern void _ZN8S19973C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C6__8S19973C5[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C6[0]),
  (VTBL_ENTRY)&_ZN8S19973C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
};
static  VTT_ENTRY vtt_S19973C5[] = {
  {&(_ZTV8S19973C5[3]),  3,8},
  {&(_tg__ZTV8S19973C6__8S19973C5[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19973C5[];
extern  VTBL_ENTRY _ZTV8S19973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C5[];
Class_Descriptor cd_S19973C5 = {  "S19973C5", // class name
  bases_S19973C5, 2,
  &(vtc_S19973C5[0]), // expected_vtbl_contents
  &(vtt_S19973C5[0]), // expected_vtt_contents
  ABISELECT(528,388), // object size
  NSPAIRA(_ZTI8S19973C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19973C5),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19973C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19973C4  : virtual S19973C5 {
  int s19973c4f0:26;
  char s19973c4f1[2];
  virtual  ~S19973C4(); // _ZN8S19973C4D2Ev
  virtual void  v5(); // _ZN8S19973C42v5Ev
  S19973C4(); // tgen
};
//SIG(-1 S19973C4) C1{ VBC2{ BC3{ VBC4{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FL[4] Fs Fi FL Fi} v3 v4 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v1 Fi:26 Fc[2]}


 S19973C4 ::~S19973C4(){ note_dtor("S19973C4", this);}
void  S19973C4 ::v5(){vfunc_called(this, "_ZN8S19973C42v5Ev");}
S19973C4 ::S19973C4(){ note_ctor("S19973C4", this);} // tgen

static void Test_S19973C4()
{
  extern Class_Descriptor cd_S19973C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(35,101)];
    init_test(&cd_S19973C4, buf);
    S19973C4 *dp, &lv = *(dp=new (buf) S19973C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(544,400), "sizeof(S19973C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19973C4)");
    check_base_class_offset(lv, (S20570C5*)(S19973C6*)(S19973C5*), ABISELECT(320,232), "S19973C4");
    check_base_class_offset(lv, (S19973C6*)(S19973C5*), ABISELECT(16,12), "S19973C4");
    check_base_class_offset(lv, (S19973C5*), ABISELECT(16,12), "S19973C4");
    set_bf_and_test(lv, s19973c4f0, ABISELECT(8,4), 0, 26, 1, "S19973C4");
    set_bf_and_test(lv, s19973c4f0, ABISELECT(8,4), 0, 26, hide_sll(1LL<<25), "S19973C4");
    check_field_offset(lv, s19973c4f1, ABISELECT(12,8), "S19973C4.s19973c4f1");
    test_class_info(&lv, &cd_S19973C4);
    dp->~S19973C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19973C4(Test_S19973C4, "S19973C4", ABISELECT(544,400));

#else // __cplusplus

extern void _ZN8S19973C4C1Ev();
extern void _ZN8S19973C4D2Ev();
Name_Map name_map_S19973C4[] = {
  NSPAIR(_ZN8S19973C4C1Ev),
  NSPAIR(_ZN8S19973C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S19973C6;
extern VTBL_ENTRY _ZTI8S19973C6[];
extern  VTBL_ENTRY _ZTV8S19973C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C6[];
extern Class_Descriptor cd_S19973C5;
extern VTBL_ENTRY _ZTI8S19973C5[];
extern  VTBL_ENTRY _ZTV8S19973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C5[];
static Base_Class bases_S19973C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20570C5,    ABISELECT(320,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19973C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19973C5,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19973C4[];
extern void _ZN8S19973C4D1Ev();
extern void _ZN8S19973C4D0Ev();
extern void _ZN8S19973C42v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S19973C4D1Ev,_ZTv0_n16_N8S19973C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S19973C4D1Ev,_ZThn12_N8S19973C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19973C4D0Ev,_ZTv0_n16_N8S19973C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S19973C4D0Ev,_ZThn12_N8S19973C4D0Ev)() __attribute__((weak));
extern void _ZN8S19973C62v2Ev();
extern void _ZN8S19973C52v3Ev();
extern void _ZN8S19973C52v4Ev();
static  VTBL_ENTRY vtc_S19973C4[] = {
  ABISELECT(320,232),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C4[0]),
  (VTBL_ENTRY)&_ZN8S19973C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C42v5Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(304,220),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19973C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19973C4D1Ev,_ZTv0_n16_N8S19973C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19973C4D0Ev,_ZTv0_n16_N8S19973C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19973C4[];
extern void _ZN8S19973C5D1Ev();
extern void _ZN8S19973C5D0Ev();
extern void _ZN8S19973C62v2Ev();
extern void _ZN8S19973C52v3Ev();
extern void _ZN8S19973C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C5__8S19973C4[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C5[0]),
  (VTBL_ENTRY)&_ZN8S19973C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v4Ev,
};
extern void _ZN8S19973C6D1Ev();
extern void _ZN8S19973C6D0Ev();
extern void _ZN8S19973C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C68S19973C5__8S19973C4[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C6[0]),
  (VTBL_ENTRY)&_ZN8S19973C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
};
static  VTT_ENTRY vtt_S19973C4[] = {
  {&(_ZTV8S19973C4[4]),  4,19},
  {&(_ZTV8S19973C4[14]),  14,19},
  {&(_tg__ZTV8S19973C5__8S19973C4[3]),  3,8},
  {&(_tg__ZTV8S19973C68S19973C5__8S19973C4[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19973C4[];
extern  VTBL_ENTRY _ZTV8S19973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C4[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19973C4D0Ev,_ZTv0_n16_N8S19973C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19973C4D0Ev,_ZThn12_N8S19973C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19973C4D1Ev,_ZTv0_n16_N8S19973C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19973C4D1Ev,_ZThn12_N8S19973C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19973C4 = {  "S19973C4", // class name
  bases_S19973C4, 3,
  &(vtc_S19973C4[0]), // expected_vtbl_contents
  &(vtt_S19973C4[0]), // expected_vtt_contents
  ABISELECT(544,400), // object size
  NSPAIRA(_ZTI8S19973C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19973C4),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19973C4),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19973C1  : virtual S19973C2 , virtual S19973C4 {
  int s19973c1f0[7];
  virtual  ~S19973C1(); // _ZN8S19973C1D2Ev
  S19973C1(); // tgen
};
//SIG(1 S19973C1) C1{ VBC2{ vd v1 FD Fi[2] Fc Fp FC3{ vd m Fp Fl Fi Fp} Fi Fp Fi[2]} VBC4{ VBC5{ BC6{ VBC7{ m Fc Fp Fi FL Fi[7] Fs:3 FL FD[9]} vd v2 FL[4] Fs Fi FL Fi} v3 v4 Fi Fp Fi FD[9] Fl Fi FL Fp[5] FL} vd v5 Fi:26 Fc[2]} vd Fi[7]}


 S19973C1 ::~S19973C1(){ note_dtor("S19973C1", this);}
S19973C1 ::S19973C1(){ note_ctor("S19973C1", this);} // tgen

static void Test_S19973C1()
{
  extern Class_Descriptor cd_S19973C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,126)];
    init_test(&cd_S19973C1, buf);
    S19973C1 *dp, &lv = *(dp=new (buf) S19973C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,500), "sizeof(S19973C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19973C1)");
    check_base_class_offset(lv, (S19973C2*), ABISELECT(48,32), "S19973C1");
    check_base_class_offset(lv, (S20570C5*)(S19973C6*)(S19973C5*), ABISELECT(496,332), "S19973C1");
    check_base_class_offset(lv, (S19973C6*)(S19973C5*), ABISELECT(192,112), "S19973C1");
    check_base_class_offset(lv, (S19973C5*)(S19973C4*), ABISELECT(192,112), "S19973C1");
    check_base_class_offset(lv, (S19973C4*), ABISELECT(168,100), "S19973C1");
    check_field_offset(lv, s19973c1f0, ABISELECT(8,4), "S19973C1.s19973c1f0");
    test_class_info(&lv, &cd_S19973C1);
    dp->~S19973C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19973C1(Test_S19973C1, "S19973C1", ABISELECT(720,500));

#else // __cplusplus

extern void _ZN8S19973C1C1Ev();
extern void _ZN8S19973C1D2Ev();
Name_Map name_map_S19973C1[] = {
  NSPAIR(_ZN8S19973C1C1Ev),
  NSPAIR(_ZN8S19973C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19973C2;
extern VTBL_ENTRY _ZTI8S19973C2[];
extern  VTBL_ENTRY _ZTV8S19973C2[];
extern Class_Descriptor cd_S20570C5;
extern VTBL_ENTRY _ZTI8S20570C5[];
extern Class_Descriptor cd_S19973C6;
extern VTBL_ENTRY _ZTI8S19973C6[];
extern  VTBL_ENTRY _ZTV8S19973C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C6[];
extern Class_Descriptor cd_S19973C5;
extern VTBL_ENTRY _ZTI8S19973C5[];
extern  VTBL_ENTRY _ZTV8S19973C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C5[];
extern Class_Descriptor cd_S19973C4;
extern VTBL_ENTRY _ZTI8S19973C4[];
extern  VTBL_ENTRY _ZTV8S19973C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C4[];
static Base_Class bases_S19973C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19973C2,    ABISELECT(48,32), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20570C5,    ABISELECT(496,332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19973C6,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19973C5,    ABISELECT(192,112), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19973C4,    ABISELECT(168,100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19973C1[];
extern void _ZN8S19973C1D1Ev();
extern void _ZN8S19973C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19973C1D1Ev,_ZTv0_n12_N8S19973C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19973C1D1Ev,_ZThn32_N8S19973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19973C1D0Ev,_ZTv0_n12_N8S19973C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19973C1D0Ev,_ZThn32_N8S19973C1D0Ev)() __attribute__((weak));
extern void _ZN8S19973C22v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S19973C1D1Ev,_ZTv0_n20_N8S19973C1D1Ev)();
extern void ABISELECT(_ZThn168_N8S19973C1D1Ev,_ZThn100_N8S19973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19973C1D0Ev,_ZTv0_n20_N8S19973C1D0Ev)();
extern void ABISELECT(_ZThn168_N8S19973C1D0Ev,_ZThn100_N8S19973C1D0Ev)() __attribute__((weak));
extern void _ZN8S19973C42v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S19973C1D1Ev,_ZTv0_n16_N8S19973C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S19973C1D1Ev,_ZThn112_N8S19973C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19973C1D0Ev,_ZTv0_n16_N8S19973C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S19973C1D0Ev,_ZThn112_N8S19973C1D0Ev)() __attribute__((weak));
extern void _ZN8S19973C62v2Ev();
extern void _ZN8S19973C52v3Ev();
extern void _ZN8S19973C52v4Ev();
static  VTBL_ENTRY vtc_S19973C1[] = {
  ABISELECT(496,332),
  ABISELECT(192,112),
  ABISELECT(168,100),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C1[0]),
  (VTBL_ENTRY)&_ZN8S19973C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C1D0Ev,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19973C1D1Ev,_ZTv0_n12_N8S19973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19973C1D0Ev,_ZTv0_n12_N8S19973C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19973C22v1Ev,
  0,
  ABISELECT(-168,-100),
  ABISELECT(328,232),
  ABISELECT(24,12),
  ABISELECT(-168,-100),
  (VTBL_ENTRY)&(_ZTI8S19973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19973C1D1Ev,_ZTv0_n20_N8S19973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19973C1D0Ev,_ZTv0_n20_N8S19973C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19973C42v5Ev,
  0,
  0,
  0,
  ABISELECT(-192,-112),
  ABISELECT(304,220),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S19973C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19973C1D1Ev,_ZTv0_n16_N8S19973C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19973C1D0Ev,_ZTv0_n16_N8S19973C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19973C1[];
extern void _ZN8S19973C4D1Ev();
extern void _ZN8S19973C4D0Ev();
extern void _ZN8S19973C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C4__8S19973C1[] = {
  ABISELECT(328,232),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C4[0]),
  (VTBL_ENTRY)&_ZN8S19973C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C42v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19973C4D1Ev,_ZTv0_n16_N8S19973C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19973C4D1Ev,_ZThn12_N8S19973C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19973C4D0Ev,_ZTv0_n16_N8S19973C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19973C4D0Ev,_ZThn12_N8S19973C4D0Ev)() __attribute__((weak));
extern void _ZN8S19973C62v2Ev();
extern void _ZN8S19973C52v3Ev();
extern void _ZN8S19973C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C5__8S19973C4__8S19973C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(304,220),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19973C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19973C4D1Ev,_ZTv0_n16_N8S19973C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19973C4D0Ev,_ZTv0_n16_N8S19973C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v4Ev,
};
extern void _ZN8S19973C5D1Ev();
extern void _ZN8S19973C5D0Ev();
extern void _ZN8S19973C62v2Ev();
extern void _ZN8S19973C52v3Ev();
extern void _ZN8S19973C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C5__8S19973C1[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C5[0]),
  (VTBL_ENTRY)&_ZN8S19973C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19973C52v4Ev,
};
extern void _ZN8S19973C6D1Ev();
extern void _ZN8S19973C6D0Ev();
extern void _ZN8S19973C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19973C68S19973C5__8S19973C1[] = {
  ABISELECT(304,220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19973C6[0]),
  (VTBL_ENTRY)&_ZN8S19973C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19973C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19973C62v2Ev,
};
static  VTT_ENTRY vtt_S19973C1[] = {
  {&(_ZTV8S19973C1[6]),  6,36},
  {&(_ZTV8S19973C1[12]),  12,36},
  {&(_ZTV8S19973C1[21]),  21,36},
  {&(_ZTV8S19973C1[31]),  31,36},
  {&(_tg__ZTV8S19973C4__8S19973C1[4]),  4,7},
  {&(_tg__ZTV8S19973C5__8S19973C4__8S19973C1[7]),  7,12},
  {&(_tg__ZTV8S19973C5__8S19973C1[3]),  3,8},
  {&(_tg__ZTV8S19973C68S19973C5__8S19973C1[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19973C1[];
extern  VTBL_ENTRY _ZTV8S19973C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19973C1[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19973C4D0Ev,_ZTv0_n16_N8S19973C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19973C4D0Ev,_ZThn12_N8S19973C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19973C4D1Ev,_ZTv0_n16_N8S19973C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19973C4D1Ev,_ZThn12_N8S19973C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19973C1D0Ev,_ZTv0_n16_N8S19973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19973C1D0Ev,_ZThn112_N8S19973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19973C1D1Ev,_ZTv0_n16_N8S19973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S19973C1D1Ev,_ZThn112_N8S19973C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19973C1D0Ev,_ZTv0_n20_N8S19973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19973C1D0Ev,_ZThn100_N8S19973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19973C1D1Ev,_ZTv0_n20_N8S19973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S19973C1D1Ev,_ZThn100_N8S19973C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19973C1D0Ev,_ZTv0_n12_N8S19973C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19973C1D0Ev,_ZThn32_N8S19973C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19973C1D1Ev,_ZTv0_n12_N8S19973C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19973C1D1Ev,_ZThn32_N8S19973C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19973C1 = {  "S19973C1", // class name
  bases_S19973C1, 5,
  &(vtc_S19973C1[0]), // expected_vtbl_contents
  &(vtt_S19973C1[0]), // expected_vtt_contents
  ABISELECT(720,500), // object size
  NSPAIRA(_ZTI8S19973C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19973C1),36, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19973C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C5  : S5217C60_nt {
  void *s7823c5f0[2];
};
//SIG(-1 S7823C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S7823C5()
{
  extern Class_Descriptor cd_S7823C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7823C5, buf);
    S7823C5 &lv = *(new (buf) S7823C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7823C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S7823C5");
    check_field_offset(lv, s7823c5f0, ABISELECT(8,4), "S7823C5.s7823c5f0");
    test_class_info(&lv, &cd_S7823C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C5(Test_S7823C5, "S7823C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S7823C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7823C5[];
Class_Descriptor cd_S7823C5 = {  "S7823C5", // class name
  bases_S7823C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7823C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C7  : virtual S5217C60_nt , virtual S7823C5 {
  virtual  ~S7823C7(); // _ZN7S7823C7D2Ev
  S7823C7(); // tgen
};
//SIG(-1 S7823C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S7823C7 ::~S7823C7(){ note_dtor("S7823C7", this);}
S7823C7 ::S7823C7(){ note_ctor("S7823C7", this);} // tgen

static void Test_S7823C7()
{
  extern Class_Descriptor cd_S7823C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7823C7, buf);
    S7823C7 *dp, &lv = *(dp=new (buf) S7823C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7823C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C7)");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7823C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(16,8), "S7823C7");
    check_base_class_offset(lv, (S7823C5*), ABISELECT(16,8), "S7823C7");
    test_class_info(&lv, &cd_S7823C7);
    dp->~S7823C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C7(Test_S7823C7, "S7823C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7823C7C1Ev();
extern void _ZN7S7823C7D2Ev();
Name_Map name_map_S7823C7[] = {
  NSPAIR(_ZN7S7823C7C1Ev),
  NSPAIR(_ZN7S7823C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
static Base_Class bases_S7823C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7823C7[];
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY vtc_S7823C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S7823C7[];
static  VTT_ENTRY vtt_S7823C7[] = {
  {&(_ZTV7S7823C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
Class_Descriptor cd_S7823C7 = {  "S7823C7", // class name
  bases_S7823C7, 3,
  &(vtc_S7823C7[0]), // expected_vtbl_contents
  &(vtt_S7823C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7823C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7823C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7823C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C4  : virtual S7823C5 , virtual S5217C60_nt , virtual S7823C7 , virtual S2265C38 {
  int s7823c4f0[9];
  virtual  ~S7823C4(); // _ZN7S7823C4D2Ev
  S7823C4(); // tgen
};
//SIG(-1 S7823C4) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S7823C4 ::~S7823C4(){ note_dtor("S7823C4", this);}
S7823C4 ::S7823C4(){ note_ctor("S7823C4", this);} // tgen

static void Test_S7823C4()
{
  extern Class_Descriptor cd_S7823C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S7823C4, buf);
    S7823C4 *dp, &lv = *(dp=new (buf) S7823C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7823C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C4)");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(48,40), "S7823C4");
    check_base_class_offset(lv, (S7823C5*), ABISELECT(48,40), "S7823C4");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(48,40), "S7823C4");
    /*is_ambiguous_... S7823C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S7823C4");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(72,52), "S7823C4");
    check_base_class_offset(lv, (S7823C7*), 0, "S7823C4");
    check_base_class_offset(lv, (S2265C38*), 0, "S7823C4");
    check_field_offset(lv, s7823c4f0, ABISELECT(8,4), "S7823C4.s7823c4f0");
    test_class_info(&lv, &cd_S7823C4);
    dp->~S7823C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C4(Test_S7823C4, "S7823C4", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S7823C4C1Ev();
extern void _ZN7S7823C4D2Ev();
Name_Map name_map_S7823C4[] = {
  NSPAIR(_ZN7S7823C4C1Ev),
  NSPAIR(_ZN7S7823C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7823C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7823C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7823C4[];
extern void _ZN7S7823C4D1Ev();
extern void _ZN7S7823C4D0Ev();
static  VTBL_ENTRY vtc_S7823C4[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&_ZN7S7823C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7823C4[];
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
static  VTT_ENTRY vtt_S7823C4[] = {
  {&(_ZTV7S7823C4[7]),  7,9},
  {&(_ZTV7S7823C4[7]),  7,9},
  {&(_tg__ZTV7S7823C7__7S7823C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7823C4[];
extern  VTBL_ENTRY _ZTV7S7823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C4[];
Class_Descriptor cd_S7823C4 = {  "S7823C4", // class name
  bases_S7823C4, 5,
  &(vtc_S7823C4[0]), // expected_vtbl_contents
  &(vtt_S7823C4[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S7823C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7823C4),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7823C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C3  : virtual S7823C4 , S2265C38 , virtual S2265C28 {
  void *s7823c3f0;
  ~S7823C3(); // tgen
  S7823C3(); // tgen
};
//SIG(-1 S7823C3) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S7823C3 ::~S7823C3(){ note_dtor("S7823C3", this);} // tgen
S7823C3 ::S7823C3(){ note_ctor("S7823C3", this);} // tgen

static void Test_S7823C3()
{
  extern Class_Descriptor cd_S7823C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S7823C3, buf);
    S7823C3 *dp, &lv = *(dp=new (buf) S7823C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S7823C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C3)");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(64,48), "S7823C3");
    check_base_class_offset(lv, (S7823C5*)(S7823C4*), ABISELECT(64,48), "S7823C3");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(64,48), "S7823C3");
    /*is_ambiguous_... S7823C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C4*), ABISELECT(88,60), "S7823C3");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(88,60), "S7823C3");
    check_base_class_offset(lv, (S7823C7*)(S7823C4*), 0, "S7823C3");
    check_base_class_offset(lv, (S2265C38*)(S7823C4*), ABISELECT(96,64), "S7823C3");
    check_base_class_offset(lv, (S7823C4*), ABISELECT(16,8), "S7823C3");
    /*is_ambiguous_... S7823C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S7823C3");
    check_base_class_offset(lv, (S2265C28*), 0, "S7823C3");
    check_field_offset(lv, s7823c3f0, ABISELECT(8,4), "S7823C3.s7823c3f0");
    test_class_info(&lv, &cd_S7823C3);
    dp->~S7823C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C3(Test_S7823C3, "S7823C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S7823C3C1Ev();
extern void _ZN7S7823C3D1Ev();
Name_Map name_map_S7823C3[] = {
  NSPAIR(_ZN7S7823C3C1Ev),
  NSPAIR(_ZN7S7823C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C4;
extern VTBL_ENTRY _ZTI7S7823C4[];
extern  VTBL_ENTRY _ZTV7S7823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S7823C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7823C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7823C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7823C3[];
extern void _ZN7S7823C3D1Ev();
extern void _ZN7S7823C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7823C3D1Ev,_ZThn8_N7S7823C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7823C3D0Ev,_ZThn8_N7S7823C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7823C3[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C3[0]),
  (VTBL_ENTRY)&_ZN7S7823C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C3D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7823C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S7823C3[];
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void _ZN7S7823C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
extern void _ZN7S7823C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__7S7823C3[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C4__7S7823C3[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C3[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
static  VTT_ENTRY vtt_S7823C3[] = {
  {&(_ZTV7S7823C3[9]),  9,20},
  {&(_ZTV7S7823C3[18]),  18,20},
  {&(_ZTV7S7823C3[9]),  9,20},
  {&(_tg__ZTV7S7823C4__7S7823C3[7]),  7,9},
  {&(_tg__ZTV7S7823C7__7S7823C4__7S7823C3[5]),  5,7},
  {&(_tg__ZTV7S7823C7__7S7823C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7823C3[];
extern  VTBL_ENTRY _ZTV7S7823C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C3[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7823C3D0Ev,_ZThn8_N7S7823C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7823C3D1Ev,_ZThn8_N7S7823C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7823C3 = {  "S7823C3", // class name
  bases_S7823C3, 8,
  &(vtc_S7823C3[0]), // expected_vtbl_contents
  &(vtt_S7823C3[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S7823C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7823C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7823C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C12  : S5217C60_nt , S7823C5 {
};
//SIG(-1 S7823C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S7823C12()
{
  extern Class_Descriptor cd_S7823C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7823C12, buf);
    S7823C12 &lv = *(new (buf) S7823C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7823C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C12)");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S7823C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(8,4), "S7823C12");
    check_base_class_offset(lv, (S7823C5*), ABISELECT(8,4), "S7823C12");
    test_class_info(&lv, &cd_S7823C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C12(Test_S7823C12, "S7823C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
static Base_Class bases_S7823C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7823C12[];
Class_Descriptor cd_S7823C12 = {  "S7823C12", // class name
  bases_S7823C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7823C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C11  : virtual S5217C60_nt , S2265C38 , virtual S7823C12 , virtual S7823C7 {
  ~S7823C11(); // tgen
  S7823C11(); // tgen
};
//SIG(-1 S7823C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S7823C11 ::~S7823C11(){ note_dtor("S7823C11", this);} // tgen
S7823C11 ::S7823C11(){ note_ctor("S7823C11", this);} // tgen

static void Test_S7823C11()
{
  extern Class_Descriptor cd_S7823C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7823C11, buf);
    S7823C11 *dp, &lv = *(dp=new (buf) S7823C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7823C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C11)");
    /*is_ambiguous_... S7823C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7823C11");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(8,4), "S7823C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S7823C11");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*), ABISELECT(16,8), "S7823C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*), ABISELECT(24,12), "S7823C11");
    check_base_class_offset(lv, (S7823C5*)(S7823C12*), ABISELECT(24,12), "S7823C11");
    check_base_class_offset(lv, (S7823C12*), ABISELECT(16,8), "S7823C11");
    /*is_ambiguous_... S7823C11::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(48,24), "S7823C11");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(48,24), "S7823C11");
    check_base_class_offset(lv, (S7823C7*), 0, "S7823C11");
    test_class_info(&lv, &cd_S7823C11);
    dp->~S7823C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C11(Test_S7823C11, "S7823C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S7823C11C1Ev();
extern void _ZN8S7823C11D1Ev();
Name_Map name_map_S7823C11[] = {
  NSPAIR(_ZN8S7823C11C1Ev),
  NSPAIR(_ZN8S7823C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
static Base_Class bases_S7823C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7823C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7823C11[];
extern void _ZN8S7823C11D1Ev();
extern void _ZN8S7823C11D0Ev();
static  VTBL_ENTRY vtc_S7823C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&_ZN8S7823C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7823C11D0Ev,
};
extern VTBL_ENTRY _ZTV8S7823C11[];
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
static  VTT_ENTRY vtt_S7823C11[] = {
  {&(_ZTV8S7823C11[7]),  7,9},
  {&(_ZTV8S7823C11[7]),  7,9},
  {&(_tg__ZTV7S7823C7__8S7823C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7823C11[];
extern  VTBL_ENTRY _ZTV8S7823C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C11[];
Class_Descriptor cd_S7823C11 = {  "S7823C11", // class name
  bases_S7823C11, 9,
  &(vtc_S7823C11[0]), // expected_vtbl_contents
  &(vtt_S7823C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S7823C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7823C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7823C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C10  : virtual S7823C11 {
  ::S7823C7 s7823c10f0;
  ~S7823C10(); // tgen
  S7823C10(); // tgen
};
//SIG(-1 S7823C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S7823C10 ::~S7823C10(){ note_dtor("S7823C10", this);} // tgen
S7823C10 ::S7823C10(){ note_ctor("S7823C10", this);} // tgen

static void Test_S7823C10()
{
  extern Class_Descriptor cd_S7823C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S7823C10, buf);
    S7823C10 *dp, &lv = *(dp=new (buf) S7823C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7823C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C10)");
    /*is_ambiguous_... S7823C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C11*), ABISELECT(48,24), "S7823C10");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(48,24), "S7823C10");
    check_base_class_offset(lv, (S2265C38*)(S7823C11*), 0, "S7823C10");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*), ABISELECT(56,28), "S7823C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*), ABISELECT(64,32), "S7823C10");
    check_base_class_offset(lv, (S7823C5*)(S7823C12*), ABISELECT(64,32), "S7823C10");
    check_base_class_offset(lv, (S7823C12*)(S7823C11*), ABISELECT(56,28), "S7823C10");
    /*is_ambiguous_... S7823C10::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(88,44), "S7823C10");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(88,44), "S7823C10");
    check_base_class_offset(lv, (S7823C7*)(S7823C11*), 0, "S7823C10");
    check_base_class_offset(lv, (S7823C11*), 0, "S7823C10");
    check_field_offset(lv, s7823c10f0, ABISELECT(8,4), "S7823C10.s7823c10f0");
    test_class_info(&lv, &cd_S7823C10);
    dp->~S7823C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C10(Test_S7823C10, "S7823C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S7823C10C1Ev();
extern void _ZN8S7823C10D1Ev();
Name_Map name_map_S7823C10[] = {
  NSPAIR(_ZN8S7823C10C1Ev),
  NSPAIR(_ZN8S7823C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
extern Class_Descriptor cd_S7823C11;
extern VTBL_ENTRY _ZTI8S7823C11[];
extern  VTBL_ENTRY _ZTV8S7823C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C11[];
static Base_Class bases_S7823C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7823C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7823C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7823C10[];
extern void _ZN8S7823C10D1Ev();
extern void _ZN8S7823C10D0Ev();
static  VTBL_ENTRY vtc_S7823C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C10[0]),
  (VTBL_ENTRY)&_ZN8S7823C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7823C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S7823C10[];
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void _ZN8S7823C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void _ZN8S7823C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C11__8S7823C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
static  VTT_ENTRY vtt_S7823C10[] = {
  {&(_ZTV8S7823C10[8]),  8,10},
  {&(_ZTV8S7823C10[8]),  8,10},
  {&(_ZTV8S7823C10[8]),  8,10},
  {&(_tg__ZTV8S7823C11__8S7823C10[7]),  7,9},
  {&(_tg__ZTV8S7823C11__8S7823C10[7]),  7,9},
  {&(_tg__ZTV7S7823C7__8S7823C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7823C10[];
extern  VTBL_ENTRY _ZTV8S7823C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C10[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7823C10 = {  "S7823C10", // class name
  bases_S7823C10, 10,
  &(vtc_S7823C10[0]), // expected_vtbl_contents
  &(vtt_S7823C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S7823C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7823C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7823C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C13  : S2265C38 , virtual S7823C5 , virtual S7823C7 , virtual S7823C12 , virtual S7823C4 {
  __tsi64 s7823c13f0;
  virtual  ~S7823C13(); // _ZN8S7823C13D2Ev
  S7823C13(); // tgen
};
//SIG(-1 S7823C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S7823C13 ::~S7823C13(){ note_dtor("S7823C13", this);}
S7823C13 ::S7823C13(){ note_ctor("S7823C13", this);} // tgen

static void Test_S7823C13()
{
  extern Class_Descriptor cd_S7823C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S7823C13, buf);
    S7823C13 *dp, &lv = *(dp=new (buf) S7823C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S7823C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C13)");
    /*is_ambiguous_... S7823C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S7823C13");
    /*is_ambiguous_... S7823C13::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(16,12), "S7823C13");
    /*is_ambiguous_... S7823C13::S7823C5 */ AMB_check_base_class_offset(lv, (S7823C5*), ABISELECT(16,12), "S7823C13");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(16,12), "S7823C13");
    check_base_class_offset(lv, (S7823C5*)(S7823C4*), ABISELECT(16,12), "S7823C13");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(40,24), "S7823C13");
    /*is_ambiguous_... S7823C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C4*), ABISELECT(40,24), "S7823C13");
    check_base_class_offset(lv, (S7823C7*), 0, "S7823C13");
    check_base_class_offset(lv, (S7823C7*)(S7823C4*), 0, "S7823C13");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*), ABISELECT(48,28), "S7823C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*), ABISELECT(56,32), "S7823C13");
    check_base_class_offset(lv, (S7823C5*)(S7823C12*), ABISELECT(56,32), "S7823C13");
    check_base_class_offset(lv, (S7823C12*), ABISELECT(48,28), "S7823C13");
    check_base_class_offset(lv, (S2265C38*)(S7823C4*), ABISELECT(124,84), "S7823C13");
    check_base_class_offset(lv, (S7823C4*), ABISELECT(80,44), "S7823C13");
    check_field_offset(lv, s7823c13f0, ABISELECT(8,4), "S7823C13.s7823c13f0");
    test_class_info(&lv, &cd_S7823C13);
    dp->~S7823C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C13(Test_S7823C13, "S7823C13", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S7823C13C1Ev();
extern void _ZN8S7823C13D2Ev();
Name_Map name_map_S7823C13[] = {
  NSPAIR(_ZN8S7823C13C1Ev),
  NSPAIR(_ZN8S7823C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C4;
extern VTBL_ENTRY _ZTI7S7823C4[];
extern  VTBL_ENTRY _ZTV7S7823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C4[];
static Base_Class bases_S7823C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7823C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7823C4,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7823C13[];
extern void _ZN8S7823C13D1Ev();
extern void _ZN8S7823C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void ABISELECT(_ZThn80_N8S7823C13D1Ev,_ZThn44_N8S7823C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
extern void ABISELECT(_ZThn80_N8S7823C13D0Ev,_ZThn44_N8S7823C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7823C13[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&_ZN8S7823C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7823C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S7823C13[];
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C13[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void _ZN7S7823C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
extern void _ZN7S7823C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__8S7823C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C4__8S7823C13[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
static  VTT_ENTRY vtt_S7823C13[] = {
  {&(_ZTV8S7823C13[9]),  9,20},
  {&(_ZTV8S7823C13[9]),  9,20},
  {&(_ZTV8S7823C13[18]),  18,20},
  {&(_tg__ZTV7S7823C7__8S7823C13[4]),  4,6},
  {&(_tg__ZTV7S7823C4__8S7823C13[7]),  7,9},
  {&(_tg__ZTV7S7823C7__7S7823C4__8S7823C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S7823C13[];
extern  VTBL_ENTRY _ZTV8S7823C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C13[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7823C13D0Ev,_ZThn44_N8S7823C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7823C13D1Ev,_ZThn44_N8S7823C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7823C13 = {  "S7823C13", // class name
  bases_S7823C13, 11,
  &(vtc_S7823C13[0]), // expected_vtbl_contents
  &(vtt_S7823C13[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S7823C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7823C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7823C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C14  : S7823C12 , S7823C5 , virtual S2265C38 {
  virtual  ~S7823C14(); // _ZN8S7823C14D2Ev
  S7823C14(); // tgen
};
//SIG(-1 S7823C14) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S7823C14 ::~S7823C14(){ note_dtor("S7823C14", this);}
S7823C14 ::S7823C14(){ note_ctor("S7823C14", this);} // tgen

static void Test_S7823C14()
{
  extern Class_Descriptor cd_S7823C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7823C14, buf);
    S7823C14 *dp, &lv = *(dp=new (buf) S7823C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7823C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C14)");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*), ABISELECT(8,4), "S7823C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*), ABISELECT(16,8), "S7823C14");
    check_base_class_offset(lv, (S7823C5*)(S7823C12*), ABISELECT(16,8), "S7823C14");
    check_base_class_offset(lv, (S7823C12*), ABISELECT(8,4), "S7823C14");
    /*is_ambiguous_... S7823C14::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(40,20), "S7823C14");
    /*is_ambiguous_... S7823C14::S7823C5 */ AMB_check_base_class_offset(lv, (S7823C5*), ABISELECT(40,20), "S7823C14");
    check_base_class_offset(lv, (S2265C38*), 0, "S7823C14");
    test_class_info(&lv, &cd_S7823C14);
    dp->~S7823C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C14(Test_S7823C14, "S7823C14", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7823C14C1Ev();
extern void _ZN8S7823C14D2Ev();
Name_Map name_map_S7823C14[] = {
  NSPAIR(_ZN8S7823C14C1Ev),
  NSPAIR(_ZN8S7823C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7823C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7823C14[];
extern void _ZN8S7823C14D1Ev();
extern void _ZN8S7823C14D0Ev();
static  VTBL_ENTRY vtc_S7823C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C14[0]),
  (VTBL_ENTRY)&_ZN8S7823C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7823C14D0Ev,
};
extern VTBL_ENTRY _ZTV8S7823C14[];
static  VTT_ENTRY vtt_S7823C14[] = {
  {&(_ZTV8S7823C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7823C14[];
extern  VTBL_ENTRY _ZTV8S7823C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C14[];
Class_Descriptor cd_S7823C14 = {  "S7823C14", // class name
  bases_S7823C14, 7,
  &(vtc_S7823C14[0]), // expected_vtbl_contents
  &(vtt_S7823C14[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7823C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7823C14),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7823C14),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C2  : virtual S7823C3 , virtual S7823C10 , virtual S7823C13 , virtual S7823C14 , S7823C11 {
  virtual  ~S7823C2(); // _ZN7S7823C2D2Ev
  S7823C2(); // tgen
};
//SIG(-1 S7823C2) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd FL} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S7823C2 ::~S7823C2(){ note_dtor("S7823C2", this);}
S7823C2 ::S7823C2(){ note_ctor("S7823C2", this);} // tgen

static void Test_S7823C2()
{
  extern Class_Descriptor cd_S7823C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S7823C2, buf);
    S7823C2 *dp, &lv = *(dp=new (buf) S7823C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S7823C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C2)");
    /*is_ambiguous_... S7823C2::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(72,52), "S7823C2");
    check_base_class_offset(lv, (S7823C5*)(S7823C4*), ABISELECT(72,52), "S7823C2");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(72,52), "S7823C2");
    /*is_ambiguous_... S7823C13::S7823C5 */ AMB_check_base_class_offset(lv, (S7823C5*)(S7823C13*), ABISELECT(72,52), "S7823C2");
    /*is_ambiguous_... S7823C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C4*), ABISELECT(96,64), "S7823C2");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(96,64), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C11*), ABISELECT(96,64), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C11*), ABISELECT(96,64), "S7823C2");
    check_base_class_offset(lv, (S7823C7*)(S7823C4*), ABISELECT(8,4), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C7*)(S7823C11*), ABISELECT(8,4), "S7823C2");
    check_base_class_offset(lv, (S7823C7*)(S7823C13*), ABISELECT(8,4), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C7*)(S7823C11*), ABISELECT(8,4), "S7823C2");
    check_base_class_offset(lv, (S2265C38*)(S7823C4*), ABISELECT(104,68), "S7823C2");
    check_base_class_offset(lv, (S2265C38*)(S7823C14*), ABISELECT(104,68), "S7823C2");
    check_base_class_offset(lv, (S7823C4*)(S7823C3*), ABISELECT(24,12), "S7823C2");
    check_base_class_offset(lv, (S7823C4*)(S7823C13*), ABISELECT(24,12), "S7823C2");
    /*is_ambiguous_... S7823C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C3*), ABISELECT(8,4), "S7823C2");
    check_base_class_offset(lv, (S2265C28*)(S7823C3*), 0, "S7823C2");
    check_base_class_offset(lv, (S7823C3*), ABISELECT(8,4), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C11*), ABISELECT(112,72), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*), ABISELECT(160,96), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*), ABISELECT(168,100), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C12 */ AMB_check_base_class_offset(lv, (S7823C5*)(S7823C12*), ABISELECT(168,100), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C12*)(S7823C11*), ABISELECT(160,96), "S7823C2");
    check_base_class_offset(lv, (S7823C12*)(S7823C13*), ABISELECT(160,96), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C12*)(S7823C11*), ABISELECT(160,96), "S7823C2");
    check_base_class_offset(lv, (S7823C11*)(S7823C10*), ABISELECT(112,72), "S7823C2");
    check_base_class_offset(lv, (S7823C10*), ABISELECT(112,72), "S7823C2");
    /*is_ambiguous_... S7823C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C13*), ABISELECT(192,112), "S7823C2");
    check_base_class_offset(lv, (S7823C13*), ABISELECT(192,112), "S7823C2");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*)(S7823C14*), ABISELECT(216,128), "S7823C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*)(S7823C14*), ABISELECT(224,132), "S7823C2");
    check_base_class_offset(lv, (S7823C5*)(S7823C12*)(S7823C14*), ABISELECT(224,132), "S7823C2");
    check_base_class_offset(lv, (S7823C12*)(S7823C14*), ABISELECT(216,128), "S7823C2");
    /*is_ambiguous_... S7823C14::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C14*), ABISELECT(248,144), "S7823C2");
    /*is_ambiguous_... S7823C14::S7823C5 */ AMB_check_base_class_offset(lv, (S7823C5*)(S7823C14*), ABISELECT(248,144), "S7823C2");
    check_base_class_offset(lv, (S7823C14*), ABISELECT(208,124), "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C11*), 0, "S7823C2");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C11*), 0, "S7823C2");
    test_class_info(&lv, &cd_S7823C2);
    dp->~S7823C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C2(Test_S7823C2, "S7823C2", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN7S7823C2C1Ev();
extern void _ZN7S7823C2D2Ev();
Name_Map name_map_S7823C2[] = {
  NSPAIR(_ZN7S7823C2C1Ev),
  NSPAIR(_ZN7S7823C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C4;
extern VTBL_ENTRY _ZTI7S7823C4[];
extern  VTBL_ENTRY _ZTV7S7823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S7823C3;
extern VTBL_ENTRY _ZTI7S7823C3[];
extern  VTBL_ENTRY _ZTV7S7823C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S7823C11;
extern VTBL_ENTRY _ZTI8S7823C11[];
extern  VTBL_ENTRY _ZTV8S7823C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C11[];
extern Class_Descriptor cd_S7823C10;
extern VTBL_ENTRY _ZTI8S7823C10[];
extern  VTBL_ENTRY _ZTV8S7823C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C13;
extern VTBL_ENTRY _ZTI8S7823C13[];
extern  VTBL_ENTRY _ZTV8S7823C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C14;
extern VTBL_ENTRY _ZTI8S7823C14[];
extern  VTBL_ENTRY _ZTV8S7823C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C11;
extern VTBL_ENTRY _ZTI8S7823C11[];
extern  VTBL_ENTRY _ZTV8S7823C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C11[];
static Base_Class bases_S7823C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7823C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7823C4,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7823C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7823C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7823C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7823C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7823C14,    ABISELECT(208,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7823C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7823C2[];
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void _ZN7S7823C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void _ZN7S7823C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7823C2D1Ev,_ZThn4_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7823C2D0Ev,_ZThn4_N7S7823C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7823C2D1Ev,_ZThn12_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7823C2D0Ev,_ZThn12_N7S7823C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7823C2D1Ev,_ZThn72_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7823C2D0Ev,_ZThn72_N7S7823C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7823C2D1Ev,_ZThn112_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7823C2D0Ev,_ZThn112_N7S7823C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7823C2D1Ev,_ZTv0_n16_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7823C2D1Ev,_ZThn124_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7823C2D0Ev,_ZTv0_n16_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7823C2D0Ev,_ZThn124_N7S7823C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7823C2[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7823C2D1Ev,_ZTv0_n16_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7823C2D0Ev,_ZTv0_n16_N7S7823C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7823C2[];
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void _ZN8S7823C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void _ZN8S7823C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C11__A__7S7823C2[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S7823C11D1Ev,_ZThn4_N8S7823C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void ABISELECT(_ZThn8_N8S7823C11D0Ev,_ZThn4_N8S7823C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C11__A__7S7823C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev)();
extern void _ZN7S7823C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev)();
extern void _ZN7S7823C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C3__7S7823C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7823C3D1Ev,_ZThn8_N7S7823C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7823C3D0Ev,_ZThn8_N7S7823C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__7S7823C3__7S7823C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7823C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void _ZN7S7823C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
extern void _ZN7S7823C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__7S7823C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C4__7S7823C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev)();
extern void _ZN8S7823C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev)();
extern void _ZN8S7823C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C10__7S7823C2[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C10__7S7823C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7823C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void _ZN8S7823C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void _ZN8S7823C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C11__7S7823C2[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C11__7S7823C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void _ZN8S7823C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
extern void _ZN8S7823C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C13__7S7823C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C13__7S7823C2[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C4__8S7823C13__7S7823C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern void _ZN8S7823C14D1Ev();
extern void _ZN8S7823C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7823C14__7S7823C2[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C14[0]),
  (VTBL_ENTRY)&_ZN8S7823C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7823C14D0Ev,
};
static  VTT_ENTRY vtt_S7823C2[] = {
  {&(_ZTV7S7823C2[15]),  15,64},
  {&(_tg__ZTV8S7823C11__A__7S7823C2[7]),  7,9},
  {&(_tg__ZTV7S7823C7__8S7823C11__A__7S7823C2[5]),  5,7},
  {&(_ZTV7S7823C2[26]),  26,64},
  {&(_ZTV7S7823C2[35]),  35,64},
  {&(_ZTV7S7823C2[26]),  26,64},
  {&(_ZTV7S7823C2[45]),  45,64},
  {&(_ZTV7S7823C2[45]),  45,64},
  {&(_ZTV7S7823C2[56]),  56,64},
  {&(_ZTV7S7823C2[62]),  62,64},
  {&(_tg__ZTV7S7823C3__7S7823C2[9]),  9,11},
  {&(_tg__ZTV7S7823C4__7S7823C3__7S7823C2[7]),  7,9},
  {&(_tg__ZTV7S7823C3__7S7823C2[9]),  9,11},
  {&(_tg__ZTV7S7823C4__7S7823C2[7]),  7,9},
  {&(_tg__ZTV7S7823C7__7S7823C4__7S7823C2[5]),  5,7},
  {&(_tg__ZTV7S7823C7__7S7823C2[4]),  4,6},
  {&(_tg__ZTV8S7823C10__7S7823C2[8]),  8,10},
  {&(_tg__ZTV8S7823C10__7S7823C2[8]),  8,10},
  {&(_tg__ZTV7S7823C7__8S7823C10__7S7823C2[5]),  5,7},
  {&(_tg__ZTV8S7823C11__7S7823C2[7]),  7,9},
  {&(_tg__ZTV7S7823C7__8S7823C11__7S7823C2[5]),  5,7},
  {&(_tg__ZTV8S7823C13__7S7823C2[9]),  9,11},
  {&(_tg__ZTV7S7823C7__8S7823C13__7S7823C2[5]),  5,7},
  {&(_tg__ZTV7S7823C4__8S7823C13__7S7823C2[7]),  7,9},
  {&(_tg__ZTV8S7823C14__7S7823C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7823C2[];
extern  VTBL_ENTRY _ZTV7S7823C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C2[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7823C3D0Ev,_ZThn8_N7S7823C3D0Ev),
  (VTBL_ENTRY)_ZN7S7823C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7823C3D1Ev,_ZThn8_N7S7823C3D1Ev),
  (VTBL_ENTRY)_ZN7S7823C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7823C11D0Ev,_ZThn4_N8S7823C11D0Ev),
  (VTBL_ENTRY)_ZN8S7823C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7823C11D1Ev,_ZThn4_N8S7823C11D1Ev),
  (VTBL_ENTRY)_ZN8S7823C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7823C2D0Ev,_ZTv0_n16_N7S7823C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7823C2D0Ev,_ZThn124_N7S7823C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7823C2D1Ev,_ZTv0_n16_N7S7823C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7823C2D1Ev,_ZThn124_N7S7823C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7823C2D0Ev,_ZThn112_N7S7823C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7823C2D0Ev,_ZThn72_N7S7823C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7823C2D0Ev,_ZThn12_N7S7823C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7823C2D0Ev,_ZThn4_N7S7823C2D0Ev),
  (VTBL_ENTRY)_ZN7S7823C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7823C2D1Ev,_ZThn112_N7S7823C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7823C2D1Ev,_ZThn72_N7S7823C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7823C2D1Ev,_ZThn12_N7S7823C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7823C2D1Ev,_ZThn4_N7S7823C2D1Ev),
  (VTBL_ENTRY)_ZN7S7823C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7823C2 = {  "S7823C2", // class name
  bases_S7823C2, 27,
  &(vtc_S7823C2[0]), // expected_vtbl_contents
  &(vtt_S7823C2[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI7S7823C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7823C2),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7823C2),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7823C1  : S7823C2 {
  virtual  ~S7823C1(); // _ZN7S7823C1D2Ev
  S7823C1(); // tgen
};
//SIG(1 S7823C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd FL} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} vd}


 S7823C1 ::~S7823C1(){ note_dtor("S7823C1", this);}
S7823C1 ::S7823C1(){ note_ctor("S7823C1", this);} // tgen

static void Test_S7823C1()
{
  extern Class_Descriptor cd_S7823C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S7823C1, buf);
    S7823C1 *dp, &lv = *(dp=new (buf) S7823C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S7823C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7823C1)");
    /*is_ambiguous_... S7823C1::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*), ABISELECT(72,52), "S7823C1");
    check_base_class_offset(lv, (S7823C5*)(S7823C4*), ABISELECT(72,52), "S7823C1");
    check_base_class_offset(lv, (S7823C5*)(S7823C7*), ABISELECT(72,52), "S7823C1");
    /*is_ambiguous_... S7823C13::S7823C5 */ AMB_check_base_class_offset(lv, (S7823C5*)(S7823C13*), ABISELECT(72,52), "S7823C1");
    /*is_ambiguous_... S7823C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C4*), ABISELECT(96,64), "S7823C1");
    /*is_ambiguous_... S7823C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C7*), ABISELECT(96,64), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C11*), ABISELECT(96,64), "S7823C1");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C11*)(S7823C2*), ABISELECT(96,64), "S7823C1");
    check_base_class_offset(lv, (S7823C7*)(S7823C4*), ABISELECT(8,4), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C7*)(S7823C11*), ABISELECT(8,4), "S7823C1");
    check_base_class_offset(lv, (S7823C7*)(S7823C13*), ABISELECT(8,4), "S7823C1");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C7*)(S7823C11*)(S7823C2*), ABISELECT(8,4), "S7823C1");
    check_base_class_offset(lv, (S2265C38*)(S7823C4*), ABISELECT(104,68), "S7823C1");
    check_base_class_offset(lv, (S2265C38*)(S7823C14*), ABISELECT(104,68), "S7823C1");
    check_base_class_offset(lv, (S7823C4*)(S7823C3*), ABISELECT(24,12), "S7823C1");
    check_base_class_offset(lv, (S7823C4*)(S7823C13*), ABISELECT(24,12), "S7823C1");
    /*is_ambiguous_... S7823C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C3*), ABISELECT(8,4), "S7823C1");
    check_base_class_offset(lv, (S2265C28*)(S7823C3*), 0, "S7823C1");
    check_base_class_offset(lv, (S7823C3*)(S7823C2*), ABISELECT(8,4), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C11*), ABISELECT(112,72), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*), ABISELECT(160,96), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*), ABISELECT(168,100), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C12 */ AMB_check_base_class_offset(lv, (S7823C5*)(S7823C12*), ABISELECT(168,100), "S7823C1");
    /*is_ambiguous_... S7823C1::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C12*)(S7823C11*), ABISELECT(160,96), "S7823C1");
    check_base_class_offset(lv, (S7823C12*)(S7823C13*), ABISELECT(160,96), "S7823C1");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C12*)(S7823C11*)(S7823C2*), ABISELECT(160,96), "S7823C1");
    check_base_class_offset(lv, (S7823C11*)(S7823C10*), ABISELECT(112,72), "S7823C1");
    check_base_class_offset(lv, (S7823C10*)(S7823C2*), ABISELECT(112,72), "S7823C1");
    /*is_ambiguous_... S7823C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C13*), ABISELECT(192,112), "S7823C1");
    check_base_class_offset(lv, (S7823C13*)(S7823C2*), ABISELECT(192,112), "S7823C1");
    /*is_ambiguous_... S7823C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C12*)(S7823C14*), ABISELECT(216,128), "S7823C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C12*)(S7823C14*), ABISELECT(224,132), "S7823C1");
    check_base_class_offset(lv, (S7823C5*)(S7823C12*)(S7823C14*), ABISELECT(224,132), "S7823C1");
    check_base_class_offset(lv, (S7823C12*)(S7823C14*), ABISELECT(216,128), "S7823C1");
    /*is_ambiguous_... S7823C14::S7823C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7823C5*)(S7823C14*), ABISELECT(248,144), "S7823C1");
    /*is_ambiguous_... S7823C14::S7823C5 */ AMB_check_base_class_offset(lv, (S7823C5*)(S7823C14*), ABISELECT(248,144), "S7823C1");
    check_base_class_offset(lv, (S7823C14*)(S7823C2*), ABISELECT(208,124), "S7823C1");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7823C11*)(S7823C2*), 0, "S7823C1");
    /*is_ambiguous_... S7823C2::S7823C11 */ AMB_check_base_class_offset(lv, (S7823C11*)(S7823C2*), 0, "S7823C1");
    check_base_class_offset(lv, (S7823C2*), 0, "S7823C1");
    test_class_info(&lv, &cd_S7823C1);
    dp->~S7823C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7823C1(Test_S7823C1, "S7823C1", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN7S7823C1C1Ev();
extern void _ZN7S7823C1D2Ev();
Name_Map name_map_S7823C1[] = {
  NSPAIR(_ZN7S7823C1C1Ev),
  NSPAIR(_ZN7S7823C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C7;
extern VTBL_ENTRY _ZTI7S7823C7[];
extern  VTBL_ENTRY _ZTV7S7823C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C4;
extern VTBL_ENTRY _ZTI7S7823C4[];
extern  VTBL_ENTRY _ZTV7S7823C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S7823C3;
extern VTBL_ENTRY _ZTI7S7823C3[];
extern  VTBL_ENTRY _ZTV7S7823C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S7823C11;
extern VTBL_ENTRY _ZTI8S7823C11[];
extern  VTBL_ENTRY _ZTV8S7823C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C11[];
extern Class_Descriptor cd_S7823C10;
extern VTBL_ENTRY _ZTI8S7823C10[];
extern  VTBL_ENTRY _ZTV8S7823C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C13;
extern VTBL_ENTRY _ZTI8S7823C13[];
extern  VTBL_ENTRY _ZTV8S7823C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C12;
extern VTBL_ENTRY _ZTI8S7823C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7823C5;
extern VTBL_ENTRY _ZTI7S7823C5[];
extern Class_Descriptor cd_S7823C14;
extern VTBL_ENTRY _ZTI8S7823C14[];
extern  VTBL_ENTRY _ZTV8S7823C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7823C11;
extern VTBL_ENTRY _ZTI8S7823C11[];
extern  VTBL_ENTRY _ZTV8S7823C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7823C11[];
extern Class_Descriptor cd_S7823C2;
extern VTBL_ENTRY _ZTI7S7823C2[];
extern  VTBL_ENTRY _ZTV7S7823C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C2[];
static Base_Class bases_S7823C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7823C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7823C4,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7823C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7823C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7823C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7823C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7823C12,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7823C5,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7823C14,    ABISELECT(208,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7823C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7823C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7823C1[];
extern void ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev)();
extern void _ZN7S7823C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev)();
extern void _ZN7S7823C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7823C1D1Ev,_ZThn4_N7S7823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev)();
extern void ABISELECT(_ZThn8_N7S7823C1D0Ev,_ZThn4_N7S7823C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7823C1D1Ev,_ZThn12_N7S7823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7823C1D0Ev,_ZThn12_N7S7823C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7823C1D1Ev,_ZThn72_N7S7823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7823C1D0Ev,_ZThn72_N7S7823C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S7823C1D1Ev,_ZThn112_N7S7823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S7823C1D0Ev,_ZThn112_N7S7823C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7823C1D1Ev,_ZTv0_n16_N7S7823C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7823C1D1Ev,_ZThn124_N7S7823C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7823C1D0Ev,_ZTv0_n16_N7S7823C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7823C1D0Ev,_ZThn124_N7S7823C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7823C1[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7823C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7823C1D1Ev,_ZTv0_n16_N7S7823C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7823C1D0Ev,_ZTv0_n16_N7S7823C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7823C1[];
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void _ZN7S7823C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void _ZN7S7823C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C2__7S7823C1[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void _ZN8S7823C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void _ZN8S7823C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C117S7823C2__A1__7S7823C1[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S7823C11D1Ev,_ZThn4_N8S7823C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void ABISELECT(_ZThn8_N8S7823C11D0Ev,_ZThn4_N8S7823C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C117S7823C2__A1__7S7823C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7823C2D1Ev,_ZThn4_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7823C2D0Ev,_ZThn4_N7S7823C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C3__7S7823C2__7S7823C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7823C2D1Ev,_ZThn12_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7823C2D0Ev,_ZThn12_N7S7823C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__7S7823C2__7S7823C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7823C2D1Ev,_ZThn72_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7823C2D0Ev,_ZThn72_N7S7823C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C10__7S7823C2__7S7823C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7823C2D1Ev,_ZThn112_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7823C2D0Ev,_ZThn112_N7S7823C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C13__7S7823C2__7S7823C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7823C2D1Ev,_ZTv0_n16_N7S7823C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7823C2D1Ev,_ZThn124_N7S7823C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7823C2D0Ev,_ZTv0_n16_N7S7823C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7823C2D0Ev,_ZThn124_N7S7823C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C14__7S7823C2__7S7823C1[] = {
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7823C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7823C2D1Ev,_ZTv0_n16_N7S7823C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7823C2D0Ev,_ZTv0_n16_N7S7823C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev)();
extern void _ZN7S7823C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev)();
extern void _ZN7S7823C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C3__7S7823C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7823C3D1Ev,_ZThn8_N7S7823C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7823C3D0Ev,_ZThn8_N7S7823C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__7S7823C3__7S7823C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7823C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void _ZN7S7823C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
extern void _ZN7S7823C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7823C4__7S7823C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C4__7S7823C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7823C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev),
};
extern void _ZN7S7823C7D1Ev();
extern void _ZN7S7823C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7823C7__7S7823C1[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7823C7[0]),
  (VTBL_ENTRY)&_ZN7S7823C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7823C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev)();
extern void _ZN8S7823C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev)();
extern void _ZN8S7823C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C10__7S7823C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C10__7S7823C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7823C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void _ZN8S7823C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
extern void _ZN8S7823C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C11__7S7823C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C11__7S7823C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7823C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void _ZN8S7823C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
extern void _ZN8S7823C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7823C13__7S7823C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C7__8S7823C13__7S7823C1[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7823C4__8S7823C13__7S7823C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI8S7823C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev),
};
extern void _ZN8S7823C14D1Ev();
extern void _ZN8S7823C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7823C14__7S7823C1[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S7823C14[0]),
  (VTBL_ENTRY)&_ZN8S7823C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7823C14D0Ev,
};
static  VTT_ENTRY vtt_S7823C1[] = {
  {&(_ZTV7S7823C1[15]),  15,64},
  {&(_tg__ZTV7S7823C2__7S7823C1[15]),  15,17},
  {&(_tg__ZTV8S7823C117S7823C2__A1__7S7823C1[7]),  7,9},
  {&(_tg__ZTV7S7823C7__8S7823C117S7823C2__A1__7S7823C1[5]),  5,7},
  {&(_tg__ZTV7S7823C3__7S7823C2__7S7823C1[9]),  9,11},
  {&(_tg__ZTV7S7823C4__7S7823C2__7S7823C1[7]),  7,9},
  {&(_tg__ZTV7S7823C3__7S7823C2__7S7823C1[9]),  9,11},
  {&(_tg__ZTV8S7823C10__7S7823C2__7S7823C1[8]),  8,10},
  {&(_tg__ZTV8S7823C10__7S7823C2__7S7823C1[8]),  8,10},
  {&(_tg__ZTV8S7823C13__7S7823C2__7S7823C1[9]),  9,11},
  {&(_tg__ZTV8S7823C14__7S7823C2__7S7823C1[4]),  4,6},
  {&(_ZTV7S7823C1[26]),  26,64},
  {&(_ZTV7S7823C1[35]),  35,64},
  {&(_ZTV7S7823C1[26]),  26,64},
  {&(_ZTV7S7823C1[45]),  45,64},
  {&(_ZTV7S7823C1[45]),  45,64},
  {&(_ZTV7S7823C1[56]),  56,64},
  {&(_ZTV7S7823C1[62]),  62,64},
  {&(_tg__ZTV7S7823C3__7S7823C1[9]),  9,11},
  {&(_tg__ZTV7S7823C4__7S7823C3__7S7823C1[7]),  7,9},
  {&(_tg__ZTV7S7823C3__7S7823C1[9]),  9,11},
  {&(_tg__ZTV7S7823C4__7S7823C1[7]),  7,9},
  {&(_tg__ZTV7S7823C7__7S7823C4__7S7823C1[5]),  5,7},
  {&(_tg__ZTV7S7823C7__7S7823C1[4]),  4,6},
  {&(_tg__ZTV8S7823C10__7S7823C1[8]),  8,10},
  {&(_tg__ZTV8S7823C10__7S7823C1[8]),  8,10},
  {&(_tg__ZTV7S7823C7__8S7823C10__7S7823C1[5]),  5,7},
  {&(_tg__ZTV8S7823C11__7S7823C1[7]),  7,9},
  {&(_tg__ZTV7S7823C7__8S7823C11__7S7823C1[5]),  5,7},
  {&(_tg__ZTV8S7823C13__7S7823C1[9]),  9,11},
  {&(_tg__ZTV7S7823C7__8S7823C13__7S7823C1[5]),  5,7},
  {&(_tg__ZTV7S7823C4__8S7823C13__7S7823C1[7]),  7,9},
  {&(_tg__ZTV8S7823C14__7S7823C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7823C1[];
extern  VTBL_ENTRY _ZTV7S7823C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7823C1[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C13D0Ev,_ZTv0_n20_N8S7823C13D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C13D1Ev,_ZTv0_n20_N8S7823C13D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C10D0Ev,_ZTv0_n20_N8S7823C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C10D1Ev,_ZTv0_n20_N8S7823C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D0Ev,_ZTv0_n20_N7S7823C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C4D1Ev,_ZTv0_n20_N7S7823C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7823C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C3D0Ev,_ZTv0_n20_N7S7823C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7823C3D0Ev,_ZThn8_N7S7823C3D0Ev),
  (VTBL_ENTRY)_ZN7S7823C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C3D1Ev,_ZTv0_n20_N7S7823C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7823C3D1Ev,_ZThn8_N7S7823C3D1Ev),
  (VTBL_ENTRY)_ZN7S7823C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7823C2D0Ev,_ZTv0_n16_N7S7823C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7823C2D0Ev,_ZThn124_N7S7823C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7823C2D1Ev,_ZTv0_n16_N7S7823C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7823C2D1Ev,_ZThn124_N7S7823C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C11D0Ev,_ZTv0_n20_N8S7823C11D0Ev), // 
  (VTBL_ENTRY)_ZN8S7823C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7823C11D0Ev,_ZThn4_N8S7823C11D0Ev),
  (VTBL_ENTRY)_ZN8S7823C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7823C11D1Ev,_ZTv0_n20_N8S7823C11D1Ev), // 
  (VTBL_ENTRY)_ZN8S7823C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7823C11D1Ev,_ZThn4_N8S7823C11D1Ev),
  (VTBL_ENTRY)_ZN8S7823C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C2D0Ev,_ZTv0_n20_N7S7823C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7823C2D0Ev,_ZThn112_N7S7823C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7823C2D0Ev,_ZThn72_N7S7823C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7823C2D0Ev,_ZThn12_N7S7823C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7823C2D0Ev,_ZThn4_N7S7823C2D0Ev),
  (VTBL_ENTRY)_ZN7S7823C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C2D1Ev,_ZTv0_n20_N7S7823C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7823C2D1Ev,_ZThn112_N7S7823C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7823C2D1Ev,_ZThn72_N7S7823C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7823C2D1Ev,_ZThn12_N7S7823C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7823C2D1Ev,_ZThn4_N7S7823C2D1Ev),
  (VTBL_ENTRY)_ZN7S7823C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7823C1D0Ev,_ZTv0_n16_N7S7823C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7823C1D0Ev,_ZThn124_N7S7823C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7823C1D1Ev,_ZTv0_n16_N7S7823C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7823C1D1Ev,_ZThn124_N7S7823C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C1D0Ev,_ZTv0_n20_N7S7823C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7823C1D0Ev,_ZThn112_N7S7823C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7823C1D0Ev,_ZThn72_N7S7823C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7823C1D0Ev,_ZThn12_N7S7823C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7823C1D0Ev,_ZThn4_N7S7823C1D0Ev),
  (VTBL_ENTRY)_ZN7S7823C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7823C1D1Ev,_ZTv0_n20_N7S7823C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7823C1D1Ev,_ZThn112_N7S7823C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7823C1D1Ev,_ZThn72_N7S7823C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7823C1D1Ev,_ZThn12_N7S7823C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7823C1D1Ev,_ZThn4_N7S7823C1D1Ev),
  (VTBL_ENTRY)_ZN7S7823C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7823C1 = {  "S7823C1", // class name
  bases_S7823C1, 28,
  &(vtc_S7823C1[0]), // expected_vtbl_contents
  &(vtt_S7823C1[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI7S7823C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7823C1),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7823C1),33, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C5  : S5217C60_nt {
  void *s7822c5f0[2];
};
//SIG(-1 S7822C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S7822C5()
{
  extern Class_Descriptor cd_S7822C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7822C5, buf);
    S7822C5 &lv = *(new (buf) S7822C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7822C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S7822C5");
    check_field_offset(lv, s7822c5f0, ABISELECT(8,4), "S7822C5.s7822c5f0");
    test_class_info(&lv, &cd_S7822C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C5(Test_S7822C5, "S7822C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S7822C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7822C5[];
Class_Descriptor cd_S7822C5 = {  "S7822C5", // class name
  bases_S7822C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7822C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C7  : virtual S5217C60_nt , virtual S7822C5 {
  virtual  ~S7822C7(); // _ZN7S7822C7D2Ev
  S7822C7(); // tgen
};
//SIG(-1 S7822C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S7822C7 ::~S7822C7(){ note_dtor("S7822C7", this);}
S7822C7 ::S7822C7(){ note_ctor("S7822C7", this);} // tgen

static void Test_S7822C7()
{
  extern Class_Descriptor cd_S7822C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7822C7, buf);
    S7822C7 *dp, &lv = *(dp=new (buf) S7822C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7822C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C7)");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7822C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(16,8), "S7822C7");
    check_base_class_offset(lv, (S7822C5*), ABISELECT(16,8), "S7822C7");
    test_class_info(&lv, &cd_S7822C7);
    dp->~S7822C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C7(Test_S7822C7, "S7822C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7822C7C1Ev();
extern void _ZN7S7822C7D2Ev();
Name_Map name_map_S7822C7[] = {
  NSPAIR(_ZN7S7822C7C1Ev),
  NSPAIR(_ZN7S7822C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
static Base_Class bases_S7822C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7822C7[];
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY vtc_S7822C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S7822C7[];
static  VTT_ENTRY vtt_S7822C7[] = {
  {&(_ZTV7S7822C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
Class_Descriptor cd_S7822C7 = {  "S7822C7", // class name
  bases_S7822C7, 3,
  &(vtc_S7822C7[0]), // expected_vtbl_contents
  &(vtt_S7822C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7822C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7822C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7822C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C4  : virtual S7822C5 , virtual S5217C60_nt , virtual S7822C7 , virtual S2265C38 {
  int s7822c4f0[9];
  virtual  ~S7822C4(); // _ZN7S7822C4D2Ev
  S7822C4(); // tgen
};
//SIG(-1 S7822C4) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S7822C4 ::~S7822C4(){ note_dtor("S7822C4", this);}
S7822C4 ::S7822C4(){ note_ctor("S7822C4", this);} // tgen

static void Test_S7822C4()
{
  extern Class_Descriptor cd_S7822C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S7822C4, buf);
    S7822C4 *dp, &lv = *(dp=new (buf) S7822C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7822C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C4)");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(48,40), "S7822C4");
    check_base_class_offset(lv, (S7822C5*), ABISELECT(48,40), "S7822C4");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(48,40), "S7822C4");
    /*is_ambiguous_... S7822C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S7822C4");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(72,52), "S7822C4");
    check_base_class_offset(lv, (S7822C7*), 0, "S7822C4");
    check_base_class_offset(lv, (S2265C38*), 0, "S7822C4");
    check_field_offset(lv, s7822c4f0, ABISELECT(8,4), "S7822C4.s7822c4f0");
    test_class_info(&lv, &cd_S7822C4);
    dp->~S7822C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C4(Test_S7822C4, "S7822C4", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S7822C4C1Ev();
extern void _ZN7S7822C4D2Ev();
Name_Map name_map_S7822C4[] = {
  NSPAIR(_ZN7S7822C4C1Ev),
  NSPAIR(_ZN7S7822C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7822C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7822C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7822C4[];
extern void _ZN7S7822C4D1Ev();
extern void _ZN7S7822C4D0Ev();
static  VTBL_ENTRY vtc_S7822C4[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&_ZN7S7822C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7822C4[];
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
static  VTT_ENTRY vtt_S7822C4[] = {
  {&(_ZTV7S7822C4[7]),  7,9},
  {&(_ZTV7S7822C4[7]),  7,9},
  {&(_tg__ZTV7S7822C7__7S7822C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7822C4[];
extern  VTBL_ENTRY _ZTV7S7822C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C4[];
Class_Descriptor cd_S7822C4 = {  "S7822C4", // class name
  bases_S7822C4, 5,
  &(vtc_S7822C4[0]), // expected_vtbl_contents
  &(vtt_S7822C4[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S7822C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7822C4),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7822C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C3  : virtual S7822C4 , S2265C38 , virtual S2265C28 {
  void *s7822c3f0;
  ~S7822C3(); // tgen
  S7822C3(); // tgen
};
//SIG(-1 S7822C3) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S7822C3 ::~S7822C3(){ note_dtor("S7822C3", this);} // tgen
S7822C3 ::S7822C3(){ note_ctor("S7822C3", this);} // tgen

static void Test_S7822C3()
{
  extern Class_Descriptor cd_S7822C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S7822C3, buf);
    S7822C3 *dp, &lv = *(dp=new (buf) S7822C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S7822C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C3)");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(64,48), "S7822C3");
    check_base_class_offset(lv, (S7822C5*)(S7822C4*), ABISELECT(64,48), "S7822C3");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(64,48), "S7822C3");
    /*is_ambiguous_... S7822C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C4*), ABISELECT(88,60), "S7822C3");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(88,60), "S7822C3");
    check_base_class_offset(lv, (S7822C7*)(S7822C4*), 0, "S7822C3");
    check_base_class_offset(lv, (S2265C38*)(S7822C4*), ABISELECT(96,64), "S7822C3");
    check_base_class_offset(lv, (S7822C4*), ABISELECT(16,8), "S7822C3");
    /*is_ambiguous_... S7822C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S7822C3");
    check_base_class_offset(lv, (S2265C28*), 0, "S7822C3");
    check_field_offset(lv, s7822c3f0, ABISELECT(8,4), "S7822C3.s7822c3f0");
    test_class_info(&lv, &cd_S7822C3);
    dp->~S7822C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C3(Test_S7822C3, "S7822C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S7822C3C1Ev();
extern void _ZN7S7822C3D1Ev();
Name_Map name_map_S7822C3[] = {
  NSPAIR(_ZN7S7822C3C1Ev),
  NSPAIR(_ZN7S7822C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C4;
extern VTBL_ENTRY _ZTI7S7822C4[];
extern  VTBL_ENTRY _ZTV7S7822C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S7822C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7822C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7822C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7822C3[];
extern void _ZN7S7822C3D1Ev();
extern void _ZN7S7822C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7822C3D1Ev,_ZThn8_N7S7822C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7822C3D0Ev,_ZThn8_N7S7822C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7822C3[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C3[0]),
  (VTBL_ENTRY)&_ZN7S7822C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C3D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7822C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S7822C3[];
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void _ZN7S7822C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
extern void _ZN7S7822C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__7S7822C3[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C4__7S7822C3[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C3[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
static  VTT_ENTRY vtt_S7822C3[] = {
  {&(_ZTV7S7822C3[9]),  9,20},
  {&(_ZTV7S7822C3[18]),  18,20},
  {&(_ZTV7S7822C3[9]),  9,20},
  {&(_tg__ZTV7S7822C4__7S7822C3[7]),  7,9},
  {&(_tg__ZTV7S7822C7__7S7822C4__7S7822C3[5]),  5,7},
  {&(_tg__ZTV7S7822C7__7S7822C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7822C3[];
extern  VTBL_ENTRY _ZTV7S7822C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C3[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7822C3D0Ev,_ZThn8_N7S7822C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7822C3D1Ev,_ZThn8_N7S7822C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7822C3 = {  "S7822C3", // class name
  bases_S7822C3, 8,
  &(vtc_S7822C3[0]), // expected_vtbl_contents
  &(vtt_S7822C3[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S7822C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7822C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7822C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C12  : S5217C60_nt , S7822C5 {
};
//SIG(-1 S7822C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S7822C12()
{
  extern Class_Descriptor cd_S7822C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7822C12, buf);
    S7822C12 &lv = *(new (buf) S7822C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7822C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C12)");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S7822C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(8,4), "S7822C12");
    check_base_class_offset(lv, (S7822C5*), ABISELECT(8,4), "S7822C12");
    test_class_info(&lv, &cd_S7822C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C12(Test_S7822C12, "S7822C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
static Base_Class bases_S7822C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7822C12[];
Class_Descriptor cd_S7822C12 = {  "S7822C12", // class name
  bases_S7822C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7822C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C11  : virtual S5217C60_nt , S2265C38 , virtual S7822C12 , virtual S7822C7 {
  ~S7822C11(); // tgen
  S7822C11(); // tgen
};
//SIG(-1 S7822C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S7822C11 ::~S7822C11(){ note_dtor("S7822C11", this);} // tgen
S7822C11 ::S7822C11(){ note_ctor("S7822C11", this);} // tgen

static void Test_S7822C11()
{
  extern Class_Descriptor cd_S7822C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7822C11, buf);
    S7822C11 *dp, &lv = *(dp=new (buf) S7822C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7822C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C11)");
    /*is_ambiguous_... S7822C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7822C11");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(8,4), "S7822C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S7822C11");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*), ABISELECT(16,8), "S7822C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*), ABISELECT(24,12), "S7822C11");
    check_base_class_offset(lv, (S7822C5*)(S7822C12*), ABISELECT(24,12), "S7822C11");
    check_base_class_offset(lv, (S7822C12*), ABISELECT(16,8), "S7822C11");
    /*is_ambiguous_... S7822C11::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(48,24), "S7822C11");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(48,24), "S7822C11");
    check_base_class_offset(lv, (S7822C7*), 0, "S7822C11");
    test_class_info(&lv, &cd_S7822C11);
    dp->~S7822C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C11(Test_S7822C11, "S7822C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S7822C11C1Ev();
extern void _ZN8S7822C11D1Ev();
Name_Map name_map_S7822C11[] = {
  NSPAIR(_ZN8S7822C11C1Ev),
  NSPAIR(_ZN8S7822C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
static Base_Class bases_S7822C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7822C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7822C11[];
extern void _ZN8S7822C11D1Ev();
extern void _ZN8S7822C11D0Ev();
static  VTBL_ENTRY vtc_S7822C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&_ZN8S7822C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7822C11D0Ev,
};
extern VTBL_ENTRY _ZTV8S7822C11[];
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
static  VTT_ENTRY vtt_S7822C11[] = {
  {&(_ZTV8S7822C11[7]),  7,9},
  {&(_ZTV8S7822C11[7]),  7,9},
  {&(_tg__ZTV7S7822C7__8S7822C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7822C11[];
extern  VTBL_ENTRY _ZTV8S7822C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C11[];
Class_Descriptor cd_S7822C11 = {  "S7822C11", // class name
  bases_S7822C11, 9,
  &(vtc_S7822C11[0]), // expected_vtbl_contents
  &(vtt_S7822C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S7822C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7822C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7822C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C10  : virtual S7822C11 {
  ::S7822C7 s7822c10f0;
  ~S7822C10(); // tgen
  S7822C10(); // tgen
};
//SIG(-1 S7822C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S7822C10 ::~S7822C10(){ note_dtor("S7822C10", this);} // tgen
S7822C10 ::S7822C10(){ note_ctor("S7822C10", this);} // tgen

static void Test_S7822C10()
{
  extern Class_Descriptor cd_S7822C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S7822C10, buf);
    S7822C10 *dp, &lv = *(dp=new (buf) S7822C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7822C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C10)");
    /*is_ambiguous_... S7822C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C11*), ABISELECT(48,24), "S7822C10");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(48,24), "S7822C10");
    check_base_class_offset(lv, (S2265C38*)(S7822C11*), 0, "S7822C10");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*), ABISELECT(56,28), "S7822C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*), ABISELECT(64,32), "S7822C10");
    check_base_class_offset(lv, (S7822C5*)(S7822C12*), ABISELECT(64,32), "S7822C10");
    check_base_class_offset(lv, (S7822C12*)(S7822C11*), ABISELECT(56,28), "S7822C10");
    /*is_ambiguous_... S7822C10::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(88,44), "S7822C10");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(88,44), "S7822C10");
    check_base_class_offset(lv, (S7822C7*)(S7822C11*), 0, "S7822C10");
    check_base_class_offset(lv, (S7822C11*), 0, "S7822C10");
    check_field_offset(lv, s7822c10f0, ABISELECT(8,4), "S7822C10.s7822c10f0");
    test_class_info(&lv, &cd_S7822C10);
    dp->~S7822C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C10(Test_S7822C10, "S7822C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S7822C10C1Ev();
extern void _ZN8S7822C10D1Ev();
Name_Map name_map_S7822C10[] = {
  NSPAIR(_ZN8S7822C10C1Ev),
  NSPAIR(_ZN8S7822C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
extern Class_Descriptor cd_S7822C11;
extern VTBL_ENTRY _ZTI8S7822C11[];
extern  VTBL_ENTRY _ZTV8S7822C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C11[];
static Base_Class bases_S7822C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7822C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7822C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7822C10[];
extern void _ZN8S7822C10D1Ev();
extern void _ZN8S7822C10D0Ev();
static  VTBL_ENTRY vtc_S7822C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C10[0]),
  (VTBL_ENTRY)&_ZN8S7822C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7822C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S7822C10[];
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void _ZN8S7822C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void _ZN8S7822C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C11__8S7822C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
static  VTT_ENTRY vtt_S7822C10[] = {
  {&(_ZTV8S7822C10[8]),  8,10},
  {&(_ZTV8S7822C10[8]),  8,10},
  {&(_ZTV8S7822C10[8]),  8,10},
  {&(_tg__ZTV8S7822C11__8S7822C10[7]),  7,9},
  {&(_tg__ZTV8S7822C11__8S7822C10[7]),  7,9},
  {&(_tg__ZTV7S7822C7__8S7822C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7822C10[];
extern  VTBL_ENTRY _ZTV8S7822C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C10[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7822C10 = {  "S7822C10", // class name
  bases_S7822C10, 10,
  &(vtc_S7822C10[0]), // expected_vtbl_contents
  &(vtt_S7822C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S7822C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7822C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7822C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C13  : S2265C38 , virtual S7822C5 , virtual S7822C7 , virtual S7822C12 , virtual S7822C4 {
  long s7822c13f0;
  virtual  ~S7822C13(); // _ZN8S7822C13D2Ev
  S7822C13(); // tgen
};
//SIG(-1 S7822C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S7822C13 ::~S7822C13(){ note_dtor("S7822C13", this);}
S7822C13 ::S7822C13(){ note_ctor("S7822C13", this);} // tgen

static void Test_S7822C13()
{
  extern Class_Descriptor cd_S7822C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S7822C13, buf);
    S7822C13 *dp, &lv = *(dp=new (buf) S7822C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S7822C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C13)");
    /*is_ambiguous_... S7822C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S7822C13");
    /*is_ambiguous_... S7822C13::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(16,8), "S7822C13");
    /*is_ambiguous_... S7822C13::S7822C5 */ AMB_check_base_class_offset(lv, (S7822C5*), ABISELECT(16,8), "S7822C13");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(16,8), "S7822C13");
    check_base_class_offset(lv, (S7822C5*)(S7822C4*), ABISELECT(16,8), "S7822C13");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(40,20), "S7822C13");
    /*is_ambiguous_... S7822C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C4*), ABISELECT(40,20), "S7822C13");
    check_base_class_offset(lv, (S7822C7*), 0, "S7822C13");
    check_base_class_offset(lv, (S7822C7*)(S7822C4*), 0, "S7822C13");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*), ABISELECT(48,24), "S7822C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*), ABISELECT(56,28), "S7822C13");
    check_base_class_offset(lv, (S7822C5*)(S7822C12*), ABISELECT(56,28), "S7822C13");
    check_base_class_offset(lv, (S7822C12*), ABISELECT(48,24), "S7822C13");
    check_base_class_offset(lv, (S2265C38*)(S7822C4*), ABISELECT(124,80), "S7822C13");
    check_base_class_offset(lv, (S7822C4*), ABISELECT(80,40), "S7822C13");
    check_field_offset(lv, s7822c13f0, ABISELECT(8,4), "S7822C13.s7822c13f0");
    test_class_info(&lv, &cd_S7822C13);
    dp->~S7822C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C13(Test_S7822C13, "S7822C13", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S7822C13C1Ev();
extern void _ZN8S7822C13D2Ev();
Name_Map name_map_S7822C13[] = {
  NSPAIR(_ZN8S7822C13C1Ev),
  NSPAIR(_ZN8S7822C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C4;
extern VTBL_ENTRY _ZTI7S7822C4[];
extern  VTBL_ENTRY _ZTV7S7822C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C4[];
static Base_Class bases_S7822C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7822C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7822C4,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7822C13[];
extern void _ZN8S7822C13D1Ev();
extern void _ZN8S7822C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void ABISELECT(_ZThn80_N8S7822C13D1Ev,_ZThn40_N8S7822C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
extern void ABISELECT(_ZThn80_N8S7822C13D0Ev,_ZThn40_N8S7822C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7822C13[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&_ZN8S7822C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7822C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S7822C13[];
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C13[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void _ZN7S7822C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
extern void _ZN7S7822C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__8S7822C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C4__8S7822C13[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
static  VTT_ENTRY vtt_S7822C13[] = {
  {&(_ZTV8S7822C13[9]),  9,20},
  {&(_ZTV8S7822C13[9]),  9,20},
  {&(_ZTV8S7822C13[18]),  18,20},
  {&(_tg__ZTV7S7822C7__8S7822C13[4]),  4,6},
  {&(_tg__ZTV7S7822C4__8S7822C13[7]),  7,9},
  {&(_tg__ZTV7S7822C7__7S7822C4__8S7822C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S7822C13[];
extern  VTBL_ENTRY _ZTV8S7822C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C13[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7822C13D0Ev,_ZThn40_N8S7822C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7822C13D1Ev,_ZThn40_N8S7822C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7822C13 = {  "S7822C13", // class name
  bases_S7822C13, 11,
  &(vtc_S7822C13[0]), // expected_vtbl_contents
  &(vtt_S7822C13[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S7822C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7822C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7822C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C14  : S7822C12 , S7822C5 , virtual S2265C38 {
  virtual  ~S7822C14(); // _ZN8S7822C14D2Ev
  S7822C14(); // tgen
};
//SIG(-1 S7822C14) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S7822C14 ::~S7822C14(){ note_dtor("S7822C14", this);}
S7822C14 ::S7822C14(){ note_ctor("S7822C14", this);} // tgen

static void Test_S7822C14()
{
  extern Class_Descriptor cd_S7822C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7822C14, buf);
    S7822C14 *dp, &lv = *(dp=new (buf) S7822C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7822C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C14)");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*), ABISELECT(8,4), "S7822C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*), ABISELECT(16,8), "S7822C14");
    check_base_class_offset(lv, (S7822C5*)(S7822C12*), ABISELECT(16,8), "S7822C14");
    check_base_class_offset(lv, (S7822C12*), ABISELECT(8,4), "S7822C14");
    /*is_ambiguous_... S7822C14::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(40,20), "S7822C14");
    /*is_ambiguous_... S7822C14::S7822C5 */ AMB_check_base_class_offset(lv, (S7822C5*), ABISELECT(40,20), "S7822C14");
    check_base_class_offset(lv, (S2265C38*), 0, "S7822C14");
    test_class_info(&lv, &cd_S7822C14);
    dp->~S7822C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C14(Test_S7822C14, "S7822C14", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7822C14C1Ev();
extern void _ZN8S7822C14D2Ev();
Name_Map name_map_S7822C14[] = {
  NSPAIR(_ZN8S7822C14C1Ev),
  NSPAIR(_ZN8S7822C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7822C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7822C14[];
extern void _ZN8S7822C14D1Ev();
extern void _ZN8S7822C14D0Ev();
static  VTBL_ENTRY vtc_S7822C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C14[0]),
  (VTBL_ENTRY)&_ZN8S7822C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7822C14D0Ev,
};
extern VTBL_ENTRY _ZTV8S7822C14[];
static  VTT_ENTRY vtt_S7822C14[] = {
  {&(_ZTV8S7822C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7822C14[];
extern  VTBL_ENTRY _ZTV8S7822C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C14[];
Class_Descriptor cd_S7822C14 = {  "S7822C14", // class name
  bases_S7822C14, 7,
  &(vtc_S7822C14[0]), // expected_vtbl_contents
  &(vtt_S7822C14[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7822C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7822C14),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7822C14),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C2  : virtual S7822C3 , virtual S7822C10 , virtual S7822C13 , virtual S7822C14 , S7822C11 {
  virtual  ~S7822C2(); // _ZN7S7822C2D2Ev
  S7822C2(); // tgen
};
//SIG(-1 S7822C2) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd Fl} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S7822C2 ::~S7822C2(){ note_dtor("S7822C2", this);}
S7822C2 ::S7822C2(){ note_ctor("S7822C2", this);} // tgen

static void Test_S7822C2()
{
  extern Class_Descriptor cd_S7822C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S7822C2, buf);
    S7822C2 *dp, &lv = *(dp=new (buf) S7822C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S7822C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C2)");
    /*is_ambiguous_... S7822C2::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(72,52), "S7822C2");
    check_base_class_offset(lv, (S7822C5*)(S7822C4*), ABISELECT(72,52), "S7822C2");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(72,52), "S7822C2");
    /*is_ambiguous_... S7822C13::S7822C5 */ AMB_check_base_class_offset(lv, (S7822C5*)(S7822C13*), ABISELECT(72,52), "S7822C2");
    /*is_ambiguous_... S7822C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C4*), ABISELECT(96,64), "S7822C2");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(96,64), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C11*), ABISELECT(96,64), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C11*), ABISELECT(96,64), "S7822C2");
    check_base_class_offset(lv, (S7822C7*)(S7822C4*), ABISELECT(8,4), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C7*)(S7822C11*), ABISELECT(8,4), "S7822C2");
    check_base_class_offset(lv, (S7822C7*)(S7822C13*), ABISELECT(8,4), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C7*)(S7822C11*), ABISELECT(8,4), "S7822C2");
    check_base_class_offset(lv, (S2265C38*)(S7822C4*), ABISELECT(104,68), "S7822C2");
    check_base_class_offset(lv, (S2265C38*)(S7822C14*), ABISELECT(104,68), "S7822C2");
    check_base_class_offset(lv, (S7822C4*)(S7822C3*), ABISELECT(24,12), "S7822C2");
    check_base_class_offset(lv, (S7822C4*)(S7822C13*), ABISELECT(24,12), "S7822C2");
    /*is_ambiguous_... S7822C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C3*), ABISELECT(8,4), "S7822C2");
    check_base_class_offset(lv, (S2265C28*)(S7822C3*), 0, "S7822C2");
    check_base_class_offset(lv, (S7822C3*), ABISELECT(8,4), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C11*), ABISELECT(112,72), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*), ABISELECT(160,96), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*), ABISELECT(168,100), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C12 */ AMB_check_base_class_offset(lv, (S7822C5*)(S7822C12*), ABISELECT(168,100), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C12*)(S7822C11*), ABISELECT(160,96), "S7822C2");
    check_base_class_offset(lv, (S7822C12*)(S7822C13*), ABISELECT(160,96), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C12*)(S7822C11*), ABISELECT(160,96), "S7822C2");
    check_base_class_offset(lv, (S7822C11*)(S7822C10*), ABISELECT(112,72), "S7822C2");
    check_base_class_offset(lv, (S7822C10*), ABISELECT(112,72), "S7822C2");
    /*is_ambiguous_... S7822C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C13*), ABISELECT(192,112), "S7822C2");
    check_base_class_offset(lv, (S7822C13*), ABISELECT(192,112), "S7822C2");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*)(S7822C14*), ABISELECT(216,124), "S7822C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*)(S7822C14*), ABISELECT(224,128), "S7822C2");
    check_base_class_offset(lv, (S7822C5*)(S7822C12*)(S7822C14*), ABISELECT(224,128), "S7822C2");
    check_base_class_offset(lv, (S7822C12*)(S7822C14*), ABISELECT(216,124), "S7822C2");
    /*is_ambiguous_... S7822C14::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C14*), ABISELECT(248,140), "S7822C2");
    /*is_ambiguous_... S7822C14::S7822C5 */ AMB_check_base_class_offset(lv, (S7822C5*)(S7822C14*), ABISELECT(248,140), "S7822C2");
    check_base_class_offset(lv, (S7822C14*), ABISELECT(208,120), "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C11*), 0, "S7822C2");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C11*), 0, "S7822C2");
    test_class_info(&lv, &cd_S7822C2);
    dp->~S7822C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C2(Test_S7822C2, "S7822C2", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN7S7822C2C1Ev();
extern void _ZN7S7822C2D2Ev();
Name_Map name_map_S7822C2[] = {
  NSPAIR(_ZN7S7822C2C1Ev),
  NSPAIR(_ZN7S7822C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C4;
extern VTBL_ENTRY _ZTI7S7822C4[];
extern  VTBL_ENTRY _ZTV7S7822C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S7822C3;
extern VTBL_ENTRY _ZTI7S7822C3[];
extern  VTBL_ENTRY _ZTV7S7822C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S7822C11;
extern VTBL_ENTRY _ZTI8S7822C11[];
extern  VTBL_ENTRY _ZTV8S7822C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C11[];
extern Class_Descriptor cd_S7822C10;
extern VTBL_ENTRY _ZTI8S7822C10[];
extern  VTBL_ENTRY _ZTV8S7822C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C13;
extern VTBL_ENTRY _ZTI8S7822C13[];
extern  VTBL_ENTRY _ZTV8S7822C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C14;
extern VTBL_ENTRY _ZTI8S7822C14[];
extern  VTBL_ENTRY _ZTV8S7822C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C11;
extern VTBL_ENTRY _ZTI8S7822C11[];
extern  VTBL_ENTRY _ZTV8S7822C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C11[];
static Base_Class bases_S7822C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7822C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7822C4,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7822C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7822C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7822C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7822C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7822C14,    ABISELECT(208,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7822C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7822C2[];
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void _ZN7S7822C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void _ZN7S7822C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7822C2D1Ev,_ZThn4_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7822C2D0Ev,_ZThn4_N7S7822C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7822C2D1Ev,_ZThn12_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7822C2D0Ev,_ZThn12_N7S7822C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7822C2D1Ev,_ZThn72_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7822C2D0Ev,_ZThn72_N7S7822C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7822C2D1Ev,_ZThn112_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7822C2D0Ev,_ZThn112_N7S7822C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7822C2D1Ev,_ZTv0_n16_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7822C2D1Ev,_ZThn120_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7822C2D0Ev,_ZTv0_n16_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7822C2D0Ev,_ZThn120_N7S7822C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7822C2[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7822C2D1Ev,_ZTv0_n16_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7822C2D0Ev,_ZTv0_n16_N7S7822C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7822C2[];
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void _ZN8S7822C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void _ZN8S7822C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C11__A__7S7822C2[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S7822C11D1Ev,_ZThn4_N8S7822C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void ABISELECT(_ZThn8_N8S7822C11D0Ev,_ZThn4_N8S7822C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C11__A__7S7822C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev)();
extern void _ZN7S7822C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev)();
extern void _ZN7S7822C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C3__7S7822C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7822C3D1Ev,_ZThn8_N7S7822C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7822C3D0Ev,_ZThn8_N7S7822C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__7S7822C3__7S7822C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7822C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void _ZN7S7822C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
extern void _ZN7S7822C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__7S7822C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C4__7S7822C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev)();
extern void _ZN8S7822C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev)();
extern void _ZN8S7822C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C10__7S7822C2[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C10__7S7822C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7822C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void _ZN8S7822C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void _ZN8S7822C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C11__7S7822C2[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C11__7S7822C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void _ZN8S7822C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
extern void _ZN8S7822C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C13__7S7822C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C13__7S7822C2[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C4__8S7822C13__7S7822C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern void _ZN8S7822C14D1Ev();
extern void _ZN8S7822C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7822C14__7S7822C2[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C14[0]),
  (VTBL_ENTRY)&_ZN8S7822C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7822C14D0Ev,
};
static  VTT_ENTRY vtt_S7822C2[] = {
  {&(_ZTV7S7822C2[15]),  15,64},
  {&(_tg__ZTV8S7822C11__A__7S7822C2[7]),  7,9},
  {&(_tg__ZTV7S7822C7__8S7822C11__A__7S7822C2[5]),  5,7},
  {&(_ZTV7S7822C2[26]),  26,64},
  {&(_ZTV7S7822C2[35]),  35,64},
  {&(_ZTV7S7822C2[26]),  26,64},
  {&(_ZTV7S7822C2[45]),  45,64},
  {&(_ZTV7S7822C2[45]),  45,64},
  {&(_ZTV7S7822C2[56]),  56,64},
  {&(_ZTV7S7822C2[62]),  62,64},
  {&(_tg__ZTV7S7822C3__7S7822C2[9]),  9,11},
  {&(_tg__ZTV7S7822C4__7S7822C3__7S7822C2[7]),  7,9},
  {&(_tg__ZTV7S7822C3__7S7822C2[9]),  9,11},
  {&(_tg__ZTV7S7822C4__7S7822C2[7]),  7,9},
  {&(_tg__ZTV7S7822C7__7S7822C4__7S7822C2[5]),  5,7},
  {&(_tg__ZTV7S7822C7__7S7822C2[4]),  4,6},
  {&(_tg__ZTV8S7822C10__7S7822C2[8]),  8,10},
  {&(_tg__ZTV8S7822C10__7S7822C2[8]),  8,10},
  {&(_tg__ZTV7S7822C7__8S7822C10__7S7822C2[5]),  5,7},
  {&(_tg__ZTV8S7822C11__7S7822C2[7]),  7,9},
  {&(_tg__ZTV7S7822C7__8S7822C11__7S7822C2[5]),  5,7},
  {&(_tg__ZTV8S7822C13__7S7822C2[9]),  9,11},
  {&(_tg__ZTV7S7822C7__8S7822C13__7S7822C2[5]),  5,7},
  {&(_tg__ZTV7S7822C4__8S7822C13__7S7822C2[7]),  7,9},
  {&(_tg__ZTV8S7822C14__7S7822C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7822C2[];
extern  VTBL_ENTRY _ZTV7S7822C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C2[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7822C3D0Ev,_ZThn8_N7S7822C3D0Ev),
  (VTBL_ENTRY)_ZN7S7822C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7822C3D1Ev,_ZThn8_N7S7822C3D1Ev),
  (VTBL_ENTRY)_ZN7S7822C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7822C11D0Ev,_ZThn4_N8S7822C11D0Ev),
  (VTBL_ENTRY)_ZN8S7822C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7822C11D1Ev,_ZThn4_N8S7822C11D1Ev),
  (VTBL_ENTRY)_ZN8S7822C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7822C2D0Ev,_ZTv0_n16_N7S7822C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7822C2D0Ev,_ZThn120_N7S7822C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7822C2D1Ev,_ZTv0_n16_N7S7822C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7822C2D1Ev,_ZThn120_N7S7822C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7822C2D0Ev,_ZThn112_N7S7822C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7822C2D0Ev,_ZThn72_N7S7822C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7822C2D0Ev,_ZThn12_N7S7822C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7822C2D0Ev,_ZThn4_N7S7822C2D0Ev),
  (VTBL_ENTRY)_ZN7S7822C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7822C2D1Ev,_ZThn112_N7S7822C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7822C2D1Ev,_ZThn72_N7S7822C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7822C2D1Ev,_ZThn12_N7S7822C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7822C2D1Ev,_ZThn4_N7S7822C2D1Ev),
  (VTBL_ENTRY)_ZN7S7822C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7822C2 = {  "S7822C2", // class name
  bases_S7822C2, 27,
  &(vtc_S7822C2[0]), // expected_vtbl_contents
  &(vtt_S7822C2[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI7S7822C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7822C2),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7822C2),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7822C1  : S7822C2 {
  virtual  ~S7822C1(); // _ZN7S7822C1D2Ev
  S7822C1(); // tgen
};
//SIG(1 S7822C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd Fl} VBC14{ BC12 BC5 VBC8 vd} BC11 vd} vd}


 S7822C1 ::~S7822C1(){ note_dtor("S7822C1", this);}
S7822C1 ::S7822C1(){ note_ctor("S7822C1", this);} // tgen

static void Test_S7822C1()
{
  extern Class_Descriptor cd_S7822C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S7822C1, buf);
    S7822C1 *dp, &lv = *(dp=new (buf) S7822C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S7822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7822C1)");
    /*is_ambiguous_... S7822C1::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*), ABISELECT(72,52), "S7822C1");
    check_base_class_offset(lv, (S7822C5*)(S7822C4*), ABISELECT(72,52), "S7822C1");
    check_base_class_offset(lv, (S7822C5*)(S7822C7*), ABISELECT(72,52), "S7822C1");
    /*is_ambiguous_... S7822C13::S7822C5 */ AMB_check_base_class_offset(lv, (S7822C5*)(S7822C13*), ABISELECT(72,52), "S7822C1");
    /*is_ambiguous_... S7822C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C4*), ABISELECT(96,64), "S7822C1");
    /*is_ambiguous_... S7822C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C7*), ABISELECT(96,64), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C11*), ABISELECT(96,64), "S7822C1");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C11*)(S7822C2*), ABISELECT(96,64), "S7822C1");
    check_base_class_offset(lv, (S7822C7*)(S7822C4*), ABISELECT(8,4), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C7*)(S7822C11*), ABISELECT(8,4), "S7822C1");
    check_base_class_offset(lv, (S7822C7*)(S7822C13*), ABISELECT(8,4), "S7822C1");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C7*)(S7822C11*)(S7822C2*), ABISELECT(8,4), "S7822C1");
    check_base_class_offset(lv, (S2265C38*)(S7822C4*), ABISELECT(104,68), "S7822C1");
    check_base_class_offset(lv, (S2265C38*)(S7822C14*), ABISELECT(104,68), "S7822C1");
    check_base_class_offset(lv, (S7822C4*)(S7822C3*), ABISELECT(24,12), "S7822C1");
    check_base_class_offset(lv, (S7822C4*)(S7822C13*), ABISELECT(24,12), "S7822C1");
    /*is_ambiguous_... S7822C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C3*), ABISELECT(8,4), "S7822C1");
    check_base_class_offset(lv, (S2265C28*)(S7822C3*), 0, "S7822C1");
    check_base_class_offset(lv, (S7822C3*)(S7822C2*), ABISELECT(8,4), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C11*), ABISELECT(112,72), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*), ABISELECT(160,96), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*), ABISELECT(168,100), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C12 */ AMB_check_base_class_offset(lv, (S7822C5*)(S7822C12*), ABISELECT(168,100), "S7822C1");
    /*is_ambiguous_... S7822C1::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C12*)(S7822C11*), ABISELECT(160,96), "S7822C1");
    check_base_class_offset(lv, (S7822C12*)(S7822C13*), ABISELECT(160,96), "S7822C1");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C12*)(S7822C11*)(S7822C2*), ABISELECT(160,96), "S7822C1");
    check_base_class_offset(lv, (S7822C11*)(S7822C10*), ABISELECT(112,72), "S7822C1");
    check_base_class_offset(lv, (S7822C10*)(S7822C2*), ABISELECT(112,72), "S7822C1");
    /*is_ambiguous_... S7822C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C13*), ABISELECT(192,112), "S7822C1");
    check_base_class_offset(lv, (S7822C13*)(S7822C2*), ABISELECT(192,112), "S7822C1");
    /*is_ambiguous_... S7822C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C12*)(S7822C14*), ABISELECT(216,124), "S7822C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C12*)(S7822C14*), ABISELECT(224,128), "S7822C1");
    check_base_class_offset(lv, (S7822C5*)(S7822C12*)(S7822C14*), ABISELECT(224,128), "S7822C1");
    check_base_class_offset(lv, (S7822C12*)(S7822C14*), ABISELECT(216,124), "S7822C1");
    /*is_ambiguous_... S7822C14::S7822C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7822C5*)(S7822C14*), ABISELECT(248,140), "S7822C1");
    /*is_ambiguous_... S7822C14::S7822C5 */ AMB_check_base_class_offset(lv, (S7822C5*)(S7822C14*), ABISELECT(248,140), "S7822C1");
    check_base_class_offset(lv, (S7822C14*)(S7822C2*), ABISELECT(208,120), "S7822C1");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S7822C11*)(S7822C2*), 0, "S7822C1");
    /*is_ambiguous_... S7822C2::S7822C11 */ AMB_check_base_class_offset(lv, (S7822C11*)(S7822C2*), 0, "S7822C1");
    check_base_class_offset(lv, (S7822C2*), 0, "S7822C1");
    test_class_info(&lv, &cd_S7822C1);
    dp->~S7822C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7822C1(Test_S7822C1, "S7822C1", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN7S7822C1C1Ev();
extern void _ZN7S7822C1D2Ev();
Name_Map name_map_S7822C1[] = {
  NSPAIR(_ZN7S7822C1C1Ev),
  NSPAIR(_ZN7S7822C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C7;
extern VTBL_ENTRY _ZTI7S7822C7[];
extern  VTBL_ENTRY _ZTV7S7822C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C4;
extern VTBL_ENTRY _ZTI7S7822C4[];
extern  VTBL_ENTRY _ZTV7S7822C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S7822C3;
extern VTBL_ENTRY _ZTI7S7822C3[];
extern  VTBL_ENTRY _ZTV7S7822C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S7822C11;
extern VTBL_ENTRY _ZTI8S7822C11[];
extern  VTBL_ENTRY _ZTV8S7822C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C11[];
extern Class_Descriptor cd_S7822C10;
extern VTBL_ENTRY _ZTI8S7822C10[];
extern  VTBL_ENTRY _ZTV8S7822C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C13;
extern VTBL_ENTRY _ZTI8S7822C13[];
extern  VTBL_ENTRY _ZTV8S7822C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C12;
extern VTBL_ENTRY _ZTI8S7822C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7822C5;
extern VTBL_ENTRY _ZTI7S7822C5[];
extern Class_Descriptor cd_S7822C14;
extern VTBL_ENTRY _ZTI8S7822C14[];
extern  VTBL_ENTRY _ZTV8S7822C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7822C11;
extern VTBL_ENTRY _ZTI8S7822C11[];
extern  VTBL_ENTRY _ZTV8S7822C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7822C11[];
extern Class_Descriptor cd_S7822C2;
extern VTBL_ENTRY _ZTI7S7822C2[];
extern  VTBL_ENTRY _ZTV7S7822C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C2[];
static Base_Class bases_S7822C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7822C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7822C4,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7822C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7822C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7822C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7822C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7822C12,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7822C5,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7822C14,    ABISELECT(208,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7822C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7822C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7822C1[];
extern void ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev)();
extern void _ZN7S7822C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev)();
extern void _ZN7S7822C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7822C1D1Ev,_ZThn4_N7S7822C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev)();
extern void ABISELECT(_ZThn8_N7S7822C1D0Ev,_ZThn4_N7S7822C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7822C1D1Ev,_ZThn12_N7S7822C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7822C1D0Ev,_ZThn12_N7S7822C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7822C1D1Ev,_ZThn72_N7S7822C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7822C1D0Ev,_ZThn72_N7S7822C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S7822C1D1Ev,_ZThn112_N7S7822C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S7822C1D0Ev,_ZThn112_N7S7822C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7822C1D1Ev,_ZTv0_n16_N7S7822C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7822C1D1Ev,_ZThn120_N7S7822C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7822C1D0Ev,_ZTv0_n16_N7S7822C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7822C1D0Ev,_ZThn120_N7S7822C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7822C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7822C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7822C1D1Ev,_ZTv0_n16_N7S7822C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7822C1D0Ev,_ZTv0_n16_N7S7822C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7822C1[];
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void _ZN7S7822C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void _ZN7S7822C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C2__7S7822C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void _ZN8S7822C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void _ZN8S7822C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C117S7822C2__A1__7S7822C1[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S7822C11D1Ev,_ZThn4_N8S7822C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void ABISELECT(_ZThn8_N8S7822C11D0Ev,_ZThn4_N8S7822C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C117S7822C2__A1__7S7822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7822C2D1Ev,_ZThn4_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7822C2D0Ev,_ZThn4_N7S7822C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C3__7S7822C2__7S7822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7822C2D1Ev,_ZThn12_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7822C2D0Ev,_ZThn12_N7S7822C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__7S7822C2__7S7822C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7822C2D1Ev,_ZThn72_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7822C2D0Ev,_ZThn72_N7S7822C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C10__7S7822C2__7S7822C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7822C2D1Ev,_ZThn112_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7822C2D0Ev,_ZThn112_N7S7822C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C13__7S7822C2__7S7822C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7822C2D1Ev,_ZTv0_n16_N7S7822C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7822C2D1Ev,_ZThn120_N7S7822C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7822C2D0Ev,_ZTv0_n16_N7S7822C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7822C2D0Ev,_ZThn120_N7S7822C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C14__7S7822C2__7S7822C1[] = {
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI7S7822C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7822C2D1Ev,_ZTv0_n16_N7S7822C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7822C2D0Ev,_ZTv0_n16_N7S7822C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev)();
extern void _ZN7S7822C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev)();
extern void _ZN7S7822C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C3__7S7822C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S7822C3D1Ev,_ZThn8_N7S7822C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S7822C3D0Ev,_ZThn8_N7S7822C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__7S7822C3__7S7822C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7822C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void _ZN7S7822C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
extern void _ZN7S7822C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7822C4__7S7822C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C4__7S7822C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7822C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev),
};
extern void _ZN7S7822C7D1Ev();
extern void _ZN7S7822C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7822C7__7S7822C1[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7822C7[0]),
  (VTBL_ENTRY)&_ZN7S7822C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7822C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev)();
extern void _ZN8S7822C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev)();
extern void _ZN8S7822C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C10__7S7822C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C10__7S7822C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7822C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void _ZN8S7822C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
extern void _ZN8S7822C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C11__7S7822C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C11__7S7822C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7822C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void _ZN8S7822C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
extern void _ZN8S7822C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7822C13__7S7822C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C7__8S7822C13__7S7822C1[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7822C4__8S7822C13__7S7822C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI8S7822C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev),
};
extern void _ZN8S7822C14D1Ev();
extern void _ZN8S7822C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7822C14__7S7822C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7822C14[0]),
  (VTBL_ENTRY)&_ZN8S7822C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7822C14D0Ev,
};
static  VTT_ENTRY vtt_S7822C1[] = {
  {&(_ZTV7S7822C1[15]),  15,64},
  {&(_tg__ZTV7S7822C2__7S7822C1[15]),  15,17},
  {&(_tg__ZTV8S7822C117S7822C2__A1__7S7822C1[7]),  7,9},
  {&(_tg__ZTV7S7822C7__8S7822C117S7822C2__A1__7S7822C1[5]),  5,7},
  {&(_tg__ZTV7S7822C3__7S7822C2__7S7822C1[9]),  9,11},
  {&(_tg__ZTV7S7822C4__7S7822C2__7S7822C1[7]),  7,9},
  {&(_tg__ZTV7S7822C3__7S7822C2__7S7822C1[9]),  9,11},
  {&(_tg__ZTV8S7822C10__7S7822C2__7S7822C1[8]),  8,10},
  {&(_tg__ZTV8S7822C10__7S7822C2__7S7822C1[8]),  8,10},
  {&(_tg__ZTV8S7822C13__7S7822C2__7S7822C1[9]),  9,11},
  {&(_tg__ZTV8S7822C14__7S7822C2__7S7822C1[4]),  4,6},
  {&(_ZTV7S7822C1[26]),  26,64},
  {&(_ZTV7S7822C1[35]),  35,64},
  {&(_ZTV7S7822C1[26]),  26,64},
  {&(_ZTV7S7822C1[45]),  45,64},
  {&(_ZTV7S7822C1[45]),  45,64},
  {&(_ZTV7S7822C1[56]),  56,64},
  {&(_ZTV7S7822C1[62]),  62,64},
  {&(_tg__ZTV7S7822C3__7S7822C1[9]),  9,11},
  {&(_tg__ZTV7S7822C4__7S7822C3__7S7822C1[7]),  7,9},
  {&(_tg__ZTV7S7822C3__7S7822C1[9]),  9,11},
  {&(_tg__ZTV7S7822C4__7S7822C1[7]),  7,9},
  {&(_tg__ZTV7S7822C7__7S7822C4__7S7822C1[5]),  5,7},
  {&(_tg__ZTV7S7822C7__7S7822C1[4]),  4,6},
  {&(_tg__ZTV8S7822C10__7S7822C1[8]),  8,10},
  {&(_tg__ZTV8S7822C10__7S7822C1[8]),  8,10},
  {&(_tg__ZTV7S7822C7__8S7822C10__7S7822C1[5]),  5,7},
  {&(_tg__ZTV8S7822C11__7S7822C1[7]),  7,9},
  {&(_tg__ZTV7S7822C7__8S7822C11__7S7822C1[5]),  5,7},
  {&(_tg__ZTV8S7822C13__7S7822C1[9]),  9,11},
  {&(_tg__ZTV7S7822C7__8S7822C13__7S7822C1[5]),  5,7},
  {&(_tg__ZTV7S7822C4__8S7822C13__7S7822C1[7]),  7,9},
  {&(_tg__ZTV8S7822C14__7S7822C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7822C1[];
extern  VTBL_ENTRY _ZTV7S7822C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7822C1[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C13D0Ev,_ZTv0_n20_N8S7822C13D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C13D1Ev,_ZTv0_n20_N8S7822C13D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C10D0Ev,_ZTv0_n20_N8S7822C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C10D1Ev,_ZTv0_n20_N8S7822C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D0Ev,_ZTv0_n20_N7S7822C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C4D1Ev,_ZTv0_n20_N7S7822C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7822C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C3D0Ev,_ZTv0_n20_N7S7822C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7822C3D0Ev,_ZThn8_N7S7822C3D0Ev),
  (VTBL_ENTRY)_ZN7S7822C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C3D1Ev,_ZTv0_n20_N7S7822C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7822C3D1Ev,_ZThn8_N7S7822C3D1Ev),
  (VTBL_ENTRY)_ZN7S7822C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7822C2D0Ev,_ZTv0_n16_N7S7822C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7822C2D0Ev,_ZThn120_N7S7822C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7822C2D1Ev,_ZTv0_n16_N7S7822C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7822C2D1Ev,_ZThn120_N7S7822C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C11D0Ev,_ZTv0_n20_N8S7822C11D0Ev), // 
  (VTBL_ENTRY)_ZN8S7822C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7822C11D0Ev,_ZThn4_N8S7822C11D0Ev),
  (VTBL_ENTRY)_ZN8S7822C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7822C11D1Ev,_ZTv0_n20_N8S7822C11D1Ev), // 
  (VTBL_ENTRY)_ZN8S7822C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7822C11D1Ev,_ZThn4_N8S7822C11D1Ev),
  (VTBL_ENTRY)_ZN8S7822C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C2D0Ev,_ZTv0_n20_N7S7822C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7822C2D0Ev,_ZThn112_N7S7822C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7822C2D0Ev,_ZThn72_N7S7822C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7822C2D0Ev,_ZThn12_N7S7822C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7822C2D0Ev,_ZThn4_N7S7822C2D0Ev),
  (VTBL_ENTRY)_ZN7S7822C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C2D1Ev,_ZTv0_n20_N7S7822C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7822C2D1Ev,_ZThn112_N7S7822C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7822C2D1Ev,_ZThn72_N7S7822C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7822C2D1Ev,_ZThn12_N7S7822C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7822C2D1Ev,_ZThn4_N7S7822C2D1Ev),
  (VTBL_ENTRY)_ZN7S7822C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7822C1D0Ev,_ZTv0_n16_N7S7822C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7822C1D0Ev,_ZThn120_N7S7822C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7822C1D1Ev,_ZTv0_n16_N7S7822C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7822C1D1Ev,_ZThn120_N7S7822C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C1D0Ev,_ZTv0_n20_N7S7822C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7822C1D0Ev,_ZThn112_N7S7822C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7822C1D0Ev,_ZThn72_N7S7822C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7822C1D0Ev,_ZThn12_N7S7822C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7822C1D0Ev,_ZThn4_N7S7822C1D0Ev),
  (VTBL_ENTRY)_ZN7S7822C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7822C1D1Ev,_ZTv0_n20_N7S7822C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7822C1D1Ev,_ZThn112_N7S7822C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7822C1D1Ev,_ZThn72_N7S7822C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7822C1D1Ev,_ZThn12_N7S7822C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7822C1D1Ev,_ZThn4_N7S7822C1D1Ev),
  (VTBL_ENTRY)_ZN7S7822C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7822C1 = {  "S7822C1", // class name
  bases_S7822C1, 28,
  &(vtc_S7822C1[0]), // expected_vtbl_contents
  &(vtt_S7822C1[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI7S7822C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7822C1),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7822C1),33, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C5  : S5217C60_nt {
  void *s21107c5f0[2];
};
//SIG(-1 S21107C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S21107C5()
{
  extern Class_Descriptor cd_S21107C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21107C5, buf);
    S21107C5 &lv = *(new (buf) S21107C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21107C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S21107C5");
    check_field_offset(lv, s21107c5f0, ABISELECT(8,4), "S21107C5.s21107c5f0");
    test_class_info(&lv, &cd_S21107C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C5(Test_S21107C5, "S21107C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S21107C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21107C5[];
Class_Descriptor cd_S21107C5 = {  "S21107C5", // class name
  bases_S21107C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21107C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C7  : virtual S5217C60_nt , virtual S21107C5 {
  virtual  ~S21107C7(); // _ZN8S21107C7D2Ev
  S21107C7(); // tgen
};
//SIG(-1 S21107C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S21107C7 ::~S21107C7(){ note_dtor("S21107C7", this);}
S21107C7 ::S21107C7(){ note_ctor("S21107C7", this);} // tgen

static void Test_S21107C7()
{
  extern Class_Descriptor cd_S21107C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21107C7, buf);
    S21107C7 *dp, &lv = *(dp=new (buf) S21107C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21107C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C7)");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S21107C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(16,8), "S21107C7");
    check_base_class_offset(lv, (S21107C5*), ABISELECT(16,8), "S21107C7");
    test_class_info(&lv, &cd_S21107C7);
    dp->~S21107C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C7(Test_S21107C7, "S21107C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21107C7C1Ev();
extern void _ZN8S21107C7D2Ev();
Name_Map name_map_S21107C7[] = {
  NSPAIR(_ZN8S21107C7C1Ev),
  NSPAIR(_ZN8S21107C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
static Base_Class bases_S21107C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21107C7[];
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY vtc_S21107C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S21107C7[];
static  VTT_ENTRY vtt_S21107C7[] = {
  {&(_ZTV8S21107C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
Class_Descriptor cd_S21107C7 = {  "S21107C7", // class name
  bases_S21107C7, 3,
  &(vtc_S21107C7[0]), // expected_vtbl_contents
  &(vtt_S21107C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21107C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21107C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21107C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C4  : virtual S21107C5 , virtual S5217C60_nt , virtual S21107C7 , virtual S2265C38 {
  int s21107c4f0[9];
  virtual  ~S21107C4(); // _ZN8S21107C4D2Ev
  S21107C4(); // tgen
};
//SIG(-1 S21107C4) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S21107C4 ::~S21107C4(){ note_dtor("S21107C4", this);}
S21107C4 ::S21107C4(){ note_ctor("S21107C4", this);} // tgen

static void Test_S21107C4()
{
  extern Class_Descriptor cd_S21107C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S21107C4, buf);
    S21107C4 *dp, &lv = *(dp=new (buf) S21107C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S21107C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C4)");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(48,40), "S21107C4");
    check_base_class_offset(lv, (S21107C5*), ABISELECT(48,40), "S21107C4");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(48,40), "S21107C4");
    /*is_ambiguous_... S21107C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S21107C4");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(72,52), "S21107C4");
    check_base_class_offset(lv, (S21107C7*), 0, "S21107C4");
    check_base_class_offset(lv, (S2265C38*), 0, "S21107C4");
    check_field_offset(lv, s21107c4f0, ABISELECT(8,4), "S21107C4.s21107c4f0");
    test_class_info(&lv, &cd_S21107C4);
    dp->~S21107C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C4(Test_S21107C4, "S21107C4", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S21107C4C1Ev();
extern void _ZN8S21107C4D2Ev();
Name_Map name_map_S21107C4[] = {
  NSPAIR(_ZN8S21107C4C1Ev),
  NSPAIR(_ZN8S21107C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S21107C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21107C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21107C4[];
extern void _ZN8S21107C4D1Ev();
extern void _ZN8S21107C4D0Ev();
static  VTBL_ENTRY vtc_S21107C4[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&_ZN8S21107C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S21107C4[];
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
static  VTT_ENTRY vtt_S21107C4[] = {
  {&(_ZTV8S21107C4[7]),  7,9},
  {&(_ZTV8S21107C4[7]),  7,9},
  {&(_tg__ZTV8S21107C7__8S21107C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21107C4[];
extern  VTBL_ENTRY _ZTV8S21107C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C4[];
Class_Descriptor cd_S21107C4 = {  "S21107C4", // class name
  bases_S21107C4, 5,
  &(vtc_S21107C4[0]), // expected_vtbl_contents
  &(vtt_S21107C4[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S21107C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21107C4),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21107C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C3  : virtual S21107C4 , S2265C38 , virtual S2265C28 {
  void *s21107c3f0;
  ~S21107C3(); // tgen
  S21107C3(); // tgen
};
//SIG(-1 S21107C3) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S21107C3 ::~S21107C3(){ note_dtor("S21107C3", this);} // tgen
S21107C3 ::S21107C3(){ note_ctor("S21107C3", this);} // tgen

static void Test_S21107C3()
{
  extern Class_Descriptor cd_S21107C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S21107C3, buf);
    S21107C3 *dp, &lv = *(dp=new (buf) S21107C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S21107C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C3)");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(64,48), "S21107C3");
    check_base_class_offset(lv, (S21107C5*)(S21107C4*), ABISELECT(64,48), "S21107C3");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(64,48), "S21107C3");
    /*is_ambiguous_... S21107C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C4*), ABISELECT(88,60), "S21107C3");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(88,60), "S21107C3");
    check_base_class_offset(lv, (S21107C7*)(S21107C4*), 0, "S21107C3");
    check_base_class_offset(lv, (S2265C38*)(S21107C4*), ABISELECT(96,64), "S21107C3");
    check_base_class_offset(lv, (S21107C4*), ABISELECT(16,8), "S21107C3");
    /*is_ambiguous_... S21107C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S21107C3");
    check_base_class_offset(lv, (S2265C28*), 0, "S21107C3");
    check_field_offset(lv, s21107c3f0, ABISELECT(8,4), "S21107C3.s21107c3f0");
    test_class_info(&lv, &cd_S21107C3);
    dp->~S21107C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C3(Test_S21107C3, "S21107C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN8S21107C3C1Ev();
extern void _ZN8S21107C3D1Ev();
Name_Map name_map_S21107C3[] = {
  NSPAIR(_ZN8S21107C3C1Ev),
  NSPAIR(_ZN8S21107C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C4;
extern VTBL_ENTRY _ZTI8S21107C4[];
extern  VTBL_ENTRY _ZTV8S21107C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S21107C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21107C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21107C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21107C3[];
extern void _ZN8S21107C3D1Ev();
extern void _ZN8S21107C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21107C3D1Ev,_ZThn8_N8S21107C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S21107C3D0Ev,_ZThn8_N8S21107C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21107C3[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C3[0]),
  (VTBL_ENTRY)&_ZN8S21107C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C3D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S21107C3[];
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void _ZN8S21107C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
extern void _ZN8S21107C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__8S21107C3[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C4__8S21107C3[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C3[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
static  VTT_ENTRY vtt_S21107C3[] = {
  {&(_ZTV8S21107C3[9]),  9,20},
  {&(_ZTV8S21107C3[18]),  18,20},
  {&(_ZTV8S21107C3[9]),  9,20},
  {&(_tg__ZTV8S21107C4__8S21107C3[7]),  7,9},
  {&(_tg__ZTV8S21107C7__8S21107C4__8S21107C3[5]),  5,7},
  {&(_tg__ZTV8S21107C7__8S21107C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21107C3[];
extern  VTBL_ENTRY _ZTV8S21107C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C3[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21107C3D0Ev,_ZThn8_N8S21107C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21107C3D1Ev,_ZThn8_N8S21107C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21107C3 = {  "S21107C3", // class name
  bases_S21107C3, 8,
  &(vtc_S21107C3[0]), // expected_vtbl_contents
  &(vtt_S21107C3[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI8S21107C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21107C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21107C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C12  : S5217C60_nt , S21107C5 {
};
//SIG(-1 S21107C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S21107C12()
{
  extern Class_Descriptor cd_S21107C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21107C12, buf);
    S21107C12 &lv = *(new (buf) S21107C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21107C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C12)");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S21107C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(8,4), "S21107C12");
    check_base_class_offset(lv, (S21107C5*), ABISELECT(8,4), "S21107C12");
    test_class_info(&lv, &cd_S21107C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C12(Test_S21107C12, "S21107C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
static Base_Class bases_S21107C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21107C12[];
Class_Descriptor cd_S21107C12 = {  "S21107C12", // class name
  bases_S21107C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S21107C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C11  : virtual S5217C60_nt , S2265C38 , virtual S21107C12 , virtual S21107C7 {
  ~S21107C11(); // tgen
  S21107C11(); // tgen
};
//SIG(-1 S21107C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S21107C11 ::~S21107C11(){ note_dtor("S21107C11", this);} // tgen
S21107C11 ::S21107C11(){ note_ctor("S21107C11", this);} // tgen

static void Test_S21107C11()
{
  extern Class_Descriptor cd_S21107C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S21107C11, buf);
    S21107C11 *dp, &lv = *(dp=new (buf) S21107C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S21107C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C11)");
    /*is_ambiguous_... S21107C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S21107C11");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(8,4), "S21107C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S21107C11");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*), ABISELECT(16,8), "S21107C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*), ABISELECT(24,12), "S21107C11");
    check_base_class_offset(lv, (S21107C5*)(S21107C12*), ABISELECT(24,12), "S21107C11");
    check_base_class_offset(lv, (S21107C12*), ABISELECT(16,8), "S21107C11");
    /*is_ambiguous_... S21107C11::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(48,24), "S21107C11");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(48,24), "S21107C11");
    check_base_class_offset(lv, (S21107C7*), 0, "S21107C11");
    test_class_info(&lv, &cd_S21107C11);
    dp->~S21107C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C11(Test_S21107C11, "S21107C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S21107C11C1Ev();
extern void _ZN9S21107C11D1Ev();
Name_Map name_map_S21107C11[] = {
  NSPAIR(_ZN9S21107C11C1Ev),
  NSPAIR(_ZN9S21107C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
static Base_Class bases_S21107C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21107C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21107C11[];
extern void _ZN9S21107C11D1Ev();
extern void _ZN9S21107C11D0Ev();
static  VTBL_ENTRY vtc_S21107C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&_ZN9S21107C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21107C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S21107C11[];
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
static  VTT_ENTRY vtt_S21107C11[] = {
  {&(_ZTV9S21107C11[7]),  7,9},
  {&(_ZTV9S21107C11[7]),  7,9},
  {&(_tg__ZTV8S21107C7__9S21107C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21107C11[];
extern  VTBL_ENTRY _ZTV9S21107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C11[];
Class_Descriptor cd_S21107C11 = {  "S21107C11", // class name
  bases_S21107C11, 9,
  &(vtc_S21107C11[0]), // expected_vtbl_contents
  &(vtt_S21107C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S21107C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21107C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21107C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C10  : virtual S21107C11 {
  ::S21107C7 s21107c10f0;
  ~S21107C10(); // tgen
  S21107C10(); // tgen
};
//SIG(-1 S21107C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S21107C10 ::~S21107C10(){ note_dtor("S21107C10", this);} // tgen
S21107C10 ::S21107C10(){ note_ctor("S21107C10", this);} // tgen

static void Test_S21107C10()
{
  extern Class_Descriptor cd_S21107C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S21107C10, buf);
    S21107C10 *dp, &lv = *(dp=new (buf) S21107C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S21107C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C10)");
    /*is_ambiguous_... S21107C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C11*), ABISELECT(48,24), "S21107C10");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(48,24), "S21107C10");
    check_base_class_offset(lv, (S2265C38*)(S21107C11*), 0, "S21107C10");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*), ABISELECT(56,28), "S21107C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*), ABISELECT(64,32), "S21107C10");
    check_base_class_offset(lv, (S21107C5*)(S21107C12*), ABISELECT(64,32), "S21107C10");
    check_base_class_offset(lv, (S21107C12*)(S21107C11*), ABISELECT(56,28), "S21107C10");
    /*is_ambiguous_... S21107C10::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(88,44), "S21107C10");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(88,44), "S21107C10");
    check_base_class_offset(lv, (S21107C7*)(S21107C11*), 0, "S21107C10");
    check_base_class_offset(lv, (S21107C11*), 0, "S21107C10");
    check_field_offset(lv, s21107c10f0, ABISELECT(8,4), "S21107C10.s21107c10f0");
    test_class_info(&lv, &cd_S21107C10);
    dp->~S21107C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C10(Test_S21107C10, "S21107C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S21107C10C1Ev();
extern void _ZN9S21107C10D1Ev();
Name_Map name_map_S21107C10[] = {
  NSPAIR(_ZN9S21107C10C1Ev),
  NSPAIR(_ZN9S21107C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
extern Class_Descriptor cd_S21107C11;
extern VTBL_ENTRY _ZTI9S21107C11[];
extern  VTBL_ENTRY _ZTV9S21107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C11[];
static Base_Class bases_S21107C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21107C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21107C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21107C10[];
extern void _ZN9S21107C10D1Ev();
extern void _ZN9S21107C10D0Ev();
static  VTBL_ENTRY vtc_S21107C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C10[0]),
  (VTBL_ENTRY)&_ZN9S21107C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21107C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S21107C10[];
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void _ZN9S21107C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void _ZN9S21107C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C11__9S21107C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
static  VTT_ENTRY vtt_S21107C10[] = {
  {&(_ZTV9S21107C10[8]),  8,10},
  {&(_ZTV9S21107C10[8]),  8,10},
  {&(_ZTV9S21107C10[8]),  8,10},
  {&(_tg__ZTV9S21107C11__9S21107C10[7]),  7,9},
  {&(_tg__ZTV9S21107C11__9S21107C10[7]),  7,9},
  {&(_tg__ZTV8S21107C7__9S21107C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21107C10[];
extern  VTBL_ENTRY _ZTV9S21107C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C10[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21107C10 = {  "S21107C10", // class name
  bases_S21107C10, 10,
  &(vtc_S21107C10[0]), // expected_vtbl_contents
  &(vtt_S21107C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S21107C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21107C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21107C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C13  : S2265C38 , virtual S21107C5 , virtual S21107C7 , virtual S21107C12 , virtual S21107C4 {
  __tsi64 s21107c13f0;
  virtual  ~S21107C13(); // _ZN9S21107C13D2Ev
  S21107C13(); // tgen
};
//SIG(-1 S21107C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S21107C13 ::~S21107C13(){ note_dtor("S21107C13", this);}
S21107C13 ::S21107C13(){ note_ctor("S21107C13", this);} // tgen

static void Test_S21107C13()
{
  extern Class_Descriptor cd_S21107C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S21107C13, buf);
    S21107C13 *dp, &lv = *(dp=new (buf) S21107C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S21107C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C13)");
    /*is_ambiguous_... S21107C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S21107C13");
    /*is_ambiguous_... S21107C13::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(16,12), "S21107C13");
    /*is_ambiguous_... S21107C13::S21107C5 */ AMB_check_base_class_offset(lv, (S21107C5*), ABISELECT(16,12), "S21107C13");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(16,12), "S21107C13");
    check_base_class_offset(lv, (S21107C5*)(S21107C4*), ABISELECT(16,12), "S21107C13");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(40,24), "S21107C13");
    /*is_ambiguous_... S21107C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C4*), ABISELECT(40,24), "S21107C13");
    check_base_class_offset(lv, (S21107C7*), 0, "S21107C13");
    check_base_class_offset(lv, (S21107C7*)(S21107C4*), 0, "S21107C13");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*), ABISELECT(48,28), "S21107C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*), ABISELECT(56,32), "S21107C13");
    check_base_class_offset(lv, (S21107C5*)(S21107C12*), ABISELECT(56,32), "S21107C13");
    check_base_class_offset(lv, (S21107C12*), ABISELECT(48,28), "S21107C13");
    check_base_class_offset(lv, (S2265C38*)(S21107C4*), ABISELECT(124,84), "S21107C13");
    check_base_class_offset(lv, (S21107C4*), ABISELECT(80,44), "S21107C13");
    check_field_offset(lv, s21107c13f0, ABISELECT(8,4), "S21107C13.s21107c13f0");
    test_class_info(&lv, &cd_S21107C13);
    dp->~S21107C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C13(Test_S21107C13, "S21107C13", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN9S21107C13C1Ev();
extern void _ZN9S21107C13D2Ev();
Name_Map name_map_S21107C13[] = {
  NSPAIR(_ZN9S21107C13C1Ev),
  NSPAIR(_ZN9S21107C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C4;
extern VTBL_ENTRY _ZTI8S21107C4[];
extern  VTBL_ENTRY _ZTV8S21107C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C4[];
static Base_Class bases_S21107C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21107C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S21107C4,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21107C13[];
extern void _ZN9S21107C13D1Ev();
extern void _ZN9S21107C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S21107C13D1Ev,_ZThn44_N9S21107C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S21107C13D0Ev,_ZThn44_N9S21107C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21107C13[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&_ZN9S21107C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21107C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S21107C13[];
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C13[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void _ZN8S21107C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
extern void _ZN8S21107C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__9S21107C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C4__9S21107C13[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
static  VTT_ENTRY vtt_S21107C13[] = {
  {&(_ZTV9S21107C13[9]),  9,20},
  {&(_ZTV9S21107C13[9]),  9,20},
  {&(_ZTV9S21107C13[18]),  18,20},
  {&(_tg__ZTV8S21107C7__9S21107C13[4]),  4,6},
  {&(_tg__ZTV8S21107C4__9S21107C13[7]),  7,9},
  {&(_tg__ZTV8S21107C7__8S21107C4__9S21107C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S21107C13[];
extern  VTBL_ENTRY _ZTV9S21107C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C13[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21107C13D0Ev,_ZThn44_N9S21107C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21107C13D1Ev,_ZThn44_N9S21107C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21107C13 = {  "S21107C13", // class name
  bases_S21107C13, 11,
  &(vtc_S21107C13[0]), // expected_vtbl_contents
  &(vtt_S21107C13[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI9S21107C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21107C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21107C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C14  : S21107C12 , S21107C5 , virtual S2265C38 {
  virtual  ~S21107C14(); // _ZN9S21107C14D2Ev
  S21107C14(); // tgen
};
//SIG(-1 S21107C14) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S21107C14 ::~S21107C14(){ note_dtor("S21107C14", this);}
S21107C14 ::S21107C14(){ note_ctor("S21107C14", this);} // tgen

static void Test_S21107C14()
{
  extern Class_Descriptor cd_S21107C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S21107C14, buf);
    S21107C14 *dp, &lv = *(dp=new (buf) S21107C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S21107C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C14)");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*), ABISELECT(8,4), "S21107C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*), ABISELECT(16,8), "S21107C14");
    check_base_class_offset(lv, (S21107C5*)(S21107C12*), ABISELECT(16,8), "S21107C14");
    check_base_class_offset(lv, (S21107C12*), ABISELECT(8,4), "S21107C14");
    /*is_ambiguous_... S21107C14::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(40,20), "S21107C14");
    /*is_ambiguous_... S21107C14::S21107C5 */ AMB_check_base_class_offset(lv, (S21107C5*), ABISELECT(40,20), "S21107C14");
    check_base_class_offset(lv, (S2265C38*), 0, "S21107C14");
    test_class_info(&lv, &cd_S21107C14);
    dp->~S21107C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C14(Test_S21107C14, "S21107C14", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S21107C14C1Ev();
extern void _ZN9S21107C14D2Ev();
Name_Map name_map_S21107C14[] = {
  NSPAIR(_ZN9S21107C14C1Ev),
  NSPAIR(_ZN9S21107C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S21107C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21107C14[];
extern void _ZN9S21107C14D1Ev();
extern void _ZN9S21107C14D0Ev();
static  VTBL_ENTRY vtc_S21107C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C14[0]),
  (VTBL_ENTRY)&_ZN9S21107C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21107C14D0Ev,
};
extern VTBL_ENTRY _ZTV9S21107C14[];
static  VTT_ENTRY vtt_S21107C14[] = {
  {&(_ZTV9S21107C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21107C14[];
extern  VTBL_ENTRY _ZTV9S21107C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C14[];
Class_Descriptor cd_S21107C14 = {  "S21107C14", // class name
  bases_S21107C14, 7,
  &(vtc_S21107C14[0]), // expected_vtbl_contents
  &(vtt_S21107C14[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S21107C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21107C14),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21107C14),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C2  : virtual S21107C3 , virtual S21107C10 , virtual S21107C13 , virtual S21107C14 , S21107C11 {
  virtual  ~S21107C2(); // _ZN8S21107C2D2Ev
  S21107C2(); // tgen
};
//SIG(-1 S21107C2) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd FL} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S21107C2 ::~S21107C2(){ note_dtor("S21107C2", this);}
S21107C2 ::S21107C2(){ note_ctor("S21107C2", this);} // tgen

static void Test_S21107C2()
{
  extern Class_Descriptor cd_S21107C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S21107C2, buf);
    S21107C2 *dp, &lv = *(dp=new (buf) S21107C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S21107C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C2)");
    /*is_ambiguous_... S21107C2::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(72,52), "S21107C2");
    check_base_class_offset(lv, (S21107C5*)(S21107C4*), ABISELECT(72,52), "S21107C2");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(72,52), "S21107C2");
    /*is_ambiguous_... S21107C13::S21107C5 */ AMB_check_base_class_offset(lv, (S21107C5*)(S21107C13*), ABISELECT(72,52), "S21107C2");
    /*is_ambiguous_... S21107C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C4*), ABISELECT(96,64), "S21107C2");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(96,64), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C11*), ABISELECT(96,64), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C11*), ABISELECT(96,64), "S21107C2");
    check_base_class_offset(lv, (S21107C7*)(S21107C4*), ABISELECT(8,4), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C7*)(S21107C11*), ABISELECT(8,4), "S21107C2");
    check_base_class_offset(lv, (S21107C7*)(S21107C13*), ABISELECT(8,4), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C7*)(S21107C11*), ABISELECT(8,4), "S21107C2");
    check_base_class_offset(lv, (S2265C38*)(S21107C4*), ABISELECT(104,68), "S21107C2");
    check_base_class_offset(lv, (S2265C38*)(S21107C14*), ABISELECT(104,68), "S21107C2");
    check_base_class_offset(lv, (S21107C4*)(S21107C3*), ABISELECT(24,12), "S21107C2");
    check_base_class_offset(lv, (S21107C4*)(S21107C13*), ABISELECT(24,12), "S21107C2");
    /*is_ambiguous_... S21107C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C3*), ABISELECT(8,4), "S21107C2");
    check_base_class_offset(lv, (S2265C28*)(S21107C3*), 0, "S21107C2");
    check_base_class_offset(lv, (S21107C3*), ABISELECT(8,4), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C11*), ABISELECT(112,72), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*), ABISELECT(160,96), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*), ABISELECT(168,100), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C12 */ AMB_check_base_class_offset(lv, (S21107C5*)(S21107C12*), ABISELECT(168,100), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C12*)(S21107C11*), ABISELECT(160,96), "S21107C2");
    check_base_class_offset(lv, (S21107C12*)(S21107C13*), ABISELECT(160,96), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C12*)(S21107C11*), ABISELECT(160,96), "S21107C2");
    check_base_class_offset(lv, (S21107C11*)(S21107C10*), ABISELECT(112,72), "S21107C2");
    check_base_class_offset(lv, (S21107C10*), ABISELECT(112,72), "S21107C2");
    /*is_ambiguous_... S21107C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C13*), ABISELECT(192,112), "S21107C2");
    check_base_class_offset(lv, (S21107C13*), ABISELECT(192,112), "S21107C2");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*)(S21107C14*), ABISELECT(216,128), "S21107C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*)(S21107C14*), ABISELECT(224,132), "S21107C2");
    check_base_class_offset(lv, (S21107C5*)(S21107C12*)(S21107C14*), ABISELECT(224,132), "S21107C2");
    check_base_class_offset(lv, (S21107C12*)(S21107C14*), ABISELECT(216,128), "S21107C2");
    /*is_ambiguous_... S21107C14::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C14*), ABISELECT(248,144), "S21107C2");
    /*is_ambiguous_... S21107C14::S21107C5 */ AMB_check_base_class_offset(lv, (S21107C5*)(S21107C14*), ABISELECT(248,144), "S21107C2");
    check_base_class_offset(lv, (S21107C14*), ABISELECT(208,124), "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C11*), 0, "S21107C2");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C11*), 0, "S21107C2");
    test_class_info(&lv, &cd_S21107C2);
    dp->~S21107C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C2(Test_S21107C2, "S21107C2", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S21107C2C1Ev();
extern void _ZN8S21107C2D2Ev();
Name_Map name_map_S21107C2[] = {
  NSPAIR(_ZN8S21107C2C1Ev),
  NSPAIR(_ZN8S21107C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C4;
extern VTBL_ENTRY _ZTI8S21107C4[];
extern  VTBL_ENTRY _ZTV8S21107C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S21107C3;
extern VTBL_ENTRY _ZTI8S21107C3[];
extern  VTBL_ENTRY _ZTV8S21107C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S21107C11;
extern VTBL_ENTRY _ZTI9S21107C11[];
extern  VTBL_ENTRY _ZTV9S21107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C11[];
extern Class_Descriptor cd_S21107C10;
extern VTBL_ENTRY _ZTI9S21107C10[];
extern  VTBL_ENTRY _ZTV9S21107C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C13;
extern VTBL_ENTRY _ZTI9S21107C13[];
extern  VTBL_ENTRY _ZTV9S21107C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C14;
extern VTBL_ENTRY _ZTI9S21107C14[];
extern  VTBL_ENTRY _ZTV9S21107C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C11;
extern VTBL_ENTRY _ZTI9S21107C11[];
extern  VTBL_ENTRY _ZTV9S21107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C11[];
static Base_Class bases_S21107C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21107C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21107C4,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21107C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21107C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21107C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21107C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21107C14,    ABISELECT(208,124), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21107C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21107C2[];
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void _ZN8S21107C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void _ZN8S21107C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21107C2D1Ev,_ZThn4_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21107C2D0Ev,_ZThn4_N8S21107C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21107C2D1Ev,_ZThn12_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21107C2D0Ev,_ZThn12_N8S21107C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21107C2D1Ev,_ZThn72_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21107C2D0Ev,_ZThn72_N8S21107C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S21107C2D1Ev,_ZThn112_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S21107C2D0Ev,_ZThn112_N8S21107C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21107C2D1Ev,_ZTv0_n16_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S21107C2D1Ev,_ZThn124_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21107C2D0Ev,_ZTv0_n16_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S21107C2D0Ev,_ZThn124_N8S21107C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21107C2[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21107C2D1Ev,_ZTv0_n16_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21107C2D0Ev,_ZTv0_n16_N8S21107C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21107C2[];
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void _ZN9S21107C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void _ZN9S21107C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C11__A__8S21107C2[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S21107C11D1Ev,_ZThn4_N9S21107C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S21107C11D0Ev,_ZThn4_N9S21107C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C11__A__8S21107C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev)();
extern void _ZN8S21107C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev)();
extern void _ZN8S21107C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C3__8S21107C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21107C3D1Ev,_ZThn8_N8S21107C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S21107C3D0Ev,_ZThn8_N8S21107C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__8S21107C3__8S21107C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void _ZN8S21107C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
extern void _ZN8S21107C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__8S21107C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C4__8S21107C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev)();
extern void _ZN9S21107C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev)();
extern void _ZN9S21107C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C10__8S21107C2[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C10__8S21107C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21107C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void _ZN9S21107C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void _ZN9S21107C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C11__8S21107C2[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C11__8S21107C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void _ZN9S21107C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
extern void _ZN9S21107C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C13__8S21107C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C13__8S21107C2[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C4__9S21107C13__8S21107C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern void _ZN9S21107C14D1Ev();
extern void _ZN9S21107C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21107C14__8S21107C2[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C14[0]),
  (VTBL_ENTRY)&_ZN9S21107C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21107C14D0Ev,
};
static  VTT_ENTRY vtt_S21107C2[] = {
  {&(_ZTV8S21107C2[15]),  15,64},
  {&(_tg__ZTV9S21107C11__A__8S21107C2[7]),  7,9},
  {&(_tg__ZTV8S21107C7__9S21107C11__A__8S21107C2[5]),  5,7},
  {&(_ZTV8S21107C2[26]),  26,64},
  {&(_ZTV8S21107C2[35]),  35,64},
  {&(_ZTV8S21107C2[26]),  26,64},
  {&(_ZTV8S21107C2[45]),  45,64},
  {&(_ZTV8S21107C2[45]),  45,64},
  {&(_ZTV8S21107C2[56]),  56,64},
  {&(_ZTV8S21107C2[62]),  62,64},
  {&(_tg__ZTV8S21107C3__8S21107C2[9]),  9,11},
  {&(_tg__ZTV8S21107C4__8S21107C3__8S21107C2[7]),  7,9},
  {&(_tg__ZTV8S21107C3__8S21107C2[9]),  9,11},
  {&(_tg__ZTV8S21107C4__8S21107C2[7]),  7,9},
  {&(_tg__ZTV8S21107C7__8S21107C4__8S21107C2[5]),  5,7},
  {&(_tg__ZTV8S21107C7__8S21107C2[4]),  4,6},
  {&(_tg__ZTV9S21107C10__8S21107C2[8]),  8,10},
  {&(_tg__ZTV9S21107C10__8S21107C2[8]),  8,10},
  {&(_tg__ZTV8S21107C7__9S21107C10__8S21107C2[5]),  5,7},
  {&(_tg__ZTV9S21107C11__8S21107C2[7]),  7,9},
  {&(_tg__ZTV8S21107C7__9S21107C11__8S21107C2[5]),  5,7},
  {&(_tg__ZTV9S21107C13__8S21107C2[9]),  9,11},
  {&(_tg__ZTV8S21107C7__9S21107C13__8S21107C2[5]),  5,7},
  {&(_tg__ZTV8S21107C4__9S21107C13__8S21107C2[7]),  7,9},
  {&(_tg__ZTV9S21107C14__8S21107C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21107C2[];
extern  VTBL_ENTRY _ZTV8S21107C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C2[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21107C3D0Ev,_ZThn8_N8S21107C3D0Ev),
  (VTBL_ENTRY)_ZN8S21107C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21107C3D1Ev,_ZThn8_N8S21107C3D1Ev),
  (VTBL_ENTRY)_ZN8S21107C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21107C11D0Ev,_ZThn4_N9S21107C11D0Ev),
  (VTBL_ENTRY)_ZN9S21107C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21107C11D1Ev,_ZThn4_N9S21107C11D1Ev),
  (VTBL_ENTRY)_ZN9S21107C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21107C2D0Ev,_ZTv0_n16_N8S21107C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21107C2D0Ev,_ZThn124_N8S21107C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21107C2D1Ev,_ZTv0_n16_N8S21107C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21107C2D1Ev,_ZThn124_N8S21107C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21107C2D0Ev,_ZThn112_N8S21107C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21107C2D0Ev,_ZThn72_N8S21107C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21107C2D0Ev,_ZThn12_N8S21107C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21107C2D0Ev,_ZThn4_N8S21107C2D0Ev),
  (VTBL_ENTRY)_ZN8S21107C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21107C2D1Ev,_ZThn112_N8S21107C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21107C2D1Ev,_ZThn72_N8S21107C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21107C2D1Ev,_ZThn12_N8S21107C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21107C2D1Ev,_ZThn4_N8S21107C2D1Ev),
  (VTBL_ENTRY)_ZN8S21107C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21107C2 = {  "S21107C2", // class name
  bases_S21107C2, 27,
  &(vtc_S21107C2[0]), // expected_vtbl_contents
  &(vtt_S21107C2[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S21107C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21107C2),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21107C2),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21107C1  : virtual S21107C2 {
  ~S21107C1(); // tgen
  S21107C1(); // tgen
};
//SIG(1 S21107C1) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd FL} VBC14{ BC12 BC5 VBC8 vd} BC11 vd}}


S21107C1 ::~S21107C1(){ note_dtor("S21107C1", this);} // tgen
S21107C1 ::S21107C1(){ note_ctor("S21107C1", this);} // tgen

static void Test_S21107C1()
{
  extern Class_Descriptor cd_S21107C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,40)];
    init_test(&cd_S21107C1, buf);
    S21107C1 *dp, &lv = *(dp=new (buf) S21107C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S21107C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21107C1)");
    /*is_ambiguous_... S21107C1::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*), ABISELECT(72,52), "S21107C1");
    check_base_class_offset(lv, (S21107C5*)(S21107C4*), ABISELECT(72,52), "S21107C1");
    check_base_class_offset(lv, (S21107C5*)(S21107C7*), ABISELECT(72,52), "S21107C1");
    /*is_ambiguous_... S21107C13::S21107C5 */ AMB_check_base_class_offset(lv, (S21107C5*)(S21107C13*), ABISELECT(72,52), "S21107C1");
    /*is_ambiguous_... S21107C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C4*), ABISELECT(96,64), "S21107C1");
    /*is_ambiguous_... S21107C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C7*), ABISELECT(96,64), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C11*), ABISELECT(96,64), "S21107C1");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C11*)(S21107C2*), ABISELECT(96,64), "S21107C1");
    check_base_class_offset(lv, (S21107C7*)(S21107C4*), ABISELECT(8,4), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C7*)(S21107C11*), ABISELECT(8,4), "S21107C1");
    check_base_class_offset(lv, (S21107C7*)(S21107C13*), ABISELECT(8,4), "S21107C1");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C7*)(S21107C11*)(S21107C2*), ABISELECT(8,4), "S21107C1");
    check_base_class_offset(lv, (S2265C38*)(S21107C4*), ABISELECT(104,68), "S21107C1");
    check_base_class_offset(lv, (S2265C38*)(S21107C14*), ABISELECT(104,68), "S21107C1");
    check_base_class_offset(lv, (S21107C4*)(S21107C3*), ABISELECT(24,12), "S21107C1");
    check_base_class_offset(lv, (S21107C4*)(S21107C13*), ABISELECT(24,12), "S21107C1");
    /*is_ambiguous_... S21107C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C3*), ABISELECT(8,4), "S21107C1");
    check_base_class_offset(lv, (S2265C28*)(S21107C3*), 0, "S21107C1");
    check_base_class_offset(lv, (S21107C3*)(S21107C2*), ABISELECT(8,4), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C11*), ABISELECT(112,72), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*), ABISELECT(160,96), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*), ABISELECT(168,100), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C12 */ AMB_check_base_class_offset(lv, (S21107C5*)(S21107C12*), ABISELECT(168,100), "S21107C1");
    /*is_ambiguous_... S21107C1::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C12*)(S21107C11*), ABISELECT(160,96), "S21107C1");
    check_base_class_offset(lv, (S21107C12*)(S21107C13*), ABISELECT(160,96), "S21107C1");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C12*)(S21107C11*)(S21107C2*), ABISELECT(160,96), "S21107C1");
    check_base_class_offset(lv, (S21107C11*)(S21107C10*), ABISELECT(112,72), "S21107C1");
    check_base_class_offset(lv, (S21107C10*)(S21107C2*), ABISELECT(112,72), "S21107C1");
    /*is_ambiguous_... S21107C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C13*), ABISELECT(192,112), "S21107C1");
    check_base_class_offset(lv, (S21107C13*)(S21107C2*), ABISELECT(192,112), "S21107C1");
    /*is_ambiguous_... S21107C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C12*)(S21107C14*), ABISELECT(216,128), "S21107C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C12*)(S21107C14*), ABISELECT(224,132), "S21107C1");
    check_base_class_offset(lv, (S21107C5*)(S21107C12*)(S21107C14*), ABISELECT(224,132), "S21107C1");
    check_base_class_offset(lv, (S21107C12*)(S21107C14*), ABISELECT(216,128), "S21107C1");
    /*is_ambiguous_... S21107C14::S21107C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21107C5*)(S21107C14*), ABISELECT(248,144), "S21107C1");
    /*is_ambiguous_... S21107C14::S21107C5 */ AMB_check_base_class_offset(lv, (S21107C5*)(S21107C14*), ABISELECT(248,144), "S21107C1");
    check_base_class_offset(lv, (S21107C14*)(S21107C2*), ABISELECT(208,124), "S21107C1");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21107C11*)(S21107C2*), 0, "S21107C1");
    /*is_ambiguous_... S21107C2::S21107C11 */ AMB_check_base_class_offset(lv, (S21107C11*)(S21107C2*), 0, "S21107C1");
    check_base_class_offset(lv, (S21107C2*), 0, "S21107C1");
    test_class_info(&lv, &cd_S21107C1);
    dp->~S21107C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21107C1(Test_S21107C1, "S21107C1", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S21107C1C1Ev();
extern void _ZN8S21107C1D1Ev();
Name_Map name_map_S21107C1[] = {
  NSPAIR(_ZN8S21107C1C1Ev),
  NSPAIR(_ZN8S21107C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C7;
extern VTBL_ENTRY _ZTI8S21107C7[];
extern  VTBL_ENTRY _ZTV8S21107C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C4;
extern VTBL_ENTRY _ZTI8S21107C4[];
extern  VTBL_ENTRY _ZTV8S21107C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S21107C3;
extern VTBL_ENTRY _ZTI8S21107C3[];
extern  VTBL_ENTRY _ZTV8S21107C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S21107C11;
extern VTBL_ENTRY _ZTI9S21107C11[];
extern  VTBL_ENTRY _ZTV9S21107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C11[];
extern Class_Descriptor cd_S21107C10;
extern VTBL_ENTRY _ZTI9S21107C10[];
extern  VTBL_ENTRY _ZTV9S21107C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C13;
extern VTBL_ENTRY _ZTI9S21107C13[];
extern  VTBL_ENTRY _ZTV9S21107C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C12;
extern VTBL_ENTRY _ZTI9S21107C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21107C5;
extern VTBL_ENTRY _ZTI8S21107C5[];
extern Class_Descriptor cd_S21107C14;
extern VTBL_ENTRY _ZTI9S21107C14[];
extern  VTBL_ENTRY _ZTV9S21107C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21107C11;
extern VTBL_ENTRY _ZTI9S21107C11[];
extern  VTBL_ENTRY _ZTV9S21107C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21107C11[];
extern Class_Descriptor cd_S21107C2;
extern VTBL_ENTRY _ZTI8S21107C2[];
extern  VTBL_ENTRY _ZTV8S21107C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C2[];
static Base_Class bases_S21107C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21107C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21107C4,    ABISELECT(24,12), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21107C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21107C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21107C10,    ABISELECT(112,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21107C13,    ABISELECT(192,112), //bcp->offset
    48, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21107C12,    ABISELECT(216,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21107C5,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21107C14,    ABISELECT(208,124), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21107C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S21107C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21107C1[];
extern void ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev)();
extern void _ZN8S21107C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev)();
extern void _ZN8S21107C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S21107C1D1Ev,_ZThn4_N8S21107C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S21107C1D0Ev,_ZThn4_N8S21107C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S21107C1D1Ev,_ZThn12_N8S21107C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S21107C1D0Ev,_ZThn12_N8S21107C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S21107C1D1Ev,_ZThn72_N8S21107C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S21107C1D0Ev,_ZThn72_N8S21107C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S21107C1D1Ev,_ZThn112_N8S21107C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S21107C1D0Ev,_ZThn112_N8S21107C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21107C1D1Ev,_ZTv0_n16_N8S21107C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S21107C1D1Ev,_ZThn124_N8S21107C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21107C1D0Ev,_ZTv0_n16_N8S21107C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S21107C1D0Ev,_ZThn124_N8S21107C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21107C1[] = {
  0,
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S21107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev),
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S21107C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21107C1D1Ev,_ZTv0_n16_N8S21107C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21107C1D0Ev,_ZTv0_n16_N8S21107C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21107C1[];
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void _ZN8S21107C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void _ZN8S21107C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C2__8S21107C1[] = {
  ABISELECT(208,124),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void _ZN9S21107C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void _ZN9S21107C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C118S21107C2__A1__8S21107C1[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S21107C11D1Ev,_ZThn4_N9S21107C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S21107C11D0Ev,_ZThn4_N9S21107C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C118S21107C2__A1__8S21107C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21107C2D1Ev,_ZThn4_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21107C2D0Ev,_ZThn4_N8S21107C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C3__8S21107C2__8S21107C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21107C2D1Ev,_ZThn12_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21107C2D0Ev,_ZThn12_N8S21107C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__8S21107C2__8S21107C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21107C2D1Ev,_ZThn72_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21107C2D0Ev,_ZThn72_N8S21107C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C10__8S21107C2__8S21107C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S21107C2D1Ev,_ZThn112_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S21107C2D0Ev,_ZThn112_N8S21107C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C13__8S21107C2__8S21107C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21107C2D1Ev,_ZTv0_n16_N8S21107C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S21107C2D1Ev,_ZThn124_N8S21107C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21107C2D0Ev,_ZTv0_n16_N8S21107C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S21107C2D0Ev,_ZThn124_N8S21107C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C14__8S21107C2__8S21107C1[] = {
  ABISELECT(-208,-124),
  ABISELECT(-104,-56),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S21107C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21107C2D1Ev,_ZTv0_n16_N8S21107C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21107C2D0Ev,_ZTv0_n16_N8S21107C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev)();
extern void _ZN8S21107C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev)();
extern void _ZN8S21107C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C3__8S21107C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21107C3D1Ev,_ZThn8_N8S21107C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S21107C3D0Ev,_ZThn8_N8S21107C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__8S21107C3__8S21107C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21107C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void _ZN8S21107C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
extern void _ZN8S21107C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21107C4__8S21107C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C4__8S21107C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21107C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev),
};
extern void _ZN8S21107C7D1Ev();
extern void _ZN8S21107C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21107C7__8S21107C1[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21107C7[0]),
  (VTBL_ENTRY)&_ZN8S21107C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21107C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev)();
extern void _ZN9S21107C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev)();
extern void _ZN9S21107C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C10__8S21107C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C10__8S21107C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21107C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void _ZN9S21107C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
extern void _ZN9S21107C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C11__8S21107C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C11__8S21107C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21107C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void _ZN9S21107C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
extern void _ZN9S21107C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21107C13__8S21107C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C7__9S21107C13__8S21107C1[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21107C4__9S21107C13__8S21107C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S21107C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev),
};
extern void _ZN9S21107C14D1Ev();
extern void _ZN9S21107C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21107C14__8S21107C1[] = {
  ABISELECT(-104,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S21107C14[0]),
  (VTBL_ENTRY)&_ZN9S21107C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21107C14D0Ev,
};
static  VTT_ENTRY vtt_S21107C1[] = {
  {&(_ZTV8S21107C1[16]),  16,65},
  {&(_ZTV8S21107C1[16]),  16,65},
  {&(_ZTV8S21107C1[27]),  27,65},
  {&(_ZTV8S21107C1[36]),  36,65},
  {&(_ZTV8S21107C1[27]),  27,65},
  {&(_ZTV8S21107C1[46]),  46,65},
  {&(_ZTV8S21107C1[46]),  46,65},
  {&(_ZTV8S21107C1[57]),  57,65},
  {&(_ZTV8S21107C1[63]),  63,65},
  {&(_tg__ZTV8S21107C2__8S21107C1[15]),  15,17},
  {&(_tg__ZTV9S21107C118S21107C2__A1__8S21107C1[7]),  7,9},
  {&(_tg__ZTV8S21107C7__9S21107C118S21107C2__A1__8S21107C1[5]),  5,7},
  {&(_tg__ZTV8S21107C3__8S21107C2__8S21107C1[9]),  9,11},
  {&(_tg__ZTV8S21107C4__8S21107C2__8S21107C1[7]),  7,9},
  {&(_tg__ZTV8S21107C3__8S21107C2__8S21107C1[9]),  9,11},
  {&(_tg__ZTV9S21107C10__8S21107C2__8S21107C1[8]),  8,10},
  {&(_tg__ZTV9S21107C10__8S21107C2__8S21107C1[8]),  8,10},
  {&(_tg__ZTV9S21107C13__8S21107C2__8S21107C1[9]),  9,11},
  {&(_tg__ZTV9S21107C14__8S21107C2__8S21107C1[4]),  4,6},
  {&(_tg__ZTV8S21107C3__8S21107C1[9]),  9,11},
  {&(_tg__ZTV8S21107C4__8S21107C3__8S21107C1[7]),  7,9},
  {&(_tg__ZTV8S21107C3__8S21107C1[9]),  9,11},
  {&(_tg__ZTV8S21107C4__8S21107C1[7]),  7,9},
  {&(_tg__ZTV8S21107C7__8S21107C4__8S21107C1[5]),  5,7},
  {&(_tg__ZTV8S21107C7__8S21107C1[4]),  4,6},
  {&(_tg__ZTV9S21107C10__8S21107C1[8]),  8,10},
  {&(_tg__ZTV9S21107C10__8S21107C1[8]),  8,10},
  {&(_tg__ZTV8S21107C7__9S21107C10__8S21107C1[5]),  5,7},
  {&(_tg__ZTV9S21107C11__8S21107C1[7]),  7,9},
  {&(_tg__ZTV8S21107C7__9S21107C11__8S21107C1[5]),  5,7},
  {&(_tg__ZTV9S21107C13__8S21107C1[9]),  9,11},
  {&(_tg__ZTV8S21107C7__9S21107C13__8S21107C1[5]),  5,7},
  {&(_tg__ZTV8S21107C4__9S21107C13__8S21107C1[7]),  7,9},
  {&(_tg__ZTV9S21107C14__8S21107C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21107C1[];
extern  VTBL_ENTRY _ZTV8S21107C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21107C1[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C13D0Ev,_ZTv0_n20_N9S21107C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C13D1Ev,_ZTv0_n20_N9S21107C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C10D0Ev,_ZTv0_n20_N9S21107C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C10D1Ev,_ZTv0_n20_N9S21107C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D0Ev,_ZTv0_n20_N8S21107C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C4D1Ev,_ZTv0_n20_N8S21107C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21107C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C3D0Ev,_ZTv0_n20_N8S21107C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21107C3D0Ev,_ZThn8_N8S21107C3D0Ev),
  (VTBL_ENTRY)_ZN8S21107C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C3D1Ev,_ZTv0_n20_N8S21107C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21107C3D1Ev,_ZThn8_N8S21107C3D1Ev),
  (VTBL_ENTRY)_ZN8S21107C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21107C2D0Ev,_ZTv0_n16_N8S21107C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21107C2D0Ev,_ZThn124_N8S21107C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21107C2D1Ev,_ZTv0_n16_N8S21107C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21107C2D1Ev,_ZThn124_N8S21107C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C11D0Ev,_ZTv0_n20_N9S21107C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S21107C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21107C11D0Ev,_ZThn4_N9S21107C11D0Ev),
  (VTBL_ENTRY)_ZN9S21107C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21107C11D1Ev,_ZTv0_n20_N9S21107C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S21107C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21107C11D1Ev,_ZThn4_N9S21107C11D1Ev),
  (VTBL_ENTRY)_ZN9S21107C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C2D0Ev,_ZTv0_n20_N8S21107C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21107C2D0Ev,_ZThn112_N8S21107C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21107C2D0Ev,_ZThn72_N8S21107C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21107C2D0Ev,_ZThn12_N8S21107C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21107C2D0Ev,_ZThn4_N8S21107C2D0Ev),
  (VTBL_ENTRY)_ZN8S21107C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C2D1Ev,_ZTv0_n20_N8S21107C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21107C2D1Ev,_ZThn112_N8S21107C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21107C2D1Ev,_ZThn72_N8S21107C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21107C2D1Ev,_ZThn12_N8S21107C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21107C2D1Ev,_ZThn4_N8S21107C2D1Ev),
  (VTBL_ENTRY)_ZN8S21107C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21107C1D0Ev,_ZTv0_n16_N8S21107C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21107C1D0Ev,_ZThn124_N8S21107C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21107C1D1Ev,_ZTv0_n16_N8S21107C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21107C1D1Ev,_ZThn124_N8S21107C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C1D0Ev,_ZTv0_n20_N8S21107C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21107C1D0Ev,_ZThn112_N8S21107C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21107C1D0Ev,_ZThn72_N8S21107C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21107C1D0Ev,_ZThn12_N8S21107C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21107C1D0Ev,_ZThn4_N8S21107C1D0Ev),
  (VTBL_ENTRY)_ZN8S21107C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21107C1D1Ev,_ZTv0_n20_N8S21107C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21107C1D1Ev,_ZThn112_N8S21107C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21107C1D1Ev,_ZThn72_N8S21107C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21107C1D1Ev,_ZThn12_N8S21107C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21107C1D1Ev,_ZThn4_N8S21107C1D1Ev),
  (VTBL_ENTRY)_ZN8S21107C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21107C1 = {  "S21107C1", // class name
  bases_S21107C1, 28,
  &(vtc_S21107C1[0]), // expected_vtbl_contents
  &(vtt_S21107C1[0]), // expected_vtt_contents
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S21107C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21107C1),65, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21107C1),34, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C5  : S5217C60_nt {
  void *s21106c5f0[2];
};
//SIG(-1 S21106C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S21106C5()
{
  extern Class_Descriptor cd_S21106C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21106C5, buf);
    S21106C5 &lv = *(new (buf) S21106C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21106C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S21106C5");
    check_field_offset(lv, s21106c5f0, ABISELECT(8,4), "S21106C5.s21106c5f0");
    test_class_info(&lv, &cd_S21106C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C5(Test_S21106C5, "S21106C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S21106C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21106C5[];
Class_Descriptor cd_S21106C5 = {  "S21106C5", // class name
  bases_S21106C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21106C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C7  : virtual S5217C60_nt , virtual S21106C5 {
  virtual  ~S21106C7(); // _ZN8S21106C7D2Ev
  S21106C7(); // tgen
};
//SIG(-1 S21106C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S21106C7 ::~S21106C7(){ note_dtor("S21106C7", this);}
S21106C7 ::S21106C7(){ note_ctor("S21106C7", this);} // tgen

static void Test_S21106C7()
{
  extern Class_Descriptor cd_S21106C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21106C7, buf);
    S21106C7 *dp, &lv = *(dp=new (buf) S21106C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21106C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C7)");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S21106C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(16,8), "S21106C7");
    check_base_class_offset(lv, (S21106C5*), ABISELECT(16,8), "S21106C7");
    test_class_info(&lv, &cd_S21106C7);
    dp->~S21106C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C7(Test_S21106C7, "S21106C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21106C7C1Ev();
extern void _ZN8S21106C7D2Ev();
Name_Map name_map_S21106C7[] = {
  NSPAIR(_ZN8S21106C7C1Ev),
  NSPAIR(_ZN8S21106C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
static Base_Class bases_S21106C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21106C7[];
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY vtc_S21106C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S21106C7[];
static  VTT_ENTRY vtt_S21106C7[] = {
  {&(_ZTV8S21106C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
Class_Descriptor cd_S21106C7 = {  "S21106C7", // class name
  bases_S21106C7, 3,
  &(vtc_S21106C7[0]), // expected_vtbl_contents
  &(vtt_S21106C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21106C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21106C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21106C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C4  : virtual S21106C5 , virtual S5217C60_nt , virtual S21106C7 , virtual S2265C38 {
  int s21106c4f0[9];
  virtual  ~S21106C4(); // _ZN8S21106C4D2Ev
  S21106C4(); // tgen
};
//SIG(-1 S21106C4) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S21106C4 ::~S21106C4(){ note_dtor("S21106C4", this);}
S21106C4 ::S21106C4(){ note_ctor("S21106C4", this);} // tgen

static void Test_S21106C4()
{
  extern Class_Descriptor cd_S21106C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S21106C4, buf);
    S21106C4 *dp, &lv = *(dp=new (buf) S21106C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S21106C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C4)");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(48,40), "S21106C4");
    check_base_class_offset(lv, (S21106C5*), ABISELECT(48,40), "S21106C4");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(48,40), "S21106C4");
    /*is_ambiguous_... S21106C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S21106C4");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(72,52), "S21106C4");
    check_base_class_offset(lv, (S21106C7*), 0, "S21106C4");
    check_base_class_offset(lv, (S2265C38*), 0, "S21106C4");
    check_field_offset(lv, s21106c4f0, ABISELECT(8,4), "S21106C4.s21106c4f0");
    test_class_info(&lv, &cd_S21106C4);
    dp->~S21106C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C4(Test_S21106C4, "S21106C4", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S21106C4C1Ev();
extern void _ZN8S21106C4D2Ev();
Name_Map name_map_S21106C4[] = {
  NSPAIR(_ZN8S21106C4C1Ev),
  NSPAIR(_ZN8S21106C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S21106C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21106C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21106C4[];
extern void _ZN8S21106C4D1Ev();
extern void _ZN8S21106C4D0Ev();
static  VTBL_ENTRY vtc_S21106C4[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&_ZN8S21106C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S21106C4[];
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
static  VTT_ENTRY vtt_S21106C4[] = {
  {&(_ZTV8S21106C4[7]),  7,9},
  {&(_ZTV8S21106C4[7]),  7,9},
  {&(_tg__ZTV8S21106C7__8S21106C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21106C4[];
extern  VTBL_ENTRY _ZTV8S21106C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C4[];
Class_Descriptor cd_S21106C4 = {  "S21106C4", // class name
  bases_S21106C4, 5,
  &(vtc_S21106C4[0]), // expected_vtbl_contents
  &(vtt_S21106C4[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S21106C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21106C4),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21106C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C3  : virtual S21106C4 , S2265C38 , virtual S2265C28 {
  void *s21106c3f0;
  ~S21106C3(); // tgen
  S21106C3(); // tgen
};
//SIG(-1 S21106C3) C1{ VBC2{ VBC3{ BC4{ m Fp} Fp[2]} VBC4 VBC5{ VBC4 VBC3 vd} VBC6{ m} vd Fi[9]} BC6 VBC7{ m} Fp}


S21106C3 ::~S21106C3(){ note_dtor("S21106C3", this);} // tgen
S21106C3 ::S21106C3(){ note_ctor("S21106C3", this);} // tgen

static void Test_S21106C3()
{
  extern Class_Descriptor cd_S21106C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S21106C3, buf);
    S21106C3 *dp, &lv = *(dp=new (buf) S21106C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S21106C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C3)");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(64,48), "S21106C3");
    check_base_class_offset(lv, (S21106C5*)(S21106C4*), ABISELECT(64,48), "S21106C3");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(64,48), "S21106C3");
    /*is_ambiguous_... S21106C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C4*), ABISELECT(88,60), "S21106C3");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(88,60), "S21106C3");
    check_base_class_offset(lv, (S21106C7*)(S21106C4*), 0, "S21106C3");
    check_base_class_offset(lv, (S2265C38*)(S21106C4*), ABISELECT(96,64), "S21106C3");
    check_base_class_offset(lv, (S21106C4*), ABISELECT(16,8), "S21106C3");
    /*is_ambiguous_... S21106C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S21106C3");
    check_base_class_offset(lv, (S2265C28*), 0, "S21106C3");
    check_field_offset(lv, s21106c3f0, ABISELECT(8,4), "S21106C3.s21106c3f0");
    test_class_info(&lv, &cd_S21106C3);
    dp->~S21106C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C3(Test_S21106C3, "S21106C3", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN8S21106C3C1Ev();
extern void _ZN8S21106C3D1Ev();
Name_Map name_map_S21106C3[] = {
  NSPAIR(_ZN8S21106C3C1Ev),
  NSPAIR(_ZN8S21106C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C4;
extern VTBL_ENTRY _ZTI8S21106C4[];
extern  VTBL_ENTRY _ZTV8S21106C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S21106C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21106C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21106C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21106C3[];
extern void _ZN8S21106C3D1Ev();
extern void _ZN8S21106C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21106C3D1Ev,_ZThn8_N8S21106C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S21106C3D0Ev,_ZThn8_N8S21106C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21106C3[] = {
  0,
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C3[0]),
  (VTBL_ENTRY)&_ZN8S21106C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C3D0Ev,
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21106C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S21106C3[];
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void _ZN8S21106C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
extern void _ZN8S21106C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__8S21106C3[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C4__8S21106C3[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C3[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
static  VTT_ENTRY vtt_S21106C3[] = {
  {&(_ZTV8S21106C3[9]),  9,20},
  {&(_ZTV8S21106C3[18]),  18,20},
  {&(_ZTV8S21106C3[9]),  9,20},
  {&(_tg__ZTV8S21106C4__8S21106C3[7]),  7,9},
  {&(_tg__ZTV8S21106C7__8S21106C4__8S21106C3[5]),  5,7},
  {&(_tg__ZTV8S21106C7__8S21106C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21106C3[];
extern  VTBL_ENTRY _ZTV8S21106C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C3[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21106C3D0Ev,_ZThn8_N8S21106C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21106C3D1Ev,_ZThn8_N8S21106C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21106C3 = {  "S21106C3", // class name
  bases_S21106C3, 8,
  &(vtc_S21106C3[0]), // expected_vtbl_contents
  &(vtt_S21106C3[0]), // expected_vtt_contents
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI8S21106C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21106C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21106C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C12  : S5217C60_nt , S21106C5 {
};
//SIG(-1 S21106C12) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S21106C12()
{
  extern Class_Descriptor cd_S21106C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21106C12, buf);
    S21106C12 &lv = *(new (buf) S21106C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21106C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C12)");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S21106C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(8,4), "S21106C12");
    check_base_class_offset(lv, (S21106C5*), ABISELECT(8,4), "S21106C12");
    test_class_info(&lv, &cd_S21106C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C12(Test_S21106C12, "S21106C12", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
static Base_Class bases_S21106C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21106C12[];
Class_Descriptor cd_S21106C12 = {  "S21106C12", // class name
  bases_S21106C12, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S21106C12),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C11  : virtual S5217C60_nt , S2265C38 , virtual S21106C12 , virtual S21106C7 {
  ~S21106C11(); // tgen
  S21106C11(); // tgen
};
//SIG(-1 S21106C11) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S21106C11 ::~S21106C11(){ note_dtor("S21106C11", this);} // tgen
S21106C11 ::S21106C11(){ note_ctor("S21106C11", this);} // tgen

static void Test_S21106C11()
{
  extern Class_Descriptor cd_S21106C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S21106C11, buf);
    S21106C11 *dp, &lv = *(dp=new (buf) S21106C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S21106C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C11)");
    /*is_ambiguous_... S21106C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S21106C11");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(8,4), "S21106C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S21106C11");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*), ABISELECT(16,8), "S21106C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*), ABISELECT(24,12), "S21106C11");
    check_base_class_offset(lv, (S21106C5*)(S21106C12*), ABISELECT(24,12), "S21106C11");
    check_base_class_offset(lv, (S21106C12*), ABISELECT(16,8), "S21106C11");
    /*is_ambiguous_... S21106C11::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(48,24), "S21106C11");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(48,24), "S21106C11");
    check_base_class_offset(lv, (S21106C7*), 0, "S21106C11");
    test_class_info(&lv, &cd_S21106C11);
    dp->~S21106C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C11(Test_S21106C11, "S21106C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S21106C11C1Ev();
extern void _ZN9S21106C11D1Ev();
Name_Map name_map_S21106C11[] = {
  NSPAIR(_ZN9S21106C11C1Ev),
  NSPAIR(_ZN9S21106C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
static Base_Class bases_S21106C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21106C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21106C11[];
extern void _ZN9S21106C11D1Ev();
extern void _ZN9S21106C11D0Ev();
static  VTBL_ENTRY vtc_S21106C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&_ZN9S21106C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21106C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S21106C11[];
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C11[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
static  VTT_ENTRY vtt_S21106C11[] = {
  {&(_ZTV9S21106C11[7]),  7,9},
  {&(_ZTV9S21106C11[7]),  7,9},
  {&(_tg__ZTV8S21106C7__9S21106C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21106C11[];
extern  VTBL_ENTRY _ZTV9S21106C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C11[];
Class_Descriptor cd_S21106C11 = {  "S21106C11", // class name
  bases_S21106C11, 9,
  &(vtc_S21106C11[0]), // expected_vtbl_contents
  &(vtt_S21106C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S21106C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21106C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21106C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C10  : virtual S21106C11 {
  ::S21106C7 s21106c10f0;
  ~S21106C10(); // tgen
  S21106C10(); // tgen
};
//SIG(-1 S21106C10) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S21106C10 ::~S21106C10(){ note_dtor("S21106C10", this);} // tgen
S21106C10 ::S21106C10(){ note_ctor("S21106C10", this);} // tgen

static void Test_S21106C10()
{
  extern Class_Descriptor cd_S21106C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S21106C10, buf);
    S21106C10 *dp, &lv = *(dp=new (buf) S21106C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S21106C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C10)");
    /*is_ambiguous_... S21106C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C11*), ABISELECT(48,24), "S21106C10");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(48,24), "S21106C10");
    check_base_class_offset(lv, (S2265C38*)(S21106C11*), 0, "S21106C10");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*), ABISELECT(56,28), "S21106C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*), ABISELECT(64,32), "S21106C10");
    check_base_class_offset(lv, (S21106C5*)(S21106C12*), ABISELECT(64,32), "S21106C10");
    check_base_class_offset(lv, (S21106C12*)(S21106C11*), ABISELECT(56,28), "S21106C10");
    /*is_ambiguous_... S21106C10::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(88,44), "S21106C10");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(88,44), "S21106C10");
    check_base_class_offset(lv, (S21106C7*)(S21106C11*), 0, "S21106C10");
    check_base_class_offset(lv, (S21106C11*), 0, "S21106C10");
    check_field_offset(lv, s21106c10f0, ABISELECT(8,4), "S21106C10.s21106c10f0");
    test_class_info(&lv, &cd_S21106C10);
    dp->~S21106C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C10(Test_S21106C10, "S21106C10", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S21106C10C1Ev();
extern void _ZN9S21106C10D1Ev();
Name_Map name_map_S21106C10[] = {
  NSPAIR(_ZN9S21106C10C1Ev),
  NSPAIR(_ZN9S21106C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
extern Class_Descriptor cd_S21106C11;
extern VTBL_ENTRY _ZTI9S21106C11[];
extern  VTBL_ENTRY _ZTV9S21106C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C11[];
static Base_Class bases_S21106C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21106C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21106C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21106C10[];
extern void _ZN9S21106C10D1Ev();
extern void _ZN9S21106C10D0Ev();
static  VTBL_ENTRY vtc_S21106C10[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C10[0]),
  (VTBL_ENTRY)&_ZN9S21106C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21106C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S21106C10[];
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void _ZN9S21106C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void _ZN9S21106C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C11__9S21106C10[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C10[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
static  VTT_ENTRY vtt_S21106C10[] = {
  {&(_ZTV9S21106C10[8]),  8,10},
  {&(_ZTV9S21106C10[8]),  8,10},
  {&(_ZTV9S21106C10[8]),  8,10},
  {&(_tg__ZTV9S21106C11__9S21106C10[7]),  7,9},
  {&(_tg__ZTV9S21106C11__9S21106C10[7]),  7,9},
  {&(_tg__ZTV8S21106C7__9S21106C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S21106C10[];
extern  VTBL_ENTRY _ZTV9S21106C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C10[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C11D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21106C10 = {  "S21106C10", // class name
  bases_S21106C10, 10,
  &(vtc_S21106C10[0]), // expected_vtbl_contents
  &(vtt_S21106C10[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S21106C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21106C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21106C10),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C13  : S2265C38 , virtual S21106C5 , virtual S21106C7 , virtual S21106C12 , virtual S21106C4 {
  long s21106c13f0;
  virtual  ~S21106C13(); // _ZN9S21106C13D2Ev
  S21106C13(); // tgen
};
//SIG(-1 S21106C13) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S21106C13 ::~S21106C13(){ note_dtor("S21106C13", this);}
S21106C13 ::S21106C13(){ note_ctor("S21106C13", this);} // tgen

static void Test_S21106C13()
{
  extern Class_Descriptor cd_S21106C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S21106C13, buf);
    S21106C13 *dp, &lv = *(dp=new (buf) S21106C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S21106C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C13)");
    /*is_ambiguous_... S21106C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S21106C13");
    /*is_ambiguous_... S21106C13::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(16,8), "S21106C13");
    /*is_ambiguous_... S21106C13::S21106C5 */ AMB_check_base_class_offset(lv, (S21106C5*), ABISELECT(16,8), "S21106C13");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(16,8), "S21106C13");
    check_base_class_offset(lv, (S21106C5*)(S21106C4*), ABISELECT(16,8), "S21106C13");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(40,20), "S21106C13");
    /*is_ambiguous_... S21106C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C4*), ABISELECT(40,20), "S21106C13");
    check_base_class_offset(lv, (S21106C7*), 0, "S21106C13");
    check_base_class_offset(lv, (S21106C7*)(S21106C4*), 0, "S21106C13");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*), ABISELECT(48,24), "S21106C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*), ABISELECT(56,28), "S21106C13");
    check_base_class_offset(lv, (S21106C5*)(S21106C12*), ABISELECT(56,28), "S21106C13");
    check_base_class_offset(lv, (S21106C12*), ABISELECT(48,24), "S21106C13");
    check_base_class_offset(lv, (S2265C38*)(S21106C4*), ABISELECT(124,80), "S21106C13");
    check_base_class_offset(lv, (S21106C4*), ABISELECT(80,40), "S21106C13");
    check_field_offset(lv, s21106c13f0, ABISELECT(8,4), "S21106C13.s21106c13f0");
    test_class_info(&lv, &cd_S21106C13);
    dp->~S21106C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C13(Test_S21106C13, "S21106C13", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN9S21106C13C1Ev();
extern void _ZN9S21106C13D2Ev();
Name_Map name_map_S21106C13[] = {
  NSPAIR(_ZN9S21106C13C1Ev),
  NSPAIR(_ZN9S21106C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C4;
extern VTBL_ENTRY _ZTI8S21106C4[];
extern  VTBL_ENTRY _ZTV8S21106C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C4[];
static Base_Class bases_S21106C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21106C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S21106C4,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21106C13[];
extern void _ZN9S21106C13D1Ev();
extern void _ZN9S21106C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S21106C13D1Ev,_ZThn40_N9S21106C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S21106C13D0Ev,_ZThn40_N9S21106C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21106C13[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&_ZN9S21106C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21106C13D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S21106C13[];
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C13[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void _ZN8S21106C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
extern void _ZN8S21106C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__9S21106C13[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C4__9S21106C13[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
static  VTT_ENTRY vtt_S21106C13[] = {
  {&(_ZTV9S21106C13[9]),  9,20},
  {&(_ZTV9S21106C13[9]),  9,20},
  {&(_ZTV9S21106C13[18]),  18,20},
  {&(_tg__ZTV8S21106C7__9S21106C13[4]),  4,6},
  {&(_tg__ZTV8S21106C4__9S21106C13[7]),  7,9},
  {&(_tg__ZTV8S21106C7__8S21106C4__9S21106C13[5]),  5,7},
};
extern VTBL_ENTRY _ZTI9S21106C13[];
extern  VTBL_ENTRY _ZTV9S21106C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C13[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21106C13D0Ev,_ZThn40_N9S21106C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21106C13D1Ev,_ZThn40_N9S21106C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21106C13 = {  "S21106C13", // class name
  bases_S21106C13, 11,
  &(vtc_S21106C13[0]), // expected_vtbl_contents
  &(vtt_S21106C13[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI9S21106C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21106C13),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21106C13),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C14  : S21106C12 , S21106C5 , virtual S2265C38 {
  virtual  ~S21106C14(); // _ZN9S21106C14D2Ev
  S21106C14(); // tgen
};
//SIG(-1 S21106C14) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S21106C14 ::~S21106C14(){ note_dtor("S21106C14", this);}
S21106C14 ::S21106C14(){ note_ctor("S21106C14", this);} // tgen

static void Test_S21106C14()
{
  extern Class_Descriptor cd_S21106C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S21106C14, buf);
    S21106C14 *dp, &lv = *(dp=new (buf) S21106C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S21106C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C14)");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*), ABISELECT(8,4), "S21106C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*), ABISELECT(16,8), "S21106C14");
    check_base_class_offset(lv, (S21106C5*)(S21106C12*), ABISELECT(16,8), "S21106C14");
    check_base_class_offset(lv, (S21106C12*), ABISELECT(8,4), "S21106C14");
    /*is_ambiguous_... S21106C14::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(40,20), "S21106C14");
    /*is_ambiguous_... S21106C14::S21106C5 */ AMB_check_base_class_offset(lv, (S21106C5*), ABISELECT(40,20), "S21106C14");
    check_base_class_offset(lv, (S2265C38*), 0, "S21106C14");
    test_class_info(&lv, &cd_S21106C14);
    dp->~S21106C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C14(Test_S21106C14, "S21106C14", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S21106C14C1Ev();
extern void _ZN9S21106C14D2Ev();
Name_Map name_map_S21106C14[] = {
  NSPAIR(_ZN9S21106C14C1Ev),
  NSPAIR(_ZN9S21106C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S21106C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21106C14[];
extern void _ZN9S21106C14D1Ev();
extern void _ZN9S21106C14D0Ev();
static  VTBL_ENTRY vtc_S21106C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C14[0]),
  (VTBL_ENTRY)&_ZN9S21106C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21106C14D0Ev,
};
extern VTBL_ENTRY _ZTV9S21106C14[];
static  VTT_ENTRY vtt_S21106C14[] = {
  {&(_ZTV9S21106C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21106C14[];
extern  VTBL_ENTRY _ZTV9S21106C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C14[];
Class_Descriptor cd_S21106C14 = {  "S21106C14", // class name
  bases_S21106C14, 7,
  &(vtc_S21106C14[0]), // expected_vtbl_contents
  &(vtt_S21106C14[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S21106C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21106C14),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21106C14),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C2  : virtual S21106C3 , virtual S21106C10 , virtual S21106C13 , virtual S21106C14 , S21106C11 {
  virtual  ~S21106C2(); // _ZN8S21106C2D2Ev
  S21106C2(); // tgen
};
//SIG(-1 S21106C2) C1{ VBC2{ VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC7{ m} vd Fi[9]} BC7 VBC8{ m} Fp} VBC9{ VBC10{ VBC5 BC7 VBC11{ BC5 BC4} VBC6} FC6} VBC12{ BC7 VBC4 VBC6 VBC11 VBC3 vd Fl} VBC13{ BC11 BC4 VBC7 vd} BC10 vd}


 S21106C2 ::~S21106C2(){ note_dtor("S21106C2", this);}
S21106C2 ::S21106C2(){ note_ctor("S21106C2", this);} // tgen

static void Test_S21106C2()
{
  extern Class_Descriptor cd_S21106C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S21106C2, buf);
    S21106C2 *dp, &lv = *(dp=new (buf) S21106C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S21106C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C2)");
    /*is_ambiguous_... S21106C2::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(72,52), "S21106C2");
    check_base_class_offset(lv, (S21106C5*)(S21106C4*), ABISELECT(72,52), "S21106C2");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(72,52), "S21106C2");
    /*is_ambiguous_... S21106C13::S21106C5 */ AMB_check_base_class_offset(lv, (S21106C5*)(S21106C13*), ABISELECT(72,52), "S21106C2");
    /*is_ambiguous_... S21106C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C4*), ABISELECT(96,64), "S21106C2");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(96,64), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C11*), ABISELECT(96,64), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C11*), ABISELECT(96,64), "S21106C2");
    check_base_class_offset(lv, (S21106C7*)(S21106C4*), ABISELECT(8,4), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C7*)(S21106C11*), ABISELECT(8,4), "S21106C2");
    check_base_class_offset(lv, (S21106C7*)(S21106C13*), ABISELECT(8,4), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C7*)(S21106C11*), ABISELECT(8,4), "S21106C2");
    check_base_class_offset(lv, (S2265C38*)(S21106C4*), ABISELECT(104,68), "S21106C2");
    check_base_class_offset(lv, (S2265C38*)(S21106C14*), ABISELECT(104,68), "S21106C2");
    check_base_class_offset(lv, (S21106C4*)(S21106C3*), ABISELECT(24,12), "S21106C2");
    check_base_class_offset(lv, (S21106C4*)(S21106C13*), ABISELECT(24,12), "S21106C2");
    /*is_ambiguous_... S21106C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C3*), ABISELECT(8,4), "S21106C2");
    check_base_class_offset(lv, (S2265C28*)(S21106C3*), 0, "S21106C2");
    check_base_class_offset(lv, (S21106C3*), ABISELECT(8,4), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C11*), ABISELECT(112,72), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*), ABISELECT(160,96), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*), ABISELECT(168,100), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C12 */ AMB_check_base_class_offset(lv, (S21106C5*)(S21106C12*), ABISELECT(168,100), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C12*)(S21106C11*), ABISELECT(160,96), "S21106C2");
    check_base_class_offset(lv, (S21106C12*)(S21106C13*), ABISELECT(160,96), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C12*)(S21106C11*), ABISELECT(160,96), "S21106C2");
    check_base_class_offset(lv, (S21106C11*)(S21106C10*), ABISELECT(112,72), "S21106C2");
    check_base_class_offset(lv, (S21106C10*), ABISELECT(112,72), "S21106C2");
    /*is_ambiguous_... S21106C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C13*), ABISELECT(192,112), "S21106C2");
    check_base_class_offset(lv, (S21106C13*), ABISELECT(192,112), "S21106C2");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*)(S21106C14*), ABISELECT(216,124), "S21106C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*)(S21106C14*), ABISELECT(224,128), "S21106C2");
    check_base_class_offset(lv, (S21106C5*)(S21106C12*)(S21106C14*), ABISELECT(224,128), "S21106C2");
    check_base_class_offset(lv, (S21106C12*)(S21106C14*), ABISELECT(216,124), "S21106C2");
    /*is_ambiguous_... S21106C14::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C14*), ABISELECT(248,140), "S21106C2");
    /*is_ambiguous_... S21106C14::S21106C5 */ AMB_check_base_class_offset(lv, (S21106C5*)(S21106C14*), ABISELECT(248,140), "S21106C2");
    check_base_class_offset(lv, (S21106C14*), ABISELECT(208,120), "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C11*), 0, "S21106C2");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C11*), 0, "S21106C2");
    test_class_info(&lv, &cd_S21106C2);
    dp->~S21106C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C2(Test_S21106C2, "S21106C2", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN8S21106C2C1Ev();
extern void _ZN8S21106C2D2Ev();
Name_Map name_map_S21106C2[] = {
  NSPAIR(_ZN8S21106C2C1Ev),
  NSPAIR(_ZN8S21106C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C4;
extern VTBL_ENTRY _ZTI8S21106C4[];
extern  VTBL_ENTRY _ZTV8S21106C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S21106C3;
extern VTBL_ENTRY _ZTI8S21106C3[];
extern  VTBL_ENTRY _ZTV8S21106C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S21106C11;
extern VTBL_ENTRY _ZTI9S21106C11[];
extern  VTBL_ENTRY _ZTV9S21106C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C11[];
extern Class_Descriptor cd_S21106C10;
extern VTBL_ENTRY _ZTI9S21106C10[];
extern  VTBL_ENTRY _ZTV9S21106C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C13;
extern VTBL_ENTRY _ZTI9S21106C13[];
extern  VTBL_ENTRY _ZTV9S21106C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C14;
extern VTBL_ENTRY _ZTI9S21106C14[];
extern  VTBL_ENTRY _ZTV9S21106C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C11;
extern VTBL_ENTRY _ZTI9S21106C11[];
extern  VTBL_ENTRY _ZTV9S21106C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C11[];
static Base_Class bases_S21106C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21106C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21106C4,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21106C3,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21106C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21106C10,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21106C13,    ABISELECT(192,112), //bcp->offset
    47, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21106C14,    ABISELECT(208,120), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21106C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21106C2[];
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void _ZN8S21106C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void _ZN8S21106C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21106C2D1Ev,_ZThn4_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21106C2D0Ev,_ZThn4_N8S21106C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21106C2D1Ev,_ZThn12_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21106C2D0Ev,_ZThn12_N8S21106C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21106C2D1Ev,_ZThn72_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21106C2D0Ev,_ZThn72_N8S21106C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S21106C2D1Ev,_ZThn112_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S21106C2D0Ev,_ZThn112_N8S21106C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21106C2D1Ev,_ZTv0_n16_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S21106C2D1Ev,_ZThn120_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21106C2D0Ev,_ZTv0_n16_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S21106C2D0Ev,_ZThn120_N8S21106C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21106C2[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21106C2D1Ev,_ZTv0_n16_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21106C2D0Ev,_ZTv0_n16_N8S21106C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21106C2[];
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void _ZN9S21106C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void _ZN9S21106C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C11__A__8S21106C2[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S21106C11D1Ev,_ZThn4_N9S21106C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S21106C11D0Ev,_ZThn4_N9S21106C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C11__A__8S21106C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev)();
extern void _ZN8S21106C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev)();
extern void _ZN8S21106C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C3__8S21106C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21106C3D1Ev,_ZThn8_N8S21106C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S21106C3D0Ev,_ZThn8_N8S21106C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__8S21106C3__8S21106C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21106C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void _ZN8S21106C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
extern void _ZN8S21106C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__8S21106C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C4__8S21106C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev)();
extern void _ZN9S21106C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev)();
extern void _ZN9S21106C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C10__8S21106C2[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C10__8S21106C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21106C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void _ZN9S21106C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void _ZN9S21106C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C11__8S21106C2[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C11__8S21106C2[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void _ZN9S21106C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
extern void _ZN9S21106C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C13__8S21106C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C13__8S21106C2[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C4__9S21106C13__8S21106C2[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern void _ZN9S21106C14D1Ev();
extern void _ZN9S21106C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21106C14__8S21106C2[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C14[0]),
  (VTBL_ENTRY)&_ZN9S21106C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21106C14D0Ev,
};
static  VTT_ENTRY vtt_S21106C2[] = {
  {&(_ZTV8S21106C2[15]),  15,64},
  {&(_tg__ZTV9S21106C11__A__8S21106C2[7]),  7,9},
  {&(_tg__ZTV8S21106C7__9S21106C11__A__8S21106C2[5]),  5,7},
  {&(_ZTV8S21106C2[26]),  26,64},
  {&(_ZTV8S21106C2[35]),  35,64},
  {&(_ZTV8S21106C2[26]),  26,64},
  {&(_ZTV8S21106C2[45]),  45,64},
  {&(_ZTV8S21106C2[45]),  45,64},
  {&(_ZTV8S21106C2[56]),  56,64},
  {&(_ZTV8S21106C2[62]),  62,64},
  {&(_tg__ZTV8S21106C3__8S21106C2[9]),  9,11},
  {&(_tg__ZTV8S21106C4__8S21106C3__8S21106C2[7]),  7,9},
  {&(_tg__ZTV8S21106C3__8S21106C2[9]),  9,11},
  {&(_tg__ZTV8S21106C4__8S21106C2[7]),  7,9},
  {&(_tg__ZTV8S21106C7__8S21106C4__8S21106C2[5]),  5,7},
  {&(_tg__ZTV8S21106C7__8S21106C2[4]),  4,6},
  {&(_tg__ZTV9S21106C10__8S21106C2[8]),  8,10},
  {&(_tg__ZTV9S21106C10__8S21106C2[8]),  8,10},
  {&(_tg__ZTV8S21106C7__9S21106C10__8S21106C2[5]),  5,7},
  {&(_tg__ZTV9S21106C11__8S21106C2[7]),  7,9},
  {&(_tg__ZTV8S21106C7__9S21106C11__8S21106C2[5]),  5,7},
  {&(_tg__ZTV9S21106C13__8S21106C2[9]),  9,11},
  {&(_tg__ZTV8S21106C7__9S21106C13__8S21106C2[5]),  5,7},
  {&(_tg__ZTV8S21106C4__9S21106C13__8S21106C2[7]),  7,9},
  {&(_tg__ZTV9S21106C14__8S21106C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21106C2[];
extern  VTBL_ENTRY _ZTV8S21106C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C2[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21106C3D0Ev,_ZThn8_N8S21106C3D0Ev),
  (VTBL_ENTRY)_ZN8S21106C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21106C3D1Ev,_ZThn8_N8S21106C3D1Ev),
  (VTBL_ENTRY)_ZN8S21106C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21106C11D0Ev,_ZThn4_N9S21106C11D0Ev),
  (VTBL_ENTRY)_ZN9S21106C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21106C11D1Ev,_ZThn4_N9S21106C11D1Ev),
  (VTBL_ENTRY)_ZN9S21106C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21106C2D0Ev,_ZTv0_n16_N8S21106C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21106C2D0Ev,_ZThn120_N8S21106C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21106C2D1Ev,_ZTv0_n16_N8S21106C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21106C2D1Ev,_ZThn120_N8S21106C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21106C2D0Ev,_ZThn112_N8S21106C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21106C2D0Ev,_ZThn72_N8S21106C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21106C2D0Ev,_ZThn12_N8S21106C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21106C2D0Ev,_ZThn4_N8S21106C2D0Ev),
  (VTBL_ENTRY)_ZN8S21106C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21106C2D1Ev,_ZThn112_N8S21106C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21106C2D1Ev,_ZThn72_N8S21106C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21106C2D1Ev,_ZThn12_N8S21106C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21106C2D1Ev,_ZThn4_N8S21106C2D1Ev),
  (VTBL_ENTRY)_ZN8S21106C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21106C2 = {  "S21106C2", // class name
  bases_S21106C2, 27,
  &(vtc_S21106C2[0]), // expected_vtbl_contents
  &(vtt_S21106C2[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI8S21106C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21106C2),64, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21106C2),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21106C1  : virtual S21106C2 {
  ~S21106C1(); // tgen
  S21106C1(); // tgen
};
//SIG(1 S21106C1) C1{ VBC2{ VBC3{ VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC8{ m} vd Fi[9]} BC8 VBC9{ m} Fp} VBC10{ VBC11{ VBC6 BC8 VBC12{ BC6 BC5} VBC7} FC7} VBC13{ BC8 VBC5 VBC7 VBC12 VBC4 vd Fl} VBC14{ BC12 BC5 VBC8 vd} BC11 vd}}


S21106C1 ::~S21106C1(){ note_dtor("S21106C1", this);} // tgen
S21106C1 ::S21106C1(){ note_ctor("S21106C1", this);} // tgen

static void Test_S21106C1()
{
  extern Class_Descriptor cd_S21106C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,39)];
    init_test(&cd_S21106C1, buf);
    S21106C1 *dp, &lv = *(dp=new (buf) S21106C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,152), "sizeof(S21106C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21106C1)");
    /*is_ambiguous_... S21106C1::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*), ABISELECT(72,52), "S21106C1");
    check_base_class_offset(lv, (S21106C5*)(S21106C4*), ABISELECT(72,52), "S21106C1");
    check_base_class_offset(lv, (S21106C5*)(S21106C7*), ABISELECT(72,52), "S21106C1");
    /*is_ambiguous_... S21106C13::S21106C5 */ AMB_check_base_class_offset(lv, (S21106C5*)(S21106C13*), ABISELECT(72,52), "S21106C1");
    /*is_ambiguous_... S21106C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C4*), ABISELECT(96,64), "S21106C1");
    /*is_ambiguous_... S21106C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C7*), ABISELECT(96,64), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C11*), ABISELECT(96,64), "S21106C1");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C11*)(S21106C2*), ABISELECT(96,64), "S21106C1");
    check_base_class_offset(lv, (S21106C7*)(S21106C4*), ABISELECT(8,4), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C7*)(S21106C11*), ABISELECT(8,4), "S21106C1");
    check_base_class_offset(lv, (S21106C7*)(S21106C13*), ABISELECT(8,4), "S21106C1");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C7*)(S21106C11*)(S21106C2*), ABISELECT(8,4), "S21106C1");
    check_base_class_offset(lv, (S2265C38*)(S21106C4*), ABISELECT(104,68), "S21106C1");
    check_base_class_offset(lv, (S2265C38*)(S21106C14*), ABISELECT(104,68), "S21106C1");
    check_base_class_offset(lv, (S21106C4*)(S21106C3*), ABISELECT(24,12), "S21106C1");
    check_base_class_offset(lv, (S21106C4*)(S21106C13*), ABISELECT(24,12), "S21106C1");
    /*is_ambiguous_... S21106C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C3*), ABISELECT(8,4), "S21106C1");
    check_base_class_offset(lv, (S2265C28*)(S21106C3*), 0, "S21106C1");
    check_base_class_offset(lv, (S21106C3*)(S21106C2*), ABISELECT(8,4), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C11*), ABISELECT(112,72), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*), ABISELECT(160,96), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C12 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*), ABISELECT(168,100), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C12 */ AMB_check_base_class_offset(lv, (S21106C5*)(S21106C12*), ABISELECT(168,100), "S21106C1");
    /*is_ambiguous_... S21106C1::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C12*)(S21106C11*), ABISELECT(160,96), "S21106C1");
    check_base_class_offset(lv, (S21106C12*)(S21106C13*), ABISELECT(160,96), "S21106C1");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C12*)(S21106C11*)(S21106C2*), ABISELECT(160,96), "S21106C1");
    check_base_class_offset(lv, (S21106C11*)(S21106C10*), ABISELECT(112,72), "S21106C1");
    check_base_class_offset(lv, (S21106C10*)(S21106C2*), ABISELECT(112,72), "S21106C1");
    /*is_ambiguous_... S21106C13::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C13*), ABISELECT(192,112), "S21106C1");
    check_base_class_offset(lv, (S21106C13*)(S21106C2*), ABISELECT(192,112), "S21106C1");
    /*is_ambiguous_... S21106C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C12*)(S21106C14*), ABISELECT(216,124), "S21106C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C12*)(S21106C14*), ABISELECT(224,128), "S21106C1");
    check_base_class_offset(lv, (S21106C5*)(S21106C12*)(S21106C14*), ABISELECT(224,128), "S21106C1");
    check_base_class_offset(lv, (S21106C12*)(S21106C14*), ABISELECT(216,124), "S21106C1");
    /*is_ambiguous_... S21106C14::S21106C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S21106C5*)(S21106C14*), ABISELECT(248,140), "S21106C1");
    /*is_ambiguous_... S21106C14::S21106C5 */ AMB_check_base_class_offset(lv, (S21106C5*)(S21106C14*), ABISELECT(248,140), "S21106C1");
    check_base_class_offset(lv, (S21106C14*)(S21106C2*), ABISELECT(208,120), "S21106C1");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S2265C38*)(S21106C11*)(S21106C2*), 0, "S21106C1");
    /*is_ambiguous_... S21106C2::S21106C11 */ AMB_check_base_class_offset(lv, (S21106C11*)(S21106C2*), 0, "S21106C1");
    check_base_class_offset(lv, (S21106C2*), 0, "S21106C1");
    test_class_info(&lv, &cd_S21106C1);
    dp->~S21106C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21106C1(Test_S21106C1, "S21106C1", ABISELECT(272,152));

#else // __cplusplus

extern void _ZN8S21106C1C1Ev();
extern void _ZN8S21106C1D1Ev();
Name_Map name_map_S21106C1[] = {
  NSPAIR(_ZN8S21106C1C1Ev),
  NSPAIR(_ZN8S21106C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C7;
extern VTBL_ENTRY _ZTI8S21106C7[];
extern  VTBL_ENTRY _ZTV8S21106C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C4;
extern VTBL_ENTRY _ZTI8S21106C4[];
extern  VTBL_ENTRY _ZTV8S21106C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C4[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S21106C3;
extern VTBL_ENTRY _ZTI8S21106C3[];
extern  VTBL_ENTRY _ZTV8S21106C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C3[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S21106C11;
extern VTBL_ENTRY _ZTI9S21106C11[];
extern  VTBL_ENTRY _ZTV9S21106C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C11[];
extern Class_Descriptor cd_S21106C10;
extern VTBL_ENTRY _ZTI9S21106C10[];
extern  VTBL_ENTRY _ZTV9S21106C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C10[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C13;
extern VTBL_ENTRY _ZTI9S21106C13[];
extern  VTBL_ENTRY _ZTV9S21106C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C13[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C12;
extern VTBL_ENTRY _ZTI9S21106C12[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S21106C5;
extern VTBL_ENTRY _ZTI8S21106C5[];
extern Class_Descriptor cd_S21106C14;
extern VTBL_ENTRY _ZTI9S21106C14[];
extern  VTBL_ENTRY _ZTV9S21106C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C14[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21106C11;
extern VTBL_ENTRY _ZTI9S21106C11[];
extern  VTBL_ENTRY _ZTV9S21106C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21106C11[];
extern Class_Descriptor cd_S21106C2;
extern VTBL_ENTRY _ZTI8S21106C2[];
extern  VTBL_ENTRY _ZTV8S21106C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C2[];
static Base_Class bases_S21106C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21106C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21106C4,    ABISELECT(24,12), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S21106C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(168,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21106C11,    ABISELECT(112,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21106C10,    ABISELECT(112,72), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S21106C13,    ABISELECT(192,112), //bcp->offset
    48, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(224,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21106C12,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S21106C5,    ABISELECT(248,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21106C14,    ABISELECT(208,120), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21106C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S21106C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21106C1[];
extern void ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev)();
extern void _ZN8S21106C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev)();
extern void _ZN8S21106C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S21106C1D1Ev,_ZThn4_N8S21106C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S21106C1D0Ev,_ZThn4_N8S21106C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S21106C1D1Ev,_ZThn12_N8S21106C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S21106C1D0Ev,_ZThn12_N8S21106C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S21106C1D1Ev,_ZThn72_N8S21106C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S21106C1D0Ev,_ZThn72_N8S21106C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S21106C1D1Ev,_ZThn112_N8S21106C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S21106C1D0Ev,_ZThn112_N8S21106C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21106C1D1Ev,_ZTv0_n16_N8S21106C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S21106C1D1Ev,_ZThn120_N8S21106C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21106C1D0Ev,_ZTv0_n16_N8S21106C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S21106C1D0Ev,_ZThn120_N8S21106C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21106C1[] = {
  0,
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev),
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev),
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S21106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev),
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S21106C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21106C1D1Ev,_ZTv0_n16_N8S21106C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21106C1D0Ev,_ZTv0_n16_N8S21106C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21106C1[];
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void _ZN8S21106C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void _ZN8S21106C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C2__8S21106C1[] = {
  ABISELECT(208,120),
  ABISELECT(192,112),
  ABISELECT(112,72),
  ABISELECT(112,72),
  0,
  ABISELECT(104,68),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void _ZN9S21106C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void _ZN9S21106C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C118S21106C2__A1__8S21106C1[] = {
  ABISELECT(8,4),
  ABISELECT(160,96),
  0,
  ABISELECT(72,52),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S21106C11D1Ev,_ZThn4_N9S21106C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S21106C11D0Ev,_ZThn4_N9S21106C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C118S21106C2__A1__8S21106C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21106C2D1Ev,_ZThn4_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21106C2D0Ev,_ZThn4_N8S21106C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C3__8S21106C2__8S21106C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21106C2D1Ev,_ZThn12_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21106C2D0Ev,_ZThn12_N8S21106C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__8S21106C2__8S21106C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S21106C2D1Ev,_ZThn72_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S21106C2D0Ev,_ZThn72_N8S21106C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C10__8S21106C2__8S21106C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  ABISELECT(-112,-72),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn192_N8S21106C2D1Ev,_ZThn112_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn192_N8S21106C2D0Ev,_ZThn112_N8S21106C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C13__8S21106C2__8S21106C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  ABISELECT(-192,-112),
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21106C2D1Ev,_ZTv0_n16_N8S21106C2D1Ev)();
extern void ABISELECT(_ZThn208_N8S21106C2D1Ev,_ZThn120_N8S21106C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21106C2D0Ev,_ZTv0_n16_N8S21106C2D0Ev)();
extern void ABISELECT(_ZThn208_N8S21106C2D0Ev,_ZThn120_N8S21106C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C14__8S21106C2__8S21106C1[] = {
  ABISELECT(-208,-120),
  ABISELECT(-104,-52),
  ABISELECT(-208,-120),
  (VTBL_ENTRY)&(_ZTI8S21106C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21106C2D1Ev,_ZTv0_n16_N8S21106C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21106C2D0Ev,_ZTv0_n16_N8S21106C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev)();
extern void _ZN8S21106C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev)();
extern void _ZN8S21106C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C3__8S21106C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(96,64),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S21106C3D1Ev,_ZThn8_N8S21106C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S21106C3D0Ev,_ZThn8_N8S21106C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__8S21106C3__8S21106C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21106C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void _ZN8S21106C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
extern void _ZN8S21106C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21106C4__8S21106C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C4__8S21106C1[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21106C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev),
};
extern void _ZN8S21106C7D1Ev();
extern void _ZN8S21106C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21106C7__8S21106C1[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21106C7[0]),
  (VTBL_ENTRY)&_ZN8S21106C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21106C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev)();
extern void _ZN9S21106C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev)();
extern void _ZN9S21106C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C10__8S21106C1[] = {
  0,
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C10__8S21106C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21106C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void _ZN9S21106C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
extern void _ZN9S21106C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C11__8S21106C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(48,24),
  0,
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C11__8S21106C1[] = {
  ABISELECT(104,68),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI9S21106C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void _ZN9S21106C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
extern void _ZN9S21106C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21106C13__8S21106C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-168,-100),
  ABISELECT(-32,-16),
  ABISELECT(-184,-108),
  0,
  ABISELECT(-120,-60),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C7__9S21106C13__8S21106C1[] = {
  ABISELECT(184,108),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(184,108),
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21106C4__9S21106C13__8S21106C1[] = {
  ABISELECT(80,56),
  ABISELECT(-16,-8),
  ABISELECT(168,100),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(168,100),
  (VTBL_ENTRY)&(_ZTI9S21106C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev),
};
extern void _ZN9S21106C14D1Ev();
extern void _ZN9S21106C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21106C14__8S21106C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21106C14[0]),
  (VTBL_ENTRY)&_ZN9S21106C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21106C14D0Ev,
};
static  VTT_ENTRY vtt_S21106C1[] = {
  {&(_ZTV8S21106C1[16]),  16,65},
  {&(_ZTV8S21106C1[16]),  16,65},
  {&(_ZTV8S21106C1[27]),  27,65},
  {&(_ZTV8S21106C1[36]),  36,65},
  {&(_ZTV8S21106C1[27]),  27,65},
  {&(_ZTV8S21106C1[46]),  46,65},
  {&(_ZTV8S21106C1[46]),  46,65},
  {&(_ZTV8S21106C1[57]),  57,65},
  {&(_ZTV8S21106C1[63]),  63,65},
  {&(_tg__ZTV8S21106C2__8S21106C1[15]),  15,17},
  {&(_tg__ZTV9S21106C118S21106C2__A1__8S21106C1[7]),  7,9},
  {&(_tg__ZTV8S21106C7__9S21106C118S21106C2__A1__8S21106C1[5]),  5,7},
  {&(_tg__ZTV8S21106C3__8S21106C2__8S21106C1[9]),  9,11},
  {&(_tg__ZTV8S21106C4__8S21106C2__8S21106C1[7]),  7,9},
  {&(_tg__ZTV8S21106C3__8S21106C2__8S21106C1[9]),  9,11},
  {&(_tg__ZTV9S21106C10__8S21106C2__8S21106C1[8]),  8,10},
  {&(_tg__ZTV9S21106C10__8S21106C2__8S21106C1[8]),  8,10},
  {&(_tg__ZTV9S21106C13__8S21106C2__8S21106C1[9]),  9,11},
  {&(_tg__ZTV9S21106C14__8S21106C2__8S21106C1[4]),  4,6},
  {&(_tg__ZTV8S21106C3__8S21106C1[9]),  9,11},
  {&(_tg__ZTV8S21106C4__8S21106C3__8S21106C1[7]),  7,9},
  {&(_tg__ZTV8S21106C3__8S21106C1[9]),  9,11},
  {&(_tg__ZTV8S21106C4__8S21106C1[7]),  7,9},
  {&(_tg__ZTV8S21106C7__8S21106C4__8S21106C1[5]),  5,7},
  {&(_tg__ZTV8S21106C7__8S21106C1[4]),  4,6},
  {&(_tg__ZTV9S21106C10__8S21106C1[8]),  8,10},
  {&(_tg__ZTV9S21106C10__8S21106C1[8]),  8,10},
  {&(_tg__ZTV8S21106C7__9S21106C10__8S21106C1[5]),  5,7},
  {&(_tg__ZTV9S21106C11__8S21106C1[7]),  7,9},
  {&(_tg__ZTV8S21106C7__9S21106C11__8S21106C1[5]),  5,7},
  {&(_tg__ZTV9S21106C13__8S21106C1[9]),  9,11},
  {&(_tg__ZTV8S21106C7__9S21106C13__8S21106C1[5]),  5,7},
  {&(_tg__ZTV8S21106C4__9S21106C13__8S21106C1[7]),  7,9},
  {&(_tg__ZTV9S21106C14__8S21106C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21106C1[];
extern  VTBL_ENTRY _ZTV8S21106C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21106C1[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C13D0Ev,_ZTv0_n20_N9S21106C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C13D1Ev,_ZTv0_n20_N9S21106C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C10D0Ev,_ZTv0_n20_N9S21106C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C10D1Ev,_ZTv0_n20_N9S21106C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D0Ev,_ZTv0_n20_N8S21106C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C4D1Ev,_ZTv0_n20_N8S21106C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21106C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C3D0Ev,_ZTv0_n20_N8S21106C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21106C3D0Ev,_ZThn8_N8S21106C3D0Ev),
  (VTBL_ENTRY)_ZN8S21106C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C3D1Ev,_ZTv0_n20_N8S21106C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21106C3D1Ev,_ZThn8_N8S21106C3D1Ev),
  (VTBL_ENTRY)_ZN8S21106C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21106C2D0Ev,_ZTv0_n16_N8S21106C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21106C2D0Ev,_ZThn120_N8S21106C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21106C2D1Ev,_ZTv0_n16_N8S21106C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21106C2D1Ev,_ZThn120_N8S21106C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C11D0Ev,_ZTv0_n20_N9S21106C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S21106C11D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21106C11D0Ev,_ZThn4_N9S21106C11D0Ev),
  (VTBL_ENTRY)_ZN9S21106C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21106C11D1Ev,_ZTv0_n20_N9S21106C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S21106C11D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21106C11D1Ev,_ZThn4_N9S21106C11D1Ev),
  (VTBL_ENTRY)_ZN9S21106C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C2D0Ev,_ZTv0_n20_N8S21106C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21106C2D0Ev,_ZThn112_N8S21106C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21106C2D0Ev,_ZThn72_N8S21106C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21106C2D0Ev,_ZThn12_N8S21106C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21106C2D0Ev,_ZThn4_N8S21106C2D0Ev),
  (VTBL_ENTRY)_ZN8S21106C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C2D1Ev,_ZTv0_n20_N8S21106C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21106C2D1Ev,_ZThn112_N8S21106C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21106C2D1Ev,_ZThn72_N8S21106C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21106C2D1Ev,_ZThn12_N8S21106C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21106C2D1Ev,_ZThn4_N8S21106C2D1Ev),
  (VTBL_ENTRY)_ZN8S21106C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21106C1D0Ev,_ZTv0_n16_N8S21106C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21106C1D0Ev,_ZThn120_N8S21106C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21106C1D1Ev,_ZTv0_n16_N8S21106C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S21106C1D1Ev,_ZThn120_N8S21106C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C1D0Ev,_ZTv0_n20_N8S21106C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21106C1D0Ev,_ZThn112_N8S21106C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21106C1D0Ev,_ZThn72_N8S21106C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21106C1D0Ev,_ZThn12_N8S21106C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21106C1D0Ev,_ZThn4_N8S21106C1D0Ev),
  (VTBL_ENTRY)_ZN8S21106C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21106C1D1Ev,_ZTv0_n20_N8S21106C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21106C1D1Ev,_ZThn112_N8S21106C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21106C1D1Ev,_ZThn72_N8S21106C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21106C1D1Ev,_ZThn12_N8S21106C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21106C1D1Ev,_ZThn4_N8S21106C1D1Ev),
  (VTBL_ENTRY)_ZN8S21106C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21106C1 = {  "S21106C1", // class name
  bases_S21106C1, 28,
  &(vtc_S21106C1[0]), // expected_vtbl_contents
  &(vtt_S21106C1[0]), // expected_vtt_contents
  ABISELECT(272,152), // object size
  NSPAIRA(_ZTI8S21106C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21106C1),65, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21106C1),34, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C2  : virtual S19859C6 {
  virtual  ~S7881C2(); // _ZN7S7881C2D2Ev
  S7881C2(); // tgen
};
//SIG(-1 S7881C2) C1{ VBC2{ vd m Fs} vd}


 S7881C2 ::~S7881C2(){ note_dtor("S7881C2", this);}
S7881C2 ::S7881C2(){ note_ctor("S7881C2", this);} // tgen

static void Test_S7881C2()
{
  extern Class_Descriptor cd_S7881C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7881C2, buf);
    S7881C2 *dp, &lv = *(dp=new (buf) S7881C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7881C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C2)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S7881C2");
    test_class_info(&lv, &cd_S7881C2);
    dp->~S7881C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C2(Test_S7881C2, "S7881C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7881C2C1Ev();
extern void _ZN7S7881C2D2Ev();
Name_Map name_map_S7881C2[] = {
  NSPAIR(_ZN7S7881C2C1Ev),
  NSPAIR(_ZN7S7881C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S7881C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C2[];
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C2[];
static  VTT_ENTRY vtt_S7881C2[] = {
  {&(_ZTV7S7881C2[3]),  3,10},
  {&(_ZTV7S7881C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C2 = {  "S7881C2", // class name
  bases_S7881C2, 1,
  &(vtc_S7881C2[0]), // expected_vtbl_contents
  &(vtt_S7881C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7881C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7881C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C5  : virtual S19859C6 {
  ~S7881C5(); // tgen
  S7881C5(); // tgen
};
//SIG(-1 S7881C5) C1{ VBC2{ vd m Fs}}


S7881C5 ::~S7881C5(){ note_dtor("S7881C5", this);} // tgen
S7881C5 ::S7881C5(){ note_ctor("S7881C5", this);} // tgen

static void Test_S7881C5()
{
  extern Class_Descriptor cd_S7881C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7881C5, buf);
    S7881C5 *dp, &lv = *(dp=new (buf) S7881C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7881C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C5)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S7881C5");
    test_class_info(&lv, &cd_S7881C5);
    dp->~S7881C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C5(Test_S7881C5, "S7881C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7881C5C1Ev();
extern void _ZN7S7881C5D1Ev();
Name_Map name_map_S7881C5[] = {
  NSPAIR(_ZN7S7881C5C1Ev),
  NSPAIR(_ZN7S7881C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S7881C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C5[];
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C5[];
static  VTT_ENTRY vtt_S7881C5[] = {
  {&(_ZTV7S7881C5[3]),  3,10},
  {&(_ZTV7S7881C5[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C5 = {  "S7881C5", // class name
  bases_S7881C5, 1,
  &(vtc_S7881C5[0]), // expected_vtbl_contents
  &(vtt_S7881C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7881C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7881C5),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C4  : virtual S19859C6 , virtual S7881C5 {
  ~S7881C4(); // tgen
  S7881C4(); // tgen
};
//SIG(-1 S7881C4) C1{ VBC2{ vd m Fs} VBC3{ VBC2}}


S7881C4 ::~S7881C4(){ note_dtor("S7881C4", this);} // tgen
S7881C4 ::S7881C4(){ note_ctor("S7881C4", this);} // tgen

static void Test_S7881C4()
{
  extern Class_Descriptor cd_S7881C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7881C4, buf);
    S7881C4 *dp, &lv = *(dp=new (buf) S7881C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7881C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C4)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S7881C4");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(8,4), "S7881C4");
    check_base_class_offset(lv, (S7881C5*), 0, "S7881C4");
    test_class_info(&lv, &cd_S7881C4);
    dp->~S7881C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C4(Test_S7881C4, "S7881C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7881C4C1Ev();
extern void _ZN7S7881C4D1Ev();
Name_Map name_map_S7881C4[] = {
  NSPAIR(_ZN7S7881C4C1Ev),
  NSPAIR(_ZN7S7881C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
static Base_Class bases_S7881C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C4[];
extern void _ZN7S7881C4D1Ev();
extern void _ZN7S7881C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7881C4D1Ev,_ZTv0_n12_N7S7881C4D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C4D1Ev,_ZThn4_N7S7881C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C4D0Ev,_ZTv0_n12_N7S7881C4D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C4D0Ev,_ZThn4_N7S7881C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C4[0]),
  (VTBL_ENTRY)&_ZN7S7881C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C4D1Ev,_ZTv0_n12_N7S7881C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C4D0Ev,_ZTv0_n12_N7S7881C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C4[];
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__7S7881C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
static  VTT_ENTRY vtt_S7881C4[] = {
  {&(_ZTV7S7881C4[5]),  5,12},
  {&(_ZTV7S7881C4[10]),  10,12},
  {&(_ZTV7S7881C4[5]),  5,12},
  {&(_tg__ZTV7S7881C5__7S7881C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__7S7881C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7881C4[];
extern  VTBL_ENTRY _ZTV7S7881C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C4[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C4D0Ev,_ZTv0_n12_N7S7881C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C4D0Ev,_ZThn4_N7S7881C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C4D1Ev,_ZTv0_n12_N7S7881C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C4D1Ev,_ZThn4_N7S7881C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C4 = {  "S7881C4", // class name
  bases_S7881C4, 2,
  &(vtc_S7881C4[0]), // expected_vtbl_contents
  &(vtt_S7881C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7881C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7881C4),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C4),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C7  : virtual S7881C5 {
  virtual  ~S7881C7(); // _ZN7S7881C7D2Ev
  S7881C7(); // tgen
};
//SIG(-1 S7881C7) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S7881C7 ::~S7881C7(){ note_dtor("S7881C7", this);}
S7881C7 ::S7881C7(){ note_ctor("S7881C7", this);} // tgen

static void Test_S7881C7()
{
  extern Class_Descriptor cd_S7881C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7881C7, buf);
    S7881C7 *dp, &lv = *(dp=new (buf) S7881C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7881C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C7)");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(8,4), "S7881C7");
    check_base_class_offset(lv, (S7881C5*), 0, "S7881C7");
    test_class_info(&lv, &cd_S7881C7);
    dp->~S7881C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C7(Test_S7881C7, "S7881C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7881C7C1Ev();
extern void _ZN7S7881C7D2Ev();
Name_Map name_map_S7881C7[] = {
  NSPAIR(_ZN7S7881C7C1Ev),
  NSPAIR(_ZN7S7881C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
static Base_Class bases_S7881C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7881C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C7[];
extern void _ZN7S7881C7D1Ev();
extern void _ZN7S7881C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C7D1Ev,_ZThn4_N7S7881C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C7D0Ev,_ZThn4_N7S7881C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&_ZN7S7881C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C7[];
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__7S7881C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
static  VTT_ENTRY vtt_S7881C7[] = {
  {&(_ZTV7S7881C7[5]),  5,12},
  {&(_ZTV7S7881C7[5]),  5,12},
  {&(_ZTV7S7881C7[10]),  10,12},
  {&(_tg__ZTV7S7881C5__7S7881C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__7S7881C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7881C7[];
extern  VTBL_ENTRY _ZTV7S7881C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C7[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C7D0Ev,_ZThn4_N7S7881C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C7D1Ev,_ZThn4_N7S7881C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C7 = {  "S7881C7", // class name
  bases_S7881C7, 2,
  &(vtc_S7881C7[0]), // expected_vtbl_contents
  &(vtt_S7881C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7881C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7881C7),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C7),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C10  : virtual S19859C6 , virtual S7881C2 , S7881C5 {
  int s7881c10f0;
  virtual  ~S7881C10(); // _ZN8S7881C10D2Ev
  S7881C10(); // tgen
};
//SIG(-1 S7881C10) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S7881C10 ::~S7881C10(){ note_dtor("S7881C10", this);}
S7881C10 ::S7881C10(){ note_ctor("S7881C10", this);} // tgen

static void Test_S7881C10()
{
  extern Class_Descriptor cd_S7881C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7881C10, buf);
    S7881C10 *dp, &lv = *(dp=new (buf) S7881C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7881C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C10)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S7881C10");
    check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(16,8), "S7881C10");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(16,8), "S7881C10");
    check_base_class_offset(lv, (S7881C2*), ABISELECT(32,16), "S7881C10");
    check_base_class_offset(lv, (S7881C5*), 0, "S7881C10");
    check_field_offset(lv, s7881c10f0, ABISELECT(8,4), "S7881C10.s7881c10f0");
    test_class_info(&lv, &cd_S7881C10);
    dp->~S7881C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C10(Test_S7881C10, "S7881C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S7881C10C1Ev();
extern void _ZN8S7881C10D2Ev();
Name_Map name_map_S7881C10[] = {
  NSPAIR(_ZN8S7881C10C1Ev),
  NSPAIR(_ZN8S7881C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
static Base_Class bases_S7881C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C2,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7881C10[];
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn8_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn8_N8S7881C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn32_N8S7881C10D1Ev,_ZThn16_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn32_N8S7881C10D0Ev,_ZThn16_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C10[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S7881C10[];
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__8S7881C10[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C5D1Ev,_ZThn8_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S7881C5D0Ev,_ZThn8_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__8S7881C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C10[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__8S7881C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
static  VTT_ENTRY vtt_S7881C10[] = {
  {&(_ZTV8S7881C10[4]),  4,17},
  {&(_tg__ZTV7S7881C5__8S7881C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__8S7881C10[3]),  3,5},
  {&(_ZTV8S7881C10[9]),  9,17},
  {&(_ZTV8S7881C10[15]),  15,17},
  {&(_tg__ZTV7S7881C2__8S7881C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__8S7881C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7881C5D0Ev,_ZThn8_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7881C5D1Ev,_ZThn8_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7881C10D0Ev,_ZThn16_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S7881C10D1Ev,_ZThn16_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn8_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn8_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C10 = {  "S7881C10", // class name
  bases_S7881C10, 3,
  &(vtc_S7881C10[0]), // expected_vtbl_contents
  &(vtt_S7881C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S7881C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7881C10),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7881C10),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C9  : S19859C6 , virtual S7881C2 , S7881C10 , virtual S7881C5 {
  int s7881c9f0;
  virtual  ~S7881C9(); // _ZN7S7881C9D2Ev
  S7881C9(); // tgen
};
//SIG(-1 S7881C9) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2 VBC3 BC5{ VBC2} vd Fi} VBC5 vd Fi}


 S7881C9 ::~S7881C9(){ note_dtor("S7881C9", this);}
S7881C9 ::S7881C9(){ note_ctor("S7881C9", this);} // tgen

static void Test_S7881C9()
{
  extern Class_Descriptor cd_S7881C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7881C9, buf);
    S7881C9 *dp, &lv = *(dp=new (buf) S7881C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7881C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C9)");
    /*is_ambiguous_... S7881C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S7881C9");
    check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(40,24), "S7881C9");
    check_base_class_offset(lv, (S19859C6*)(S7881C10*), ABISELECT(40,24), "S7881C9");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*), ABISELECT(40,24), "S7881C9");
    /*is_ambiguous_... S7881C9::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(40,24), "S7881C9");
    check_base_class_offset(lv, (S7881C2*), ABISELECT(32,20), "S7881C9");
    check_base_class_offset(lv, (S7881C2*)(S7881C10*), ABISELECT(32,20), "S7881C9");
    check_base_class_offset(lv, (S7881C5*)(S7881C10*), ABISELECT(16,8), "S7881C9");
    check_base_class_offset(lv, (S7881C10*), ABISELECT(16,8), "S7881C9");
    /*is_ambiguous_... S7881C9::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*), ABISELECT(56,32), "S7881C9");
    check_field_offset(lv, s7881c9f0, ABISELECT(28,16), "S7881C9.s7881c9f0");
    test_class_info(&lv, &cd_S7881C9);
    dp->~S7881C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C9(Test_S7881C9, "S7881C9", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S7881C9C1Ev();
extern void _ZN7S7881C9D2Ev();
Name_Map name_map_S7881C9[] = {
  NSPAIR(_ZN7S7881C9C1Ev),
  NSPAIR(_ZN7S7881C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
static Base_Class bases_S7881C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7881C2,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7881C5,    ABISELECT(56,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C9[];
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C9D1Ev,_ZThn24_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C9D0Ev,_ZThn24_N7S7881C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C9D1Ev,_ZThn32_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C9D0Ev,_ZThn32_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C9[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C9[];
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C10__7S7881C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7881C5D1Ev,_ZThn16_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7881C5D0Ev,_ZThn16_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C10__7S7881C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S7881C10D1Ev,_ZThn16_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S7881C10D0Ev,_ZThn16_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C10__7S7881C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C10__7S7881C9[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__7S7881C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__A1__7S7881C9[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
static  VTT_ENTRY vtt_S7881C9[] = {
  {&(_ZTV7S7881C9[5]),  5,30},
  {&(_tg__ZTV8S7881C10__7S7881C9[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C10__7S7881C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C10__7S7881C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C10__7S7881C9[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C10__7S7881C9[4]),  4,6},
  {&(_ZTV7S7881C9[17]),  17,30},
  {&(_ZTV7S7881C9[22]),  22,30},
  {&(_ZTV7S7881C9[11]),  11,30},
  {&(_ZTV7S7881C9[28]),  28,30},
  {&(_tg__ZTV7S7881C2__7S7881C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__7S7881C9[3]),  3,5},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__A1__7S7881C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7881C10D0Ev,_ZThn16_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7881C10D1Ev,_ZThn16_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7881C5D0Ev,_ZThn16_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7881C5D1Ev,_ZThn16_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C9D0Ev,_ZThn24_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C9D1Ev,_ZThn24_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C9D0Ev,_ZThn32_N7S7881C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C9D1Ev,_ZThn32_N7S7881C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C9 = {  "S7881C9", // class name
  bases_S7881C9, 6,
  &(vtc_S7881C9[0]), // expected_vtbl_contents
  &(vtt_S7881C9[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S7881C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7881C9),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C9),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C8  : virtual S7881C9 , S7881C5 {
  virtual  ~S7881C8(); // _ZN7S7881C8D2Ev
  S7881C8(); // tgen
};
//SIG(-1 S7881C8) C1{ VBC2{ BC3{ vd m Fs} VBC4{ VBC3 vd} BC5{ VBC3 VBC4 BC6{ VBC3} vd Fi} VBC6 vd Fi} BC6 vd}


 S7881C8 ::~S7881C8(){ note_dtor("S7881C8", this);}
S7881C8 ::S7881C8(){ note_ctor("S7881C8", this);} // tgen

static void Test_S7881C8()
{
  extern Class_Descriptor cd_S7881C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7881C8, buf);
    S7881C8 *dp, &lv = *(dp=new (buf) S7881C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7881C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C8)");
    /*is_ambiguous_... S7881C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C9*), ABISELECT(8,4), "S7881C8");
    check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(48,28), "S7881C8");
    check_base_class_offset(lv, (S19859C6*)(S7881C10*)(S7881C9*), ABISELECT(48,28), "S7881C8");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(48,28), "S7881C8");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(48,28), "S7881C8");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(48,28), "S7881C8");
    check_base_class_offset(lv, (S7881C2*)(S7881C9*), ABISELECT(40,24), "S7881C8");
    check_base_class_offset(lv, (S7881C2*)(S7881C10*)(S7881C9*), ABISELECT(40,24), "S7881C8");
    check_base_class_offset(lv, (S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(24,12), "S7881C8");
    check_base_class_offset(lv, (S7881C10*)(S7881C9*), ABISELECT(24,12), "S7881C8");
    /*is_ambiguous_... S7881C9::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C9*), ABISELECT(64,36), "S7881C8");
    check_base_class_offset(lv, (S7881C9*), ABISELECT(8,4), "S7881C8");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*), 0, "S7881C8");
    test_class_info(&lv, &cd_S7881C8);
    dp->~S7881C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C8(Test_S7881C8, "S7881C8", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S7881C8C1Ev();
extern void _ZN7S7881C8D2Ev();
Name_Map name_map_S7881C8[] = {
  NSPAIR(_ZN7S7881C8C1Ev),
  NSPAIR(_ZN7S7881C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C9;
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
static Base_Class bases_S7881C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(48,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7881C2,    ABISELECT(40,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7881C5,    ABISELECT(64,36), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7881C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C8[];
extern void _ZN7S7881C8D1Ev();
extern void _ZN7S7881C8D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C8D1Ev,_ZThn4_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C8D0Ev,_ZThn4_N7S7881C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C8D1Ev,_ZThn24_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C8D0Ev,_ZThn24_N7S7881C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn48_N7S7881C8D1Ev,_ZThn28_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn48_N7S7881C8D0Ev,_ZThn28_N7S7881C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn64_N7S7881C8D1Ev,_ZThn36_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn64_N7S7881C8D0Ev,_ZThn36_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C8[] = {
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&_ZN7S7881C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C8D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev),
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(8,4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C8[];
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A__7S7881C8[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn48_N7S7881C5D1Ev,_ZThn28_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn48_N7S7881C5D0Ev,_ZThn28_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__A__7S7881C8[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C8[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C8[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C107S7881C9__7S7881C8[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7881C5D1Ev,_ZThn16_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7881C5D0Ev,_ZThn16_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__7S7881C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S7881C10D1Ev,_ZThn16_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S7881C10D0Ev,_ZThn16_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C107S7881C9__7S7881C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C107S7881C9__7S7881C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9__7S7881C8[] = {
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C9D1Ev,_ZThn24_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C9D0Ev,_ZThn24_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C9__7S7881C8[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9__7S7881C8[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C9D1Ev,_ZThn32_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C9D0Ev,_ZThn32_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9__7S7881C8[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__7S7881C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__A1__7S7881C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
static  VTT_ENTRY vtt_S7881C8[] = {
  {&(_ZTV7S7881C8[6]),  6,39},
  {&(_tg__ZTV7S7881C5__A__7S7881C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__A__7S7881C8[3]),  3,5},
  {&(_ZTV7S7881C8[14]),  14,39},
  {&(_ZTV7S7881C8[26]),  26,39},
  {&(_ZTV7S7881C8[31]),  31,39},
  {&(_ZTV7S7881C8[20]),  20,39},
  {&(_ZTV7S7881C8[37]),  37,39},
  {&(_tg__ZTV7S7881C9__7S7881C8[5]),  5,7},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C8[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C107S7881C9__7S7881C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__7S7881C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C107S7881C9__7S7881C8[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C107S7881C9__7S7881C8[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C9__7S7881C8[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C9__7S7881C8[3]),  3,5},
  {&(_tg__ZTV8S7881C10__7S7881C9__7S7881C8[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9__7S7881C8[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__7S7881C8[3]),  3,5},
  {&(_tg__ZTV7S7881C5__A1__7S7881C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__A1__7S7881C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7881C8[];
extern  VTBL_ENTRY _ZTV7S7881C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C8[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C9D0Ev,_ZThn24_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C9D1Ev,_ZThn24_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C9D0Ev,_ZThn32_N7S7881C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C9D1Ev,_ZThn32_N7S7881C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7881C10D0Ev,_ZThn16_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7881C10D1Ev,_ZThn16_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7881C5D0Ev,_ZThn16_N7S7881C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C5D0Ev,_ZThn28_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7881C5D1Ev,_ZThn16_N7S7881C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C5D1Ev,_ZThn28_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C8D0Ev,_ZThn28_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C8D1Ev,_ZThn28_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C8D0Ev,_ZThn36_N7S7881C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C8D0Ev,_ZThn24_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C8D1Ev,_ZThn36_N7S7881C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C8D1Ev,_ZThn24_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C8D0Ev,_ZThn4_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C8D1Ev,_ZThn4_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C8 = {  "S7881C8", // class name
  bases_S7881C8, 8,
  &(vtc_S7881C8[0]), // expected_vtbl_contents
  &(vtt_S7881C8[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S7881C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7881C8),39, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C8),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C6  : S7881C7 , virtual S7881C8 , virtual S7881C10 {
  ~S7881C6(); // tgen
  S7881C6(); // tgen
};
//SIG(-1 S7881C6) C1{ BC2{ VBC3{ VBC4{ vd m Fs}} vd} VBC5{ VBC6{ BC4 VBC7{ VBC4 vd} BC8{ VBC4 VBC7 BC3 vd Fi} VBC3 vd Fi} BC3 vd} VBC8}


S7881C6 ::~S7881C6(){ note_dtor("S7881C6", this);} // tgen
S7881C6 ::S7881C6(){ note_ctor("S7881C6", this);} // tgen

static void Test_S7881C6()
{
  extern Class_Descriptor cd_S7881C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S7881C6, buf);
    S7881C6 *dp, &lv = *(dp=new (buf) S7881C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S7881C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C6)");
    /*is_ambiguous_... S7881C6::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(8,4), "S7881C6");
    check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(8,4), "S7881C6");
    check_base_class_offset(lv, (S19859C6*)(S7881C10*)(S7881C9*), ABISELECT(8,4), "S7881C6");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(8,4), "S7881C6");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C8*), ABISELECT(8,4), "S7881C6");
    /*is_ambiguous_... S7881C6::S7881C10 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C10*), ABISELECT(8,4), "S7881C6");
    /*is_ambiguous_... S7881C6::S7881C10 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*), ABISELECT(8,4), "S7881C6");
    check_base_class_offset(lv, (S7881C5*)(S7881C7*), 0, "S7881C6");
    /*is_ambiguous_... S7881C9::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C9*), 0, "S7881C6");
    check_base_class_offset(lv, (S7881C7*), 0, "S7881C6");
    /*is_ambiguous_... S7881C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C9*), ABISELECT(32,16), "S7881C6");
    check_base_class_offset(lv, (S7881C2*)(S7881C9*), ABISELECT(64,36), "S7881C6");
    check_base_class_offset(lv, (S7881C2*)(S7881C10*)(S7881C9*), ABISELECT(64,36), "S7881C6");
    /*is_ambiguous_... S7881C6::S7881C10 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C10*), ABISELECT(64,36), "S7881C6");
    check_base_class_offset(lv, (S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(48,24), "S7881C6");
    check_base_class_offset(lv, (S7881C10*)(S7881C9*), ABISELECT(48,24), "S7881C6");
    check_base_class_offset(lv, (S7881C9*)(S7881C8*), ABISELECT(32,16), "S7881C6");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C8*), ABISELECT(24,12), "S7881C6");
    check_base_class_offset(lv, (S7881C8*), ABISELECT(24,12), "S7881C6");
    /*is_ambiguous_... S7881C6::S7881C10 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C10*), ABISELECT(72,40), "S7881C6");
    /*is_ambiguous_... S7881C6::S7881C10 */ AMB_check_base_class_offset(lv, (S7881C10*), ABISELECT(72,40), "S7881C6");
    test_class_info(&lv, &cd_S7881C6);
    dp->~S7881C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C6(Test_S7881C6, "S7881C6", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S7881C6C1Ev();
extern void _ZN7S7881C6D1Ev();
Name_Map name_map_S7881C6[] = {
  NSPAIR(_ZN7S7881C6C1Ev),
  NSPAIR(_ZN7S7881C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C7;
extern VTBL_ENTRY _ZTI7S7881C7[];
extern  VTBL_ENTRY _ZTV7S7881C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C7[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C9;
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C8;
extern VTBL_ENTRY _ZTI7S7881C8[];
extern  VTBL_ENTRY _ZTV7S7881C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C8[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
static Base_Class bases_S7881C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7881C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7881C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7881C2,    ABISELECT(64,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7881C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7881C8,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(72,40), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C6[];
extern void ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev)();
extern void _ZN7S7881C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev)();
extern void _ZN7S7881C6D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C6D1Ev,_ZTv0_n12_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C6D1Ev,_ZThn4_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C6D0Ev,_ZTv0_n12_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C6D0Ev,_ZThn4_N7S7881C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7881C6D1Ev,_ZTv0_n28_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7881C6D1Ev,_ZThn12_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7881C6D0Ev,_ZTv0_n28_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7881C6D0Ev,_ZThn12_N7S7881C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C6D1Ev,_ZTv0_n24_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C6D1Ev,_ZThn16_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C6D0Ev,_ZTv0_n24_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C6D0Ev,_ZThn16_N7S7881C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S7881C6D1Ev,_ZTvn8_n24_N7S7881C6D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C6D0Ev,_ZTvn8_n24_N7S7881C6D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7881C6D1Ev,_ZThn36_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7881C6D0Ev,_ZThn36_N7S7881C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C6D1Ev,_ZTv0_n20_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn72_N7S7881C6D1Ev,_ZThn40_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C6D0Ev,_ZTv0_n20_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn72_N7S7881C6D0Ev,_ZThn40_N7S7881C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C6[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C6D1Ev,_ZTv0_n12_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C6D0Ev,_ZTv0_n12_N7S7881C6D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7881C6D1Ev,_ZTv0_n28_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7881C6D0Ev,_ZTv0_n28_N7S7881C6D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C6D1Ev,_ZTv0_n24_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C6D0Ev,_ZTv0_n24_N7S7881C6D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C6D1Ev,_ZTvn8_n24_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C6D0Ev,_ZTvn8_n24_N7S7881C6D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C6D1Ev,_ZTv0_n20_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C6D0Ev,_ZTv0_n20_N7S7881C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C6[];
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void _ZN7S7881C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
extern void _ZN7S7881C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__7S7881C6[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C7D1Ev,_ZThn4_N7S7881C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C7D0Ev,_ZThn4_N7S7881C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C7__7S7881C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev),
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__7S7881C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void _ZN7S7881C8D1Ev();
extern void _ZN7S7881C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C8__7S7881C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&_ZN7S7881C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C8D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C57S7881C8__A2__7S7881C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C57S7881C8__A2__7S7881C6[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C8D1Ev,_ZThn4_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C8D0Ev,_ZThn4_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C8__7S7881C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C8D1Ev,_ZThn24_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C8D0Ev,_ZThn24_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C8__7S7881C6[] = {
  ABISELECT(-40,-24),
  ABISELECT(-56,-32),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C8__7S7881C6[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C8__7S7881C6[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C8__7S7881C6[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C6[] = {
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C6[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C107S7881C9__A1__7S7881C6[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__7S7881C6[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C107S7881C9__7S7881C6[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C107S7881C9__7S7881C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9__7S7881C6[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C9__7S7881C6[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9__7S7881C6[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9__7S7881C6[] = {
  ABISELECT(32,16),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C6[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__7S7881C6[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C10__A1__7S7881C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C10__A3__7S7881C6[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C10__A3__7S7881C6[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C10__A1__7S7881C6[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C10__A1__7S7881C6[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
static  VTT_ENTRY vtt_S7881C6[] = {
  {&(_ZTV7S7881C6[9]),  9,52},
  {&(_tg__ZTV7S7881C7__7S7881C6[5]),  5,7},
  {&(_tg__ZTV7S7881C7__7S7881C6[5]),  5,7},
  {&(_tg__ZTV8S19859C6__7S7881C7__7S7881C6[3]),  3,5},
  {&(_ZTV7S7881C6[9]),  9,52},
  {&(_ZTV7S7881C6[14]),  14,52},
  {&(_ZTV7S7881C6[23]),  23,52},
  {&(_ZTV7S7881C6[31]),  31,52},
  {&(_ZTV7S7881C6[43]),  43,52},
  {&(_ZTV7S7881C6[37]),  37,52},
  {&(_ZTV7S7881C6[50]),  50,52},
  {&(_tg__ZTV7S7881C5__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__7S7881C6[3]),  3,5},
  {&(_tg__ZTV7S7881C8__7S7881C6[6]),  6,8},
  {&(_tg__ZTV7S7881C57S7881C8__A2__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C57S7881C8__A2__7S7881C6[3]),  3,5},
  {&(_tg__ZTV7S7881C9__7S7881C8__7S7881C6[6]),  6,8},
  {&(_tg__ZTV7S7881C2__7S7881C8__7S7881C6[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C8__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C8__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C8__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C9__7S7881C6[5]),  5,7},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C107S7881C9__A1__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C107S7881C9__7S7881C6[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C107S7881C9__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C9__7S7881C6[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C9__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S7881C10__7S7881C9__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S7881C10__A1__7S7881C6[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C10__A3__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C10__A3__7S7881C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C10__A1__7S7881C6[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C10__A1__7S7881C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7881C6[];
extern  VTBL_ENTRY _ZTV7S7881C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C6[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C8D0Ev,_ZThn24_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C8D1Ev,_ZThn24_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C8D0Ev,_ZThn4_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C8D1Ev,_ZThn4_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D0Ev,_ZThn4_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C5D1Ev,_ZThn4_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C7D0Ev,_ZThn4_N7S7881C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C7D1Ev,_ZThn4_N7S7881C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7881C6D0Ev,_ZTv0_n20_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C6D0Ev,_ZThn40_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7881C6D1Ev,_ZTv0_n20_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C6D1Ev,_ZThn40_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C6D0Ev,_ZTv0_n24_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C6D0Ev,_ZThn16_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C6D1Ev,_ZTv0_n24_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C6D1Ev,_ZThn16_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7881C6D0Ev,_ZTv0_n28_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7881C6D0Ev,_ZThn12_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7881C6D1Ev,_ZTv0_n28_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7881C6D1Ev,_ZThn12_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C6D0Ev,_ZTv0_n12_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C6D0Ev,_ZThn4_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C6D1Ev,_ZTv0_n12_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C6D1Ev,_ZThn4_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C6D0Ev,_ZThn36_N7S7881C6D0Ev),
  (VTBL_ENTRY)_ZN7S7881C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C6D1Ev,_ZThn36_N7S7881C6D1Ev),
  (VTBL_ENTRY)_ZN7S7881C6D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C6 = {  "S7881C6", // class name
  bases_S7881C6, 12,
  &(vtc_S7881C6[0]), // expected_vtbl_contents
  &(vtt_S7881C6[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S7881C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7881C6),52, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C6),38, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C13  : S19859C6 , virtual S7881C2 {
  virtual  ~S7881C13(); // _ZN8S7881C13D2Ev
  S7881C13(); // tgen
};
//SIG(-1 S7881C13) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} vd}


 S7881C13 ::~S7881C13(){ note_dtor("S7881C13", this);}
S7881C13 ::S7881C13(){ note_ctor("S7881C13", this);} // tgen

static void Test_S7881C13()
{
  extern Class_Descriptor cd_S7881C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7881C13, buf);
    S7881C13 *dp, &lv = *(dp=new (buf) S7881C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7881C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7881C13)");
    /*is_ambiguous_... S7881C13::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S7881C13");
    check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(24,12), "S7881C13");
    check_base_class_offset(lv, (S7881C2*), ABISELECT(16,8), "S7881C13");
    test_class_info(&lv, &cd_S7881C13);
    dp->~S7881C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C13(Test_S7881C13, "S7881C13", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S7881C13C1Ev();
extern void _ZN8S7881C13D2Ev();
Name_Map name_map_S7881C13[] = {
  NSPAIR(_ZN8S7881C13C1Ev),
  NSPAIR(_ZN8S7881C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
static Base_Class bases_S7881C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7881C2,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7881C13[];
extern void _ZN8S7881C13D1Ev();
extern void _ZN8S7881C13D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C13D1Ev,_ZThn8_N8S7881C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C13D0Ev,_ZThn8_N8S7881C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7881C13D1Ev,_ZThn12_N8S7881C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S7881C13D0Ev,_ZThn12_N8S7881C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C13[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&_ZN8S7881C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C13D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S7881C13[];
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__8S7881C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
static  VTT_ENTRY vtt_S7881C13[] = {
  {&(_ZTV8S7881C13[4]),  4,17},
  {&(_ZTV8S7881C13[10]),  10,17},
  {&(_ZTV8S7881C13[15]),  15,17},
  {&(_tg__ZTV7S7881C2__8S7881C13[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__8S7881C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7881C13[];
extern  VTBL_ENTRY _ZTV8S7881C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C13[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D0Ev,_ZThn4_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C2D1Ev,_ZThn4_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7881C13D0Ev,_ZThn12_N8S7881C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7881C13D1Ev,_ZThn12_N8S7881C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C13D0Ev,_ZThn8_N8S7881C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C13D1Ev,_ZThn8_N8S7881C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C13 = {  "S7881C13", // class name
  bases_S7881C13, 3,
  &(vtc_S7881C13[0]), // expected_vtbl_contents
  &(vtt_S7881C13[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S7881C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7881C13),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7881C13),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C12  : S7881C2 , virtual S7881C7 , S7881C8 , virtual S7881C13 {
  ::S19859C19 s7881c12f0;
  long double s7881c12f1;
  virtual  ~S7881C12(); // _ZN8S7881C12D2Ev
  S7881C12(); // tgen
};
//SIG(-1 S7881C12) C1{ BC2{ VBC3{ vd m Fs} vd} VBC4{ VBC5{ VBC3} vd} BC6{ VBC7{ BC3 VBC2 BC8{ VBC3 VBC2 BC5 vd Fi} VBC5 vd Fi} BC5 vd} VBC9{ BC3 VBC2 vd} vd FC10{ VBC11{ VBC3 vd}} FD}


 S7881C12 ::~S7881C12(){ note_dtor("S7881C12", this);}
S7881C12 ::S7881C12(){ note_ctor("S7881C12", this);} // tgen

static void Test_S7881C12()
{
  extern Class_Descriptor cd_S7881C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S7881C12, buf);
    S7881C12 *dp, &lv = *(dp=new (buf) S7881C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S7881C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7881C12)");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(64,32), "S7881C12");
    /*is_ambiguous_... S7881C12::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(64,32), "S7881C12");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(64,32), "S7881C12");
    check_base_class_offset(lv, (S19859C6*)(S7881C10*)(S7881C9*), ABISELECT(64,32), "S7881C12");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(64,32), "S7881C12");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C8*), ABISELECT(64,32), "S7881C12");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S7881C2*), 0, "S7881C12");
    check_base_class_offset(lv, (S7881C5*)(S7881C7*), ABISELECT(80,40), "S7881C12");
    /*is_ambiguous_... S7881C9::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C9*), ABISELECT(80,40), "S7881C12");
    check_base_class_offset(lv, (S7881C7*), ABISELECT(80,40), "S7881C12");
    /*is_ambiguous_... S7881C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C9*), ABISELECT(88,44), "S7881C12");
    check_base_class_offset(lv, (S7881C2*)(S7881C9*), ABISELECT(120,64), "S7881C12");
    check_base_class_offset(lv, (S7881C2*)(S7881C10*)(S7881C9*), ABISELECT(120,64), "S7881C12");
    check_base_class_offset(lv, (S7881C2*)(S7881C13*), ABISELECT(120,64), "S7881C12");
    check_base_class_offset(lv, (S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(104,52), "S7881C12");
    check_base_class_offset(lv, (S7881C10*)(S7881C9*), ABISELECT(104,52), "S7881C12");
    check_base_class_offset(lv, (S7881C9*)(S7881C8*), ABISELECT(88,44), "S7881C12");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C8*), ABISELECT(8,4), "S7881C12");
    check_base_class_offset(lv, (S7881C8*), ABISELECT(8,4), "S7881C12");
    /*is_ambiguous_... S7881C13::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C13*), ABISELECT(128,68), "S7881C12");
    check_base_class_offset(lv, (S7881C13*), ABISELECT(128,68), "S7881C12");
    check_field_offset(lv, s7881c12f0, ABISELECT(16,8), "S7881C12.s7881c12f0");
    check_field_offset(lv, s7881c12f1, ABISELECT(48,20), "S7881C12.s7881c12f1");
    test_class_info(&lv, &cd_S7881C12);
    dp->~S7881C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C12(Test_S7881C12, "S7881C12", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN8S7881C12C1Ev();
extern void _ZN8S7881C12D2Ev();
Name_Map name_map_S7881C12[] = {
  NSPAIR(_ZN8S7881C12C1Ev),
  NSPAIR(_ZN8S7881C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C7;
extern VTBL_ENTRY _ZTI7S7881C7[];
extern  VTBL_ENTRY _ZTV7S7881C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C7[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C9;
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C8;
extern VTBL_ENTRY _ZTI7S7881C8[];
extern  VTBL_ENTRY _ZTV7S7881C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C8[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C13;
extern VTBL_ENTRY _ZTI8S7881C13[];
extern  VTBL_ENTRY _ZTV8S7881C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C13[];
static Base_Class bases_S7881C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(64,32), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7881C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7881C5,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7881C7,    ABISELECT(80,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7881C2,    ABISELECT(120,64), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(104,52), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7881C9,    ABISELECT(88,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7881C8,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7881C13,    ABISELECT(128,68), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7881C12[];
extern void _ZN8S7881C12D1Ev();
extern void _ZN8S7881C12D0Ev();
extern void ABISELECT(_ZThn8_N8S7881C12D1Ev,_ZThn4_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn8_N8S7881C12D0Ev,_ZThn4_N8S7881C12D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S7881C12D1Ev,_ZThn32_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S7881C12D0Ev,_ZThn32_N8S7881C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn80_N8S7881C12D1Ev,_ZThn40_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn80_N8S7881C12D0Ev,_ZThn40_N8S7881C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn88_N8S7881C12D1Ev,_ZThn44_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn88_N8S7881C12D0Ev,_ZThn44_N8S7881C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S7881C12D1Ev,_ZTvn8_n24_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S7881C12D0Ev,_ZTvn8_n24_N8S7881C12D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn120_N8S7881C12D1Ev,_ZThn64_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn120_N8S7881C12D0Ev,_ZThn64_N8S7881C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S7881C12D1Ev,_ZThn68_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S7881C12D0Ev,_ZThn68_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C12[] = {
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&_ZN8S7881C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C12D0Ev,
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C12D1Ev,_ZThn4_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C12D0Ev,_ZThn4_N8S7881C12D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C12D1Ev,_ZTvn8_n24_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C12D0Ev,_ZTvn8_n24_N8S7881C12D0Ev),
  ABISELECT(-120,-64),
  ABISELECT(-56,-32),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
  ABISELECT(-128,-68),
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7881C12[];
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A__8S7881C12[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7881C2D1Ev,_ZThn32_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7881C2D0Ev,_ZThn32_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__A__8S7881C12[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN7S7881C8D1Ev();
extern void _ZN7S7881C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C8__8S7881C12[] = {
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&_ZN7S7881C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C8D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C57S7881C8__A2__8S7881C12[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C5D1Ev,_ZThn28_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C5D0Ev,_ZThn28_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C57S7881C8__A2__8S7881C12[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S7881C8D1Ev,_ZThn40_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S7881C8D0Ev,_ZThn40_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C8__8S7881C12[] = {
  ABISELECT(-80,-40),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S7881C8D1Ev,_ZThn60_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S7881C8D0Ev,_ZThn60_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C8__8S7881C12[] = {
  ABISELECT(-112,-60),
  ABISELECT(-56,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C8D1Ev,_ZThn28_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C8D0Ev,_ZThn28_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C8__8S7881C12[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C8__8S7881C12[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn72_N7S7881C8D1Ev,_ZThn36_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn72_N7S7881C8D0Ev,_ZThn36_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C8__8S7881C12[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void _ZN7S7881C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
extern void _ZN7S7881C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__8S7881C12[] = {
  0,
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C7__8S7881C12[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev),
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__8S7881C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__8S7881C12[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C9__8S7881C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__8S7881C12[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C107S7881C9__A1__8S7881C12[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__8S7881C12[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C107S7881C9__8S7881C12[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C107S7881C9__8S7881C12[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9__8S7881C12[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C9__8S7881C12[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9__8S7881C12[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9__8S7881C12[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A1__8S7881C12[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__A1__8S7881C12[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN8S7881C13D1Ev();
extern void _ZN8S7881C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C13__8S7881C12[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&_ZN8S7881C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C13__8S7881C12[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S7881C13__8S7881C12[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev),
};
static  VTT_ENTRY vtt_S7881C12[] = {
  {&(_ZTV8S7881C12[8]),  8,57},
  {&(_tg__ZTV7S7881C2__A__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__A__8S7881C12[3]),  3,5},
  {&(_tg__ZTV7S7881C8__8S7881C12[6]),  6,8},
  {&(_tg__ZTV7S7881C57S7881C8__A2__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C57S7881C8__A2__8S7881C12[3]),  3,5},
  {&(_tg__ZTV7S7881C9__7S7881C8__8S7881C12[6]),  6,8},
  {&(_tg__ZTV7S7881C2__7S7881C8__8S7881C12[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C8__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C8__8S7881C12[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C8__8S7881C12[4]),  4,6},
  {&(_ZTV8S7881C12[21]),  21,57},
  {&(_ZTV8S7881C12[28]),  28,57},
  {&(_ZTV8S7881C12[28]),  28,57},
  {&(_ZTV8S7881C12[16]),  16,57},
  {&(_ZTV8S7881C12[36]),  36,57},
  {&(_ZTV8S7881C12[48]),  48,57},
  {&(_ZTV8S7881C12[42]),  42,57},
  {&(_ZTV8S7881C12[55]),  55,57},
  {&(_tg__ZTV7S7881C7__8S7881C12[5]),  5,7},
  {&(_tg__ZTV7S7881C7__8S7881C12[5]),  5,7},
  {&(_tg__ZTV8S19859C6__7S7881C7__8S7881C12[3]),  3,5},
  {&(_tg__ZTV7S7881C5__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__8S7881C12[3]),  3,5},
  {&(_tg__ZTV7S7881C9__8S7881C12[5]),  5,7},
  {&(_tg__ZTV8S7881C107S7881C9__8S7881C12[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C107S7881C9__A1__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C107S7881C9__8S7881C12[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C107S7881C9__8S7881C12[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C9__8S7881C12[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C9__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S7881C10__7S7881C9__8S7881C12[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9__8S7881C12[4]),  4,6},
  {&(_tg__ZTV7S7881C2__A1__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__A1__8S7881C12[3]),  3,5},
  {&(_tg__ZTV8S7881C13__8S7881C12[4]),  4,6},
  {&(_tg__ZTV7S7881C2__8S7881C13__8S7881C12[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S7881C13__8S7881C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7881C12[];
extern  VTBL_ENTRY _ZTV8S7881C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C12[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C8D0Ev,_ZThn28_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C8D1Ev,_ZThn28_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C8D0Ev,_ZThn36_N7S7881C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7881C8D0Ev,_ZThn60_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C8D1Ev,_ZThn36_N7S7881C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7881C8D1Ev,_ZThn60_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7881C8D0Ev,_ZThn40_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7881C8D1Ev,_ZThn40_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C5D0Ev,_ZThn28_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C5D1Ev,_ZThn28_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C2D0Ev,_ZThn32_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C2D1Ev,_ZThn32_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7881C12D0Ev,_ZThn68_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7881C12D1Ev,_ZThn68_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7881C12D0Ev,_ZThn44_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7881C12D1Ev,_ZThn44_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7881C12D0Ev,_ZThn64_N8S7881C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C12D0Ev,_ZThn40_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7881C12D1Ev,_ZThn64_N8S7881C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C12D1Ev,_ZThn40_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C12D0Ev,_ZThn32_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C12D1Ev,_ZThn32_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C12 = {  "S7881C12", // class name
  bases_S7881C12, 13,
  &(vtc_S7881C12[0]), // expected_vtbl_contents
  &(vtt_S7881C12[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI8S7881C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7881C12),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7881C12),39, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C11  : S7881C12 {
  virtual  ~S7881C11(); // _ZN8S7881C11D2Ev
  S7881C11(); // tgen
};
//SIG(-1 S7881C11) C1{ BC2{ BC3{ VBC4{ vd m Fs} vd} VBC5{ VBC6{ VBC4} vd} BC7{ VBC8{ BC4 VBC3 BC9{ VBC4 VBC3 BC6 vd Fi} VBC6 vd Fi} BC6 vd} VBC10{ BC4 VBC3 vd} vd FC11{ VBC12{ VBC4 vd}} FD} vd}


 S7881C11 ::~S7881C11(){ note_dtor("S7881C11", this);}
S7881C11 ::S7881C11(){ note_ctor("S7881C11", this);} // tgen

static void Test_S7881C11()
{
  extern Class_Descriptor cd_S7881C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S7881C11, buf);
    S7881C11 *dp, &lv = *(dp=new (buf) S7881C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S7881C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7881C11)");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*)(S7881C12*), ABISELECT(64,32), "S7881C11");
    /*is_ambiguous_... S7881C11::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(64,32), "S7881C11");
    /*is_ambiguous_... S7881C11::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(64,32), "S7881C11");
    check_base_class_offset(lv, (S19859C6*)(S7881C10*)(S7881C9*), ABISELECT(64,32), "S7881C11");
    check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(64,32), "S7881C11");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C8*)(S7881C12*), ABISELECT(64,32), "S7881C11");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C12*), 0, "S7881C11");
    check_base_class_offset(lv, (S7881C5*)(S7881C7*), ABISELECT(80,40), "S7881C11");
    /*is_ambiguous_... S7881C9::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C9*), ABISELECT(80,40), "S7881C11");
    check_base_class_offset(lv, (S7881C7*)(S7881C12*), ABISELECT(80,40), "S7881C11");
    /*is_ambiguous_... S7881C9::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C9*), ABISELECT(88,44), "S7881C11");
    check_base_class_offset(lv, (S7881C2*)(S7881C9*), ABISELECT(120,64), "S7881C11");
    check_base_class_offset(lv, (S7881C2*)(S7881C10*)(S7881C9*), ABISELECT(120,64), "S7881C11");
    check_base_class_offset(lv, (S7881C2*)(S7881C13*), ABISELECT(120,64), "S7881C11");
    check_base_class_offset(lv, (S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(104,52), "S7881C11");
    check_base_class_offset(lv, (S7881C10*)(S7881C9*), ABISELECT(104,52), "S7881C11");
    check_base_class_offset(lv, (S7881C9*)(S7881C8*)(S7881C12*), ABISELECT(88,44), "S7881C11");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C8*)(S7881C12*), ABISELECT(8,4), "S7881C11");
    check_base_class_offset(lv, (S7881C8*)(S7881C12*), ABISELECT(8,4), "S7881C11");
    /*is_ambiguous_... S7881C13::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C13*), ABISELECT(128,68), "S7881C11");
    check_base_class_offset(lv, (S7881C13*)(S7881C12*), ABISELECT(128,68), "S7881C11");
    check_base_class_offset(lv, (S7881C12*), 0, "S7881C11");
    test_class_info(&lv, &cd_S7881C11);
    dp->~S7881C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C11(Test_S7881C11, "S7881C11", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN8S7881C11C1Ev();
extern void _ZN8S7881C11D2Ev();
Name_Map name_map_S7881C11[] = {
  NSPAIR(_ZN8S7881C11C1Ev),
  NSPAIR(_ZN8S7881C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C7;
extern VTBL_ENTRY _ZTI7S7881C7[];
extern  VTBL_ENTRY _ZTV7S7881C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C7[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C9;
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C8;
extern VTBL_ENTRY _ZTI7S7881C8[];
extern  VTBL_ENTRY _ZTV7S7881C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C8[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C13;
extern VTBL_ENTRY _ZTI8S7881C13[];
extern  VTBL_ENTRY _ZTV8S7881C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C13[];
extern Class_Descriptor cd_S7881C12;
extern VTBL_ENTRY _ZTI8S7881C12[];
extern  VTBL_ENTRY _ZTV8S7881C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C12[];
static Base_Class bases_S7881C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(64,32), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7881C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7881C5,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7881C7,    ABISELECT(80,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19859C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7881C2,    ABISELECT(120,64), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(104,52), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7881C9,    ABISELECT(88,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7881C8,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7881C13,    ABISELECT(128,68), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7881C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7881C11[];
extern void _ZN8S7881C11D1Ev();
extern void _ZN8S7881C11D0Ev();
extern void ABISELECT(_ZThn8_N8S7881C11D1Ev,_ZThn4_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S7881C11D0Ev,_ZThn4_N8S7881C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C11D1Ev,_ZTv0_n12_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S7881C11D1Ev,_ZThn32_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C11D0Ev,_ZTv0_n12_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn64_N8S7881C11D0Ev,_ZThn32_N8S7881C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn80_N8S7881C11D1Ev,_ZThn40_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn80_N8S7881C11D0Ev,_ZThn40_N8S7881C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7881C11D1Ev,_ZTv0_n24_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S7881C11D1Ev,_ZThn44_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7881C11D0Ev,_ZTv0_n24_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S7881C11D0Ev,_ZThn44_N8S7881C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S7881C11D1Ev,_ZTvn8_n24_N8S7881C11D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S7881C11D0Ev,_ZTvn8_n24_N8S7881C11D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn120_N8S7881C11D1Ev,_ZThn64_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn120_N8S7881C11D0Ev,_ZThn64_N8S7881C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C11D1Ev,_ZTv0_n20_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn128_N8S7881C11D1Ev,_ZThn68_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C11D0Ev,_ZTv0_n20_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn128_N8S7881C11D0Ev,_ZThn68_N8S7881C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C11[] = {
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&_ZN8S7881C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C11D0Ev,
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C11D1Ev,_ZThn4_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C11D0Ev,_ZThn4_N8S7881C11D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C11D1Ev,_ZTv0_n12_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C11D0Ev,_ZTv0_n12_N8S7881C11D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C11D1Ev,_ZTv0_n24_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C11D0Ev,_ZTv0_n24_N8S7881C11D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C11D1Ev,_ZTvn8_n24_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C11D0Ev,_ZTvn8_n24_N8S7881C11D0Ev),
  ABISELECT(-120,-64),
  ABISELECT(-56,-32),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev),
  ABISELECT(-128,-68),
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C11D1Ev,_ZTv0_n20_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C11D0Ev,_ZTv0_n20_N8S7881C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7881C11[];
extern void _ZN8S7881C12D1Ev();
extern void _ZN8S7881C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C12__8S7881C11[] = {
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&_ZN8S7881C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C12D0Ev,
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C28S7881C12__8S7881C11[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7881C2D1Ev,_ZThn32_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7881C2D0Ev,_ZThn32_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C28S7881C12__8S7881C11[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN7S7881C8D1Ev();
extern void _ZN7S7881C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C88S7881C12__8S7881C11[] = {
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&_ZN7S7881C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C8D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C57S7881C88S7881C12__A2__8S7881C11[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C5D1Ev,_ZThn28_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C5D0Ev,_ZThn28_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C57S7881C88S7881C12__A2__8S7881C11[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S7881C8D1Ev,_ZThn40_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S7881C8D0Ev,_ZThn40_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C88S7881C12__8S7881C11[] = {
  ABISELECT(-80,-40),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S7881C8D1Ev,_ZThn60_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S7881C8D0Ev,_ZThn60_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C88S7881C12__8S7881C11[] = {
  ABISELECT(-112,-60),
  ABISELECT(-56,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C8D1Ev,_ZThn28_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C8D0Ev,_ZThn28_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C88S7881C12__8S7881C11[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C88S7881C12__8S7881C11[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn72_N7S7881C8D1Ev,_ZThn36_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn72_N7S7881C8D0Ev,_ZThn36_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C88S7881C12__8S7881C11[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S7881C12D1Ev,_ZThn32_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S7881C12D0Ev,_ZThn32_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C12__8S7881C11[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn80_N8S7881C12D1Ev,_ZThn40_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn80_N8S7881C12D0Ev,_ZThn40_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__8S7881C12__8S7881C11[] = {
  0,
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZThn8_N8S7881C12D1Ev,_ZThn4_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn8_N8S7881C12D0Ev,_ZThn4_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C8__8S7881C12__8S7881C11[] = {
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C12D1Ev,_ZThn4_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C12D0Ev,_ZThn4_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn88_N8S7881C12D1Ev,_ZThn44_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn88_N8S7881C12D0Ev,_ZThn44_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C9__8S7881C12__8S7881C11[] = {
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn120_N8S7881C12D1Ev,_ZThn64_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn120_N8S7881C12D0Ev,_ZThn64_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__A1__8S7881C12__8S7881C11[] = {
  ABISELECT(-120,-64),
  ABISELECT(-56,-32),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S7881C12D1Ev,_ZTvn8_n24_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S7881C12D0Ev,_ZTvn8_n24_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__8S7881C12__8S7881C11[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C12D1Ev,_ZTvn8_n24_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C12D0Ev,_ZTvn8_n24_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn128_N8S7881C12D1Ev,_ZThn68_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn128_N8S7881C12D0Ev,_ZThn68_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7881C13__8S7881C12__8S7881C11[] = {
  ABISELECT(-128,-68),
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void _ZN7S7881C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
extern void _ZN7S7881C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__8S7881C11[] = {
  0,
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C7__8S7881C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev),
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__8S7881C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__8S7881C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C9__8S7881C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__8S7881C11[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C107S7881C9__A1__8S7881C11[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__8S7881C11[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C107S7881C9__8S7881C11[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C107S7881C9__8S7881C11[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9__8S7881C11[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C9__8S7881C11[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9__8S7881C11[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9__8S7881C11[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A1__8S7881C11[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__A1__8S7881C11[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN8S7881C13D1Ev();
extern void _ZN8S7881C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C13__8S7881C11[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&_ZN8S7881C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C13__8S7881C11[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S7881C13__8S7881C11[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev),
};
static  VTT_ENTRY vtt_S7881C11[] = {
  {&(_ZTV8S7881C11[8]),  8,57},
  {&(_tg__ZTV8S7881C12__8S7881C11[8]),  8,10},
  {&(_tg__ZTV7S7881C28S7881C12__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C28S7881C12__8S7881C11[3]),  3,5},
  {&(_tg__ZTV7S7881C88S7881C12__8S7881C11[6]),  6,8},
  {&(_tg__ZTV7S7881C57S7881C88S7881C12__A2__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C57S7881C88S7881C12__A2__8S7881C11[3]),  3,5},
  {&(_tg__ZTV7S7881C9__7S7881C88S7881C12__8S7881C11[6]),  6,8},
  {&(_tg__ZTV7S7881C2__7S7881C88S7881C12__8S7881C11[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C88S7881C12__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C88S7881C12__8S7881C11[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C88S7881C12__8S7881C11[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S7881C12__8S7881C11[3]),  3,5},
  {&(_tg__ZTV7S7881C7__8S7881C12__8S7881C11[5]),  5,7},
  {&(_tg__ZTV7S7881C7__8S7881C12__8S7881C11[5]),  5,7},
  {&(_tg__ZTV7S7881C8__8S7881C12__8S7881C11[6]),  6,8},
  {&(_tg__ZTV7S7881C9__8S7881C12__8S7881C11[6]),  6,8},
  {&(_tg__ZTV7S7881C2__A1__8S7881C12__8S7881C11[4]),  4,6},
  {&(_tg__ZTV8S7881C107S7881C9__8S7881C12__8S7881C11[4]),  4,6},
  {&(_tg__ZTV8S7881C13__8S7881C12__8S7881C11[5]),  5,7},
  {&(_ZTV8S7881C11[21]),  21,57},
  {&(_ZTV8S7881C11[28]),  28,57},
  {&(_ZTV8S7881C11[28]),  28,57},
  {&(_ZTV8S7881C11[16]),  16,57},
  {&(_ZTV8S7881C11[36]),  36,57},
  {&(_ZTV8S7881C11[48]),  48,57},
  {&(_ZTV8S7881C11[42]),  42,57},
  {&(_ZTV8S7881C11[55]),  55,57},
  {&(_tg__ZTV7S7881C7__8S7881C11[5]),  5,7},
  {&(_tg__ZTV7S7881C7__8S7881C11[5]),  5,7},
  {&(_tg__ZTV8S19859C6__7S7881C7__8S7881C11[3]),  3,5},
  {&(_tg__ZTV7S7881C5__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__8S7881C11[3]),  3,5},
  {&(_tg__ZTV7S7881C9__8S7881C11[5]),  5,7},
  {&(_tg__ZTV8S7881C107S7881C9__8S7881C11[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C107S7881C9__A1__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C107S7881C9__8S7881C11[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C107S7881C9__8S7881C11[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C9__8S7881C11[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C9__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S7881C10__7S7881C9__8S7881C11[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9__8S7881C11[4]),  4,6},
  {&(_tg__ZTV7S7881C2__A1__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__A1__8S7881C11[3]),  3,5},
  {&(_tg__ZTV8S7881C13__8S7881C11[4]),  4,6},
  {&(_tg__ZTV7S7881C2__8S7881C13__8S7881C11[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S7881C13__8S7881C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7881C11[];
extern  VTBL_ENTRY _ZTV8S7881C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C11[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7881C12D0Ev,_ZThn68_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7881C12D1Ev,_ZThn68_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7881C12D0Ev,_ZThn44_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7881C12D1Ev,_ZThn44_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7881C12D0Ev,_ZThn64_N8S7881C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C12D0Ev,_ZThn40_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7881C12D1Ev,_ZThn64_N8S7881C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C12D1Ev,_ZThn40_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C12D0Ev,_ZThn32_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C12D1Ev,_ZThn32_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C8D0Ev,_ZThn28_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C8D1Ev,_ZThn28_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C8D0Ev,_ZThn36_N7S7881C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7881C8D0Ev,_ZThn60_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C8D1Ev,_ZThn36_N7S7881C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7881C8D1Ev,_ZThn60_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7881C8D0Ev,_ZThn40_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7881C8D1Ev,_ZThn40_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C5D0Ev,_ZThn28_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C5D1Ev,_ZThn28_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C2D0Ev,_ZThn32_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C2D1Ev,_ZThn32_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C11D0Ev,_ZTv0_n20_N8S7881C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7881C11D0Ev,_ZThn68_N8S7881C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C11D1Ev,_ZTv0_n20_N8S7881C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S7881C11D1Ev,_ZThn68_N8S7881C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7881C11D0Ev,_ZTv0_n24_N8S7881C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7881C11D0Ev,_ZThn44_N8S7881C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7881C11D1Ev,_ZTv0_n24_N8S7881C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7881C11D1Ev,_ZThn44_N8S7881C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7881C11D0Ev,_ZThn64_N8S7881C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C11D0Ev,_ZThn40_N8S7881C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S7881C11D1Ev,_ZThn64_N8S7881C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C11D1Ev,_ZThn40_N8S7881C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C11D0Ev,_ZTv0_n12_N8S7881C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C11D0Ev,_ZThn32_N8S7881C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C11D1Ev,_ZTv0_n12_N8S7881C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C11D1Ev,_ZThn32_N8S7881C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C11 = {  "S7881C11", // class name
  bases_S7881C11, 14,
  &(vtc_S7881C11[0]), // expected_vtbl_contents
  &(vtt_S7881C11[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI8S7881C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7881C11),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7881C11),48, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7881C1  : S7881C2 , S7881C4 , virtual S7881C6 , virtual S7881C11 , S7881C9 {
  virtual  ~S7881C1(); // _ZN7S7881C1D2Ev
  S7881C1(); // tgen
};
//SIG(1 S7881C1) C1{ BC2{ VBC3{ vd m Fs} vd} BC4{ VBC3 VBC5{ VBC3}} VBC6{ BC7{ VBC5 vd} VBC8{ VBC9{ BC3 VBC2 BC10{ VBC3 VBC2 BC5 vd Fi} VBC5 vd Fi} BC5 vd} VBC10} VBC11{ BC12{ BC2 VBC7 BC8 VBC13{ BC3 VBC2 vd} vd FC14{ VBC15{ VBC3 vd}} FD} vd} BC9 vd}


 S7881C1 ::~S7881C1(){ note_dtor("S7881C1", this);}
S7881C1 ::S7881C1(){ note_ctor("S7881C1", this);} // tgen

static void Test_S7881C1()
{
  extern Class_Descriptor cd_S7881C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,31)];
    init_test(&cd_S7881C1, buf);
    S7881C1 *dp, &lv = *(dp=new (buf) S7881C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,120), "sizeof(S7881C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7881C1)");
    /*is_ambiguous_... S7881C1::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(48,28), "S7881C1");
    check_base_class_offset(lv, (S19859C6*)(S7881C4*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C10*)(S7881C9*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C8 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C8*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C10 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C10*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C10 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C2*)(S7881C12*)(S7881C11*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C8*)(S7881C12*)(S7881C11*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C10*)(S7881C9*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(48,28), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C2 */ AMB_check_base_class_offset(lv, (S7881C2*), 0, "S7881C1");
    check_base_class_offset(lv, (S7881C5*)(S7881C4*), ABISELECT(8,4), "S7881C1");
    check_base_class_offset(lv, (S7881C5*)(S7881C7*)(S7881C6*), ABISELECT(8,4), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C9*), ABISELECT(8,4), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C7 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C7*), ABISELECT(8,4), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C9*), ABISELECT(8,4), "S7881C1");
    check_base_class_offset(lv, (S7881C4*), ABISELECT(8,4), "S7881C1");
    check_base_class_offset(lv, (S7881C7*)(S7881C6*), ABISELECT(64,36), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C9*), ABISELECT(80,44), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C9*), ABISELECT(112,64), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C10*)(S7881C9*), ABISELECT(112,64), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C10 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C10*), ABISELECT(112,64), "S7881C1");
    check_base_class_offset(lv, (S7881C2*)(S7881C13*), ABISELECT(112,64), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C9*), ABISELECT(112,64), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C10*)(S7881C9*), ABISELECT(112,64), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(96,52), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C10*)(S7881C9*), ABISELECT(96,52), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C8 */ AMB_check_base_class_offset(lv, (S7881C9*)(S7881C8*), ABISELECT(80,44), "S7881C1");
    check_base_class_offset(lv, (S7881C9*)(S7881C8*)(S7881C12*)(S7881C11*), ABISELECT(80,44), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C8 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C8*), ABISELECT(72,40), "S7881C1");
    check_base_class_offset(lv, (S7881C8*)(S7881C6*), ABISELECT(72,40), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C10 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C10*), ABISELECT(120,68), "S7881C1");
    /*is_ambiguous_... S7881C6::S7881C10 */ AMB_check_base_class_offset(lv, (S7881C10*)(S7881C6*), ABISELECT(120,68), "S7881C1");
    check_base_class_offset(lv, (S7881C6*), ABISELECT(64,36), "S7881C1");
    /*is_ambiguous_... S7881C12::S7881C2 */ AMB_check_base_class_offset(lv, (S7881C2*)(S7881C12*)(S7881C11*), ABISELECT(144,76), "S7881C1");
    check_base_class_offset(lv, (S7881C7*)(S7881C12*)(S7881C11*), ABISELECT(208,108), "S7881C1");
    /*is_ambiguous_... S7881C8::S7881C5 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C8*)(S7881C12*)(S7881C11*), ABISELECT(152,80), "S7881C1");
    check_base_class_offset(lv, (S7881C8*)(S7881C12*)(S7881C11*), ABISELECT(152,80), "S7881C1");
    /*is_ambiguous_... S7881C13::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C13*), ABISELECT(216,112), "S7881C1");
    check_base_class_offset(lv, (S7881C13*)(S7881C12*)(S7881C11*), ABISELECT(216,112), "S7881C1");
    check_base_class_offset(lv, (S7881C12*)(S7881C11*), ABISELECT(144,76), "S7881C1");
    check_base_class_offset(lv, (S7881C11*), ABISELECT(144,76), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S7881C9*), ABISELECT(16,8), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C5*)(S7881C10*)(S7881C9*), ABISELECT(32,16), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C10*)(S7881C9*), ABISELECT(32,16), "S7881C1");
    /*is_ambiguous_... S7881C1::S7881C9 */ AMB_check_base_class_offset(lv, (S7881C9*), ABISELECT(16,8), "S7881C1");
    test_class_info(&lv, &cd_S7881C1);
    dp->~S7881C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7881C1(Test_S7881C1, "S7881C1", ABISELECT(240,120));

#else // __cplusplus

extern void _ZN7S7881C1C1Ev();
extern void _ZN7S7881C1D2Ev();
Name_Map name_map_S7881C1[] = {
  NSPAIR(_ZN7S7881C1C1Ev),
  NSPAIR(_ZN7S7881C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C4;
extern VTBL_ENTRY _ZTI7S7881C4[];
extern  VTBL_ENTRY _ZTV7S7881C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C4[];
extern Class_Descriptor cd_S7881C7;
extern VTBL_ENTRY _ZTI7S7881C7[];
extern  VTBL_ENTRY _ZTV7S7881C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C7[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C9;
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C8;
extern VTBL_ENTRY _ZTI7S7881C8[];
extern  VTBL_ENTRY _ZTV7S7881C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C8[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C6;
extern VTBL_ENTRY _ZTI7S7881C6[];
extern  VTBL_ENTRY _ZTV7S7881C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C6[];
extern Class_Descriptor cd_S7881C2;
extern VTBL_ENTRY _ZTI7S7881C2[];
extern  VTBL_ENTRY _ZTV7S7881C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C2[];
extern Class_Descriptor cd_S7881C7;
extern VTBL_ENTRY _ZTI7S7881C7[];
extern  VTBL_ENTRY _ZTV7S7881C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C7[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C8;
extern VTBL_ENTRY _ZTI7S7881C8[];
extern  VTBL_ENTRY _ZTV7S7881C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C8[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C13;
extern VTBL_ENTRY _ZTI8S7881C13[];
extern  VTBL_ENTRY _ZTV8S7881C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C13[];
extern Class_Descriptor cd_S7881C12;
extern VTBL_ENTRY _ZTI8S7881C12[];
extern  VTBL_ENTRY _ZTV8S7881C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C12[];
extern Class_Descriptor cd_S7881C11;
extern VTBL_ENTRY _ZTI8S7881C11[];
extern  VTBL_ENTRY _ZTV8S7881C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C11[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S7881C5;
extern VTBL_ENTRY _ZTI7S7881C5[];
extern  VTBL_ENTRY _ZTV7S7881C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C5[];
extern Class_Descriptor cd_S7881C10;
extern VTBL_ENTRY _ZTI8S7881C10[];
extern  VTBL_ENTRY _ZTV8S7881C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7881C10[];
extern Class_Descriptor cd_S7881C9;
extern VTBL_ENTRY _ZTI7S7881C9[];
extern  VTBL_ENTRY _ZTV7S7881C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C9[];
static Base_Class bases_S7881C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7881C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7881C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7881C4,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7881C7,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7881C2,    ABISELECT(112,64), //bcp->offset
    73, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(96,52), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7881C9,    ABISELECT(80,44), //bcp->offset
    59, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7881C8,    ABISELECT(72,40), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(120,68), //bcp->offset
    79, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7881C6,    ABISELECT(64,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7881C2,    ABISELECT(144,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7881C7,    ABISELECT(208,108), //bcp->offset
    105, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    98, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7881C5,    ABISELECT(152,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7881C8,    ABISELECT(152,80), //bcp->offset
    97, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(216,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7881C13,    ABISELECT(216,112), //bcp->offset
    112, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S7881C12,    ABISELECT(144,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7881C11,    ABISELECT(144,76), //bcp->offset
    86, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7881C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7881C10,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7881C9,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7881C1[];
extern void _ZN7S7881C1D1Ev();
extern void _ZN7S7881C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C1D1Ev,_ZThn4_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C1D0Ev,_ZThn4_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZThn16_N7S7881C1D1Ev,_ZThn8_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C1D0Ev,_ZThn8_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C1D1Ev,_ZThn16_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C1D0Ev,_ZThn16_N7S7881C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C1D1Ev,_ZTv0_n12_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7881C1D1Ev,_ZThn28_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C1D0Ev,_ZTv0_n12_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7881C1D0Ev,_ZThn28_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7881C1D1Ev,_ZThn36_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7881C1D0Ev,_ZThn36_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7881C1D1Ev,_ZTv0_n28_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7881C1D1Ev,_ZThn40_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7881C1D0Ev,_ZTv0_n28_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7881C1D0Ev,_ZThn40_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C1D1Ev,_ZTv0_n24_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7881C1D1Ev,_ZThn44_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C1D0Ev,_ZTv0_n24_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7881C1D0Ev,_ZThn44_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S7881C1D1Ev,_ZTvn8_n24_N7S7881C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C1D0Ev,_ZTvn8_n24_N7S7881C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7881C1D1Ev,_ZThn64_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7881C1D0Ev,_ZThn64_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C1D1Ev,_ZTv0_n20_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7881C1D1Ev,_ZThn68_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C1D0Ev,_ZTv0_n20_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S7881C1D0Ev,_ZThn68_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7881C1D1Ev,_ZTv0_n36_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S7881C1D1Ev,_ZThn76_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7881C1D0Ev,_ZTv0_n36_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S7881C1D0Ev,_ZThn76_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n72_N7S7881C1D1Ev,_ZTvn4_n36_N7S7881C1D1Ev)();
extern void ABISELECT(_ZTvn8_n72_N7S7881C1D0Ev,_ZTvn4_n36_N7S7881C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7881C1D1Ev,_ZThn108_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7881C1D0Ev,_ZThn108_N7S7881C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C1D1Ev,_ZTv0_n20_N7S7881C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S7881C1D1Ev,_ZThn112_N7S7881C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C1D0Ev,_ZTv0_n20_N7S7881C1D0Ev)();
extern void ABISELECT(_ZThn216_N7S7881C1D0Ev,_ZThn112_N7S7881C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7881C1[] = {
  ABISELECT(216,112),
  ABISELECT(208,108),
  ABISELECT(144,76),
  ABISELECT(120,68),
  ABISELECT(112,64),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(8,4),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&_ZN7S7881C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C1D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(96,56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C1D1Ev,_ZThn8_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C1D0Ev,_ZThn8_N7S7881C1D0Ev),
  ABISELECT(80,48),
  ABISELECT(16,12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7881C1D1Ev,_ZThn16_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7881C1D0Ev,_ZThn16_N7S7881C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C1D1Ev,_ZTv0_n12_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C1D0Ev,_ZTv0_n12_N7S7881C1D0Ev),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-64,-36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7881C1D1Ev,_ZTv0_n28_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7881C1D0Ev,_ZTv0_n28_N7S7881C1D0Ev),
  ABISELECT(-80,-44),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C1D1Ev,_ZTv0_n24_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C1D0Ev,_ZTv0_n24_N7S7881C1D0Ev),
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C1D1Ev,_ZTvn8_n24_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C1D0Ev,_ZTvn8_n24_N7S7881C1D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-64,-36),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev),
  ABISELECT(-120,-68),
  ABISELECT(-8,-4),
  ABISELECT(-72,-40),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C1D1Ev,_ZTv0_n20_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C1D0Ev,_ZTv0_n20_N7S7881C1D0Ev),
  ABISELECT(-144,-76),
  ABISELECT(72,36),
  ABISELECT(-32,-12),
  ABISELECT(-64,-32),
  ABISELECT(-136,-72),
  ABISELECT(64,32),
  ABISELECT(-96,-48),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7881C1D1Ev,_ZTv0_n36_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7881C1D0Ev,_ZTv0_n36_N7S7881C1D0Ev),
  ABISELECT(-144,-76),
  ABISELECT(-40,-16),
  ABISELECT(-72,-36),
  ABISELECT(-104,-52),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n72_N7S7881C1D1Ev,_ZTvn4_n36_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n72_N7S7881C1D0Ev,_ZTvn4_n36_N7S7881C1D0Ev),
  ABISELECT(-200,-104),
  ABISELECT(-208,-108),
  ABISELECT(-160,-80),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev),
  ABISELECT(-216,-112),
  ABISELECT(-168,-84),
  ABISELECT(-104,-48),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI7S7881C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C1D1Ev,_ZTv0_n20_N7S7881C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C1D0Ev,_ZTv0_n20_N7S7881C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7881C1[];
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A__7S7881C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7881C2D1Ev,_ZThn28_N7S7881C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7881C2D0Ev,_ZThn28_N7S7881C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__A__7S7881C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C4D1Ev,_ZTv0_n16_N7S7881C4D1Ev)();
extern void _ZN7S7881C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C4D0Ev,_ZTv0_n16_N7S7881C4D0Ev)();
extern void _ZN7S7881C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C4__7S7881C1[] = {
  0,
  0,
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C4D1Ev,_ZTv0_n16_N7S7881C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C4D0Ev,_ZTv0_n16_N7S7881C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C4D1Ev,_ZTv0_n12_N7S7881C4D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C4D1Ev,_ZThn24_N7S7881C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C4D0Ev,_ZTv0_n12_N7S7881C4D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C4D0Ev,_ZThn24_N7S7881C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C4__7S7881C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C4D1Ev,_ZTv0_n12_N7S7881C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C4D0Ev,_ZTv0_n12_N7S7881C4D0Ev),
};
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C9__A__7S7881C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__A2__7S7881C1[] = {
  ABISELECT(80,48),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C107S7881C9__A5__7S7881C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C5D1Ev,_ZThn12_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S7881C5D0Ev,_ZThn12_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A5__7S7881C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C107S7881C9__A2__7S7881C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn80_N8S7881C10D1Ev,_ZThn48_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn80_N8S7881C10D0Ev,_ZThn48_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C107S7881C9__A2__7S7881C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn96_N7S7881C9D1Ev,_ZThn56_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn96_N7S7881C9D0Ev,_ZThn56_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9__A__7S7881C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-64,-36),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C9__A__7S7881C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9__A__7S7881C1[] = {
  ABISELECT(80,48),
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9__A__7S7881C1[] = {
  ABISELECT(8,4),
  ABISELECT(40,24),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C5D1Ev,_ZThn24_N7S7881C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C5D0Ev,_ZThn24_N7S7881C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C5__7S7881C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev)();
extern void _ZN7S7881C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev)();
extern void _ZN7S7881C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C6__7S7881C1[] = {
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void _ZN7S7881C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
extern void _ZN7S7881C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C77S7881C6__7S7881C1[] = {
  ABISELECT(-56,-32),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C77S7881C6__7S7881C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C77S7881C6__7S7881C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C6__7S7881C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C6D1Ev,_ZTv0_n12_N7S7881C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C6D0Ev,_ZTv0_n12_N7S7881C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C6__7S7881C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C6D1Ev,_ZTv0_n12_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C6D0Ev,_ZTv0_n12_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S7881C6D1Ev,_ZTv0_n28_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C6D1Ev,_ZThn4_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7881C6D0Ev,_ZTv0_n28_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C6D0Ev,_ZThn4_N7S7881C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C8__7S7881C6__7S7881C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7881C6D1Ev,_ZTv0_n28_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7881C6D0Ev,_ZTv0_n28_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7881C6D1Ev,_ZTv0_n24_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C6D1Ev,_ZThn8_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C6D0Ev,_ZTv0_n24_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7881C6D0Ev,_ZThn8_N7S7881C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C6__7S7881C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C6D1Ev,_ZTv0_n24_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C6D0Ev,_ZTv0_n24_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7881C6D1Ev,_ZThn28_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7881C6D0Ev,_ZThn28_N7S7881C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C6__7S7881C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-64,-36),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S7881C6D1Ev,_ZTvn8_n24_N7S7881C6D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C6D0Ev,_ZTvn8_n24_N7S7881C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C6__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C6D1Ev,_ZTvn8_n24_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C6D0Ev,_ZTvn8_n24_N7S7881C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7881C6D1Ev,_ZTv0_n20_N7S7881C6D1Ev)();
extern void ABISELECT(_ZThn56_N7S7881C6D1Ev,_ZThn32_N7S7881C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7881C6D0Ev,_ZTv0_n20_N7S7881C6D0Ev)();
extern void ABISELECT(_ZThn56_N7S7881C6D0Ev,_ZThn32_N7S7881C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7881C10__A1__7S7881C6__7S7881C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  ABISELECT(-72,-40),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7881C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C6D1Ev,_ZTv0_n20_N7S7881C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7881C6D0Ev,_ZTv0_n20_N7S7881C6D0Ev),
};
extern void _ZN7S7881C8D1Ev();
extern void _ZN7S7881C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C8__7S7881C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&_ZN7S7881C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C8D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C57S7881C8__A2__7S7881C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C57S7881C8__A2__7S7881C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S7881C8D1Ev,_ZThn4_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S7881C8D0Ev,_ZThn4_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C8__7S7881C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S7881C8D1Ev,_ZThn24_N7S7881C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S7881C8D0Ev,_ZThn24_N7S7881C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C8__7S7881C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-64,-36),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C8__7S7881C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C8__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C8__7S7881C1[] = {
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void _ZN7S7881C9D1Ev();
extern void _ZN7S7881C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&_ZN7S7881C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C9D0Ev,
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C107S7881C9__A1__7S7881C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__7S7881C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C107S7881C9__7S7881C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C107S7881C9__7S7881C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-64,-36),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C9__7S7881C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-64,-36),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C9__7S7881C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C10__7S7881C9__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D1Ev,_ZThn8_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7881C9D0Ev,_ZThn8_N7S7881C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C9__7S7881C1[] = {
  ABISELECT(72,40),
  ABISELECT(40,24),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI7S7881C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev),
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A1__7S7881C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C2__A1__7S7881C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN8S7881C10D1Ev();
extern void _ZN8S7881C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C10__A1__7S7881C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&_ZN8S7881C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C10D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C58S7881C10__A3__7S7881C1[] = {
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C58S7881C10__A3__7S7881C1[] = {
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C10__A1__7S7881C1[] = {
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C10__A1__7S7881C1[] = {
  ABISELECT(8,4),
  ABISELECT(-64,-36),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7881C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev),
};
extern void _ZN8S7881C11D1Ev();
extern void _ZN8S7881C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C11__7S7881C1[] = {
  ABISELECT(72,36),
  ABISELECT(-32,-12),
  ABISELECT(-64,-32),
  ABISELECT(-136,-72),
  ABISELECT(64,32),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&_ZN8S7881C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C11D0Ev,
};
extern void _ZN8S7881C12D1Ev();
extern void _ZN8S7881C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(72,36),
  ABISELECT(-32,-12),
  ABISELECT(-64,-32),
  ABISELECT(-136,-72),
  ABISELECT(64,32),
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&_ZN8S7881C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C12D0Ev,
};
extern void _ZN7S7881C2D1Ev();
extern void _ZN7S7881C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C28S7881C128S7881C11__A2__7S7881C1[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&_ZN7S7881C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C28S7881C128S7881C11__A2__7S7881C1[] = {
  ABISELECT(96,48),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI7S7881C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev),
};
extern void _ZN7S7881C8D1Ev();
extern void _ZN7S7881C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C88S7881C128S7881C11__A1__7S7881C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-40,-16),
  ABISELECT(-72,-36),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&_ZN7S7881C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C8D0Ev,
};
extern void _ZN7S7881C5D1Ev();
extern void _ZN7S7881C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7881C57S7881C88S7881C128S7881C11__A4__7S7881C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&_ZN7S7881C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7881C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C57S7881C88S7881C128S7881C11__A4__7S7881C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI7S7881C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C9__7S7881C88S7881C128S7881C11__A1__7S7881C1[] = {
  ABISELECT(72,36),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__7S7881C88S7881C128S7881C11__A1__7S7881C1[] = {
  ABISELECT(40,16),
  ABISELECT(-64,-36),
  ABISELECT(40,16),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S7881C88S7881C128S7881C11__A1__7S7881C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D1Ev,_ZTv0_n12_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C8D0Ev,_ZTv0_n12_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__7S7881C88S7881C128S7881C11__A1__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D1Ev,_ZTvn8_n24_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S7881C8D0Ev,_ZTvn8_n24_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__A1__7S7881C88S7881C128S7881C11__A1__7S7881C1[] = {
  ABISELECT(144,76),
  ABISELECT(40,24),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI7S7881C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(96,48),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C12D1Ev,_ZTv0_n12_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C12D0Ev,_ZTv0_n12_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S7881C12D1Ev,_ZThn32_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S7881C12D0Ev,_ZThn32_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(-200,-104),
  ABISELECT(-64,-32),
  ABISELECT(-160,-80),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(136,72),
  ABISELECT(40,24),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZThn8_N8S7881C12D1Ev,_ZThn4_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn8_N8S7881C12D0Ev,_ZThn4_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C8__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-40,-16),
  ABISELECT(-72,-36),
  ABISELECT(-104,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C12D1Ev,_ZThn4_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C12D0Ev,_ZThn4_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C9__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(64,32),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C12D1Ev,_ZTv0_n24_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C12D0Ev,_ZTv0_n24_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A1__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(32,12),
  ABISELECT(-64,-36),
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S7881C12D1Ev,_ZTvn8_n24_N8S7881C12D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S7881C12D0Ev,_ZTvn8_n24_N8S7881C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C12D1Ev,_ZTvn8_n24_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C12D0Ev,_ZTvn8_n24_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev)();
extern void ABISELECT(_ZThn72_N8S7881C12D1Ev,_ZThn36_N8S7881C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev)();
extern void ABISELECT(_ZThn72_N8S7881C12D0Ev,_ZThn36_N8S7881C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7881C13__8S7881C128S7881C11__7S7881C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-168,-84),
  ABISELECT(-104,-48),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S7881C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C11D1Ev,_ZTv0_n12_N8S7881C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C11D0Ev,_ZTv0_n12_N8S7881C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S7881C11__7S7881C1[] = {
  ABISELECT(96,48),
  ABISELECT(96,48),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C11D1Ev,_ZTv0_n12_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C11D0Ev,_ZTv0_n12_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn64_N8S7881C11D1Ev,_ZThn32_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn64_N8S7881C11D0Ev,_ZThn32_N8S7881C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__8S7881C11__7S7881C1[] = {
  ABISELECT(-200,-104),
  ABISELECT(-64,-32),
  ABISELECT(-160,-80),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__8S7881C11__7S7881C1[] = {
  ABISELECT(136,72),
  ABISELECT(40,24),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZThn8_N8S7881C11D1Ev,_ZThn4_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn8_N8S7881C11D0Ev,_ZThn4_N8S7881C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C88S7881C12__8S7881C11__7S7881C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-40,-16),
  ABISELECT(-72,-36),
  ABISELECT(-104,-52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C11D1Ev,_ZThn4_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7881C11D0Ev,_ZThn4_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7881C11D1Ev,_ZTv0_n24_N8S7881C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7881C11D0Ev,_ZTv0_n24_N8S7881C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C9__8S7881C11__7S7881C1[] = {
  ABISELECT(64,32),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C11D1Ev,_ZTv0_n24_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7881C11D0Ev,_ZTv0_n24_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__A1__8S7881C11__7S7881C1[] = {
  ABISELECT(32,12),
  ABISELECT(-64,-36),
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S7881C11D1Ev,_ZTvn8_n24_N8S7881C11D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S7881C11D0Ev,_ZTvn8_n24_N8S7881C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7881C107S7881C9__8S7881C11__7S7881C1[] = {
  ABISELECT(16,12),
  ABISELECT(-48,-24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C11D1Ev,_ZTvn8_n24_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S7881C11D0Ev,_ZTvn8_n24_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7881C11D1Ev,_ZTv0_n20_N8S7881C11D1Ev)();
extern void ABISELECT(_ZThn72_N8S7881C11D1Ev,_ZThn36_N8S7881C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7881C11D0Ev,_ZTv0_n20_N8S7881C11D0Ev)();
extern void ABISELECT(_ZThn72_N8S7881C11D0Ev,_ZThn36_N8S7881C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7881C13__8S7881C11__7S7881C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-168,-84),
  ABISELECT(-104,-48),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S7881C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C11D1Ev,_ZTv0_n20_N8S7881C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7881C11D0Ev,_ZTv0_n20_N8S7881C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void _ZN7S7881C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
extern void _ZN7S7881C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7881C7__A1__7S7881C1[] = {
  ABISELECT(-200,-104),
  0,
  ABISELECT(-160,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C5__7S7881C7__A1__7S7881C1[] = {
  ABISELECT(200,104),
  ABISELECT(40,24),
  ABISELECT(200,104),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S7881C7__A1__7S7881C1[] = {
  ABISELECT(160,80),
  ABISELECT(160,80),
  (VTBL_ENTRY)&(_ZTI7S7881C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D1Ev,_ZTv0_n12_N7S7881C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7881C7D0Ev,_ZTv0_n12_N7S7881C7D0Ev),
};
extern void _ZN8S7881C13D1Ev();
extern void _ZN8S7881C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7881C13__7S7881C1[] = {
  ABISELECT(-168,-84),
  ABISELECT(-104,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&_ZN8S7881C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7881C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7881C2__8S7881C13__7S7881C1[] = {
  ABISELECT(104,48),
  ABISELECT(-64,-36),
  ABISELECT(104,48),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D1Ev,_ZTv0_n16_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7881C13D0Ev,_ZTv0_n16_N8S7881C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S7881C13__7S7881C1[] = {
  ABISELECT(168,84),
  ABISELECT(168,84),
  (VTBL_ENTRY)&(_ZTI8S7881C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D1Ev,_ZTv0_n12_N8S7881C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7881C13D0Ev,_ZTv0_n12_N8S7881C13D0Ev),
};
static  VTT_ENTRY vtt_S7881C1[] = {
  {&(_ZTV7S7881C1[12]),  12,119},
  {&(_tg__ZTV7S7881C2__A__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__A__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C4__7S7881C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__7S7881C4__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C4__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C9__A__7S7881C1[5]),  5,7},
  {&(_tg__ZTV8S7881C107S7881C9__A2__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C107S7881C9__A5__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A5__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C107S7881C9__A2__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C107S7881C9__A2__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C9__A__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C9__A__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S7881C10__7S7881C9__A__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9__A__7S7881C1[4]),  4,6},
  {&(_ZTV7S7881C1[37]),  37,119},
  {&(_ZTV7S7881C1[19]),  19,119},
  {&(_ZTV7S7881C1[19]),  19,119},
  {&(_ZTV7S7881C1[48]),  48,119},
  {&(_ZTV7S7881C1[57]),  57,119},
  {&(_ZTV7S7881C1[65]),  65,119},
  {&(_ZTV7S7881C1[77]),  77,119},
  {&(_ZTV7S7881C1[71]),  71,119},
  {&(_ZTV7S7881C1[84]),  84,119},
  {&(_ZTV7S7881C1[95]),  95,119},
  {&(_ZTV7S7881C1[110]),  110,119},
  {&(_ZTV7S7881C1[103]),  103,119},
  {&(_ZTV7S7881C1[117]),  117,119},
  {&(_ZTV7S7881C1[26]),  26,119},
  {&(_ZTV7S7881C1[32]),  32,119},
  {&(_tg__ZTV7S7881C5__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C5__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C6__7S7881C1[9]),  9,11},
  {&(_tg__ZTV7S7881C77S7881C6__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C5__7S7881C77S7881C6__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__7S7881C77S7881C6__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C5__7S7881C6__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__7S7881C6__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C8__7S7881C6__7S7881C1[7]),  7,9},
  {&(_tg__ZTV7S7881C9__7S7881C6__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C2__7S7881C6__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C6__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C10__A1__7S7881C6__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C8__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C57S7881C8__A2__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C57S7881C8__A2__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C9__7S7881C8__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C2__7S7881C8__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C8__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C8__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C8__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C9__7S7881C1[5]),  5,7},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C107S7881C9__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C107S7881C9__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C107S7881C9__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C107S7881C9__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C2__7S7881C9__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C9__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S7881C10__7S7881C9__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C9__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C2__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C2__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S7881C10__A1__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C58S7881C10__A3__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C58S7881C10__A3__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S7881C10__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C2__8S7881C10__A1__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C11__7S7881C1[8]),  8,10},
  {&(_tg__ZTV8S7881C128S7881C11__7S7881C1[8]),  8,10},
  {&(_tg__ZTV7S7881C28S7881C128S7881C11__A2__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C28S7881C128S7881C11__A2__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C88S7881C128S7881C11__A1__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C57S7881C88S7881C128S7881C11__A4__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S7881C57S7881C88S7881C128S7881C11__A4__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C9__7S7881C88S7881C128S7881C11__A1__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C2__7S7881C88S7881C128S7881C11__A1__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S7881C88S7881C128S7881C11__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S7881C107S7881C9__7S7881C88S7881C128S7881C11__A1__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C5__A1__7S7881C88S7881C128S7881C11__A1__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S7881C128S7881C11__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C7__8S7881C128S7881C11__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C5__8S7881C128S7881C11__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C8__8S7881C128S7881C11__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C9__8S7881C128S7881C11__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C2__A1__8S7881C128S7881C11__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C107S7881C9__8S7881C128S7881C11__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C13__8S7881C128S7881C11__7S7881C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S7881C11__7S7881C1[3]),  3,5},
  {&(_tg__ZTV7S7881C7__8S7881C11__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C5__8S7881C11__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C88S7881C12__8S7881C11__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C9__8S7881C11__7S7881C1[6]),  6,8},
  {&(_tg__ZTV7S7881C2__A1__8S7881C11__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C107S7881C9__8S7881C11__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S7881C13__8S7881C11__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C7__A1__7S7881C1[5]),  5,7},
  {&(_tg__ZTV7S7881C5__7S7881C7__A1__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__7S7881C7__A1__7S7881C1[3]),  3,5},
  {&(_tg__ZTV8S7881C13__7S7881C1[4]),  4,6},
  {&(_tg__ZTV7S7881C2__8S7881C13__7S7881C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S7881C13__7S7881C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7881C1[];
extern  VTBL_ENTRY _ZTV7S7881C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7881C1[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C11D0Ev,_ZTv0_n20_N8S7881C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7881C11D0Ev,_ZThn36_N8S7881C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C11D1Ev,_ZTv0_n20_N8S7881C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7881C11D1Ev,_ZThn36_N8S7881C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C11D0Ev,_ZTv0_n16_N8S7881C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C11D0Ev,_ZThn32_N8S7881C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C11D1Ev,_ZTv0_n16_N8S7881C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C11D1Ev,_ZThn32_N8S7881C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C12D0Ev,_ZTv0_n20_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7881C12D0Ev,_ZThn36_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7881C12D1Ev,_ZTv0_n20_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7881C12D1Ev,_ZThn36_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C12D0Ev,_ZTv0_n16_N8S7881C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C12D0Ev,_ZThn32_N8S7881C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C12D1Ev,_ZTv0_n16_N8S7881C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7881C12D1Ev,_ZThn32_N8S7881C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D0Ev,_ZTv0_n16_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C8D0Ev,_ZThn24_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C8D1Ev,_ZTv0_n16_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C8D1Ev,_ZThn24_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D0Ev,_ZTv0_n24_N7S7881C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C8D0Ev,_ZThn4_N7S7881C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C8D1Ev,_ZTv0_n24_N7S7881C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C8D1Ev,_ZThn4_N7S7881C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7881C6D0Ev,_ZTv0_n20_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C6D0Ev,_ZThn32_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7881C6D1Ev,_ZTv0_n20_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7881C6D1Ev,_ZThn32_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C6D0Ev,_ZTv0_n24_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7881C6D0Ev,_ZThn8_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C6D1Ev,_ZTv0_n24_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7881C6D1Ev,_ZThn8_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7881C6D0Ev,_ZTv0_n28_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C6D0Ev,_ZThn4_N7S7881C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7881C6D1Ev,_ZTv0_n28_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C6D1Ev,_ZThn4_N7S7881C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D0Ev,_ZTv0_n16_N7S7881C7D0Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D0Ev,
  (VTBL_ENTRY)_ZN7S7881C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C7D1Ev,_ZTv0_n16_N7S7881C7D1Ev), // 
  (VTBL_ENTRY)_ZN7S7881C7D1Ev,
  (VTBL_ENTRY)_ZN7S7881C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C6D0Ev,_ZTv0_n16_N7S7881C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C6D0Ev,_ZThn28_N7S7881C6D0Ev),
  (VTBL_ENTRY)_ZN7S7881C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C6D1Ev,_ZTv0_n16_N7S7881C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C6D1Ev,_ZThn28_N7S7881C6D1Ev),
  (VTBL_ENTRY)_ZN7S7881C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C9D0Ev,_ZTv0_n12_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C9D1Ev,_ZTv0_n12_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D0Ev,_ZTv0_n16_N7S7881C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D0Ev,_ZThn20_N7S7881C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7881C9D0Ev,_ZThn56_N7S7881C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C9D1Ev,_ZTv0_n16_N7S7881C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7881C9D1Ev,_ZThn20_N7S7881C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7881C9D1Ev,_ZThn56_N7S7881C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D0Ev,_ZTv0_n16_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C10D0Ev,_ZThn48_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7881C10D1Ev,_ZTv0_n16_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7881C10D1Ev,_ZThn48_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D0Ev,_ZTv0_n12_N8S7881C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D0Ev,_ZThn12_N8S7881C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7881C10D1Ev,_ZTv0_n12_N8S7881C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7881C10D1Ev,_ZThn12_N8S7881C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D0Ev,_ZTv0_n12_N7S7881C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C5D0Ev,_ZThn24_N7S7881C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7881C5D0Ev,_ZThn12_N7S7881C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C5D1Ev,_ZTv0_n12_N7S7881C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C5D1Ev,_ZThn24_N7S7881C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7881C5D1Ev,_ZThn12_N7S7881C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C4D0Ev,_ZTv0_n12_N7S7881C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C4D0Ev,_ZThn24_N7S7881C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C4D1Ev,_ZTv0_n12_N7S7881C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7881C4D1Ev,_ZThn24_N7S7881C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C4D0Ev,_ZTv0_n16_N7S7881C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7881C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C4D1Ev,_ZTv0_n16_N7S7881C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7881C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D0Ev,_ZTv0_n12_N7S7881C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C2D0Ev,_ZThn28_N7S7881C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C2D1Ev,_ZTv0_n12_N7S7881C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C2D1Ev,_ZThn28_N7S7881C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7881C1D0Ev,_ZTv0_n36_N7S7881C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7881C1D0Ev,_ZThn76_N7S7881C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7881C1D1Ev,_ZTv0_n36_N7S7881C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7881C1D1Ev,_ZThn76_N7S7881C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7881C1D0Ev,_ZTv0_n20_N7S7881C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7881C1D0Ev,_ZThn112_N7S7881C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7881C1D0Ev,_ZThn68_N7S7881C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7881C1D1Ev,_ZTv0_n20_N7S7881C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S7881C1D1Ev,_ZThn112_N7S7881C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7881C1D1Ev,_ZThn68_N7S7881C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C1D0Ev,_ZTv0_n24_N7S7881C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7881C1D0Ev,_ZThn44_N7S7881C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7881C1D1Ev,_ZTv0_n24_N7S7881C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7881C1D1Ev,_ZThn44_N7S7881C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7881C1D0Ev,_ZTv0_n28_N7S7881C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C1D0Ev,_ZThn40_N7S7881C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7881C1D1Ev,_ZTv0_n28_N7S7881C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7881C1D1Ev,_ZThn40_N7S7881C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C1D0Ev,_ZTv0_n12_N7S7881C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C1D0Ev,_ZThn28_N7S7881C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7881C1D1Ev,_ZTv0_n12_N7S7881C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7881C1D1Ev,_ZThn28_N7S7881C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C1D0Ev,_ZTv0_n16_N7S7881C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7881C1D0Ev,_ZThn108_N7S7881C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7881C1D0Ev,_ZThn64_N7S7881C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C1D0Ev,_ZThn36_N7S7881C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C1D0Ev,_ZThn4_N7S7881C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7881C1D1Ev,_ZTv0_n16_N7S7881C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7881C1D1Ev,_ZThn108_N7S7881C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7881C1D1Ev,_ZThn64_N7S7881C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7881C1D1Ev,_ZThn36_N7S7881C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7881C1D1Ev,_ZThn4_N7S7881C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7881C1 = {  "S7881C1", // class name
  bases_S7881C1, 27,
  &(vtc_S7881C1[0]), // expected_vtbl_contents
  &(vtt_S7881C1[0]), // expected_vtt_contents
  ABISELECT(240,120), // object size
  NSPAIRA(_ZTI7S7881C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7881C1),119, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7881C1),103, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C5  : S5217C60_nt {
  void *s19032c5f0[2];
};
//SIG(-1 S19032C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S19032C5()
{
  extern Class_Descriptor cd_S19032C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19032C5, buf);
    S19032C5 &lv = *(new (buf) S19032C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19032C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S19032C5");
    check_field_offset(lv, s19032c5f0, ABISELECT(8,4), "S19032C5.s19032c5f0");
    test_class_info(&lv, &cd_S19032C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C5(Test_S19032C5, "S19032C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S19032C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C5[];
Class_Descriptor cd_S19032C5 = {  "S19032C5", // class name
  bases_S19032C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19032C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C7  : virtual S5217C60_nt , virtual S19032C5 {
  virtual  ~S19032C7(); // _ZN8S19032C7D2Ev
  S19032C7(); // tgen
};
//SIG(-1 S19032C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S19032C7 ::~S19032C7(){ note_dtor("S19032C7", this);}
S19032C7 ::S19032C7(){ note_ctor("S19032C7", this);} // tgen

static void Test_S19032C7()
{
  extern Class_Descriptor cd_S19032C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19032C7, buf);
    S19032C7 *dp, &lv = *(dp=new (buf) S19032C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19032C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C7)");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S19032C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(16,8), "S19032C7");
    check_base_class_offset(lv, (S19032C5*), ABISELECT(16,8), "S19032C7");
    test_class_info(&lv, &cd_S19032C7);
    dp->~S19032C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C7(Test_S19032C7, "S19032C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19032C7C1Ev();
extern void _ZN8S19032C7D2Ev();
Name_Map name_map_S19032C7[] = {
  NSPAIR(_ZN8S19032C7C1Ev),
  NSPAIR(_ZN8S19032C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
static Base_Class bases_S19032C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C7[];
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY vtc_S19032C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19032C7[];
static  VTT_ENTRY vtt_S19032C7[] = {
  {&(_ZTV8S19032C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
Class_Descriptor cd_S19032C7 = {  "S19032C7", // class name
  bases_S19032C7, 3,
  &(vtc_S19032C7[0]), // expected_vtbl_contents
  &(vtt_S19032C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19032C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19032C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19032C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C8  : S5217C60_nt , S19032C5 {
};
//SIG(-1 S19032C8) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S19032C8()
{
  extern Class_Descriptor cd_S19032C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19032C8, buf);
    S19032C8 &lv = *(new (buf) S19032C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19032C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C8)");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S19032C8");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(8,4), "S19032C8");
    check_base_class_offset(lv, (S19032C5*), ABISELECT(8,4), "S19032C8");
    test_class_info(&lv, &cd_S19032C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C8(Test_S19032C8, "S19032C8", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
static Base_Class bases_S19032C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C8[];
Class_Descriptor cd_S19032C8 = {  "S19032C8", // class name
  bases_S19032C8, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19032C8),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C9  : virtual S19032C5 , virtual S5217C60_nt , virtual S19032C7 , virtual S2265C38 {
  int s19032c9f0[9];
  virtual  ~S19032C9(); // _ZN8S19032C9D2Ev
  S19032C9(); // tgen
};
//SIG(-1 S19032C9) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S19032C9 ::~S19032C9(){ note_dtor("S19032C9", this);}
S19032C9 ::S19032C9(){ note_ctor("S19032C9", this);} // tgen

static void Test_S19032C9()
{
  extern Class_Descriptor cd_S19032C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S19032C9, buf);
    S19032C9 *dp, &lv = *(dp=new (buf) S19032C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S19032C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C9)");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(48,40), "S19032C9");
    check_base_class_offset(lv, (S19032C5*), ABISELECT(48,40), "S19032C9");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(48,40), "S19032C9");
    /*is_ambiguous_... S19032C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S19032C9");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(72,52), "S19032C9");
    check_base_class_offset(lv, (S19032C7*), 0, "S19032C9");
    check_base_class_offset(lv, (S2265C38*), 0, "S19032C9");
    check_field_offset(lv, s19032c9f0, ABISELECT(8,4), "S19032C9.s19032c9f0");
    test_class_info(&lv, &cd_S19032C9);
    dp->~S19032C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C9(Test_S19032C9, "S19032C9", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S19032C9C1Ev();
extern void _ZN8S19032C9D2Ev();
Name_Map name_map_S19032C9[] = {
  NSPAIR(_ZN8S19032C9C1Ev),
  NSPAIR(_ZN8S19032C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S19032C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19032C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C9[];
extern void _ZN8S19032C9D1Ev();
extern void _ZN8S19032C9D0Ev();
static  VTBL_ENTRY vtc_S19032C9[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&_ZN8S19032C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S19032C9[];
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C9[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
static  VTT_ENTRY vtt_S19032C9[] = {
  {&(_ZTV8S19032C9[7]),  7,9},
  {&(_ZTV8S19032C9[7]),  7,9},
  {&(_tg__ZTV8S19032C7__8S19032C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19032C9[];
extern  VTBL_ENTRY _ZTV8S19032C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C9[];
Class_Descriptor cd_S19032C9 = {  "S19032C9", // class name
  bases_S19032C9, 5,
  &(vtc_S19032C9[0]), // expected_vtbl_contents
  &(vtt_S19032C9[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S19032C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19032C9),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19032C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C3  : S2265C38 , virtual S19032C5 , virtual S19032C7 , virtual S19032C8 , virtual S19032C9 {
  __tsi64 s19032c3f0;
  virtual  ~S19032C3(); // _ZN8S19032C3D2Ev
  S19032C3(); // tgen
};
//SIG(-1 S19032C3) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S19032C3 ::~S19032C3(){ note_dtor("S19032C3", this);}
S19032C3 ::S19032C3(){ note_ctor("S19032C3", this);} // tgen

static void Test_S19032C3()
{
  extern Class_Descriptor cd_S19032C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S19032C3, buf);
    S19032C3 *dp, &lv = *(dp=new (buf) S19032C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19032C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C3)");
    /*is_ambiguous_... S19032C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S19032C3");
    /*is_ambiguous_... S19032C3::S19032C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(16,12), "S19032C3");
    /*is_ambiguous_... S19032C3::S19032C5 */ AMB_check_base_class_offset(lv, (S19032C5*), ABISELECT(16,12), "S19032C3");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(16,12), "S19032C3");
    check_base_class_offset(lv, (S19032C5*)(S19032C9*), ABISELECT(16,12), "S19032C3");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(40,24), "S19032C3");
    /*is_ambiguous_... S19032C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C9*), ABISELECT(40,24), "S19032C3");
    check_base_class_offset(lv, (S19032C7*), 0, "S19032C3");
    check_base_class_offset(lv, (S19032C7*)(S19032C9*), 0, "S19032C3");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C8*), ABISELECT(48,28), "S19032C3");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*)(S19032C8*), ABISELECT(56,32), "S19032C3");
    check_base_class_offset(lv, (S19032C5*)(S19032C8*), ABISELECT(56,32), "S19032C3");
    check_base_class_offset(lv, (S19032C8*), ABISELECT(48,28), "S19032C3");
    check_base_class_offset(lv, (S2265C38*)(S19032C9*), ABISELECT(124,84), "S19032C3");
    check_base_class_offset(lv, (S19032C9*), ABISELECT(80,44), "S19032C3");
    check_field_offset(lv, s19032c3f0, ABISELECT(8,4), "S19032C3.s19032c3f0");
    test_class_info(&lv, &cd_S19032C3);
    dp->~S19032C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C3(Test_S19032C3, "S19032C3", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19032C3C1Ev();
extern void _ZN8S19032C3D2Ev();
Name_Map name_map_S19032C3[] = {
  NSPAIR(_ZN8S19032C3C1Ev),
  NSPAIR(_ZN8S19032C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C8;
extern VTBL_ENTRY _ZTI8S19032C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19032C9;
extern VTBL_ENTRY _ZTI8S19032C9[];
extern  VTBL_ENTRY _ZTV8S19032C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C9[];
static Base_Class bases_S19032C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19032C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19032C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19032C9,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C3[];
extern void _ZN8S19032C3D1Ev();
extern void _ZN8S19032C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19032C3D1Ev,_ZThn44_N8S19032C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19032C3D0Ev,_ZThn44_N8S19032C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19032C3[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C3[0]),
  (VTBL_ENTRY)&_ZN8S19032C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C3D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19032C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19032C3[];
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C3[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev)();
extern void _ZN8S19032C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev)();
extern void _ZN8S19032C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C9__8S19032C3[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C9__8S19032C3[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev),
};
static  VTT_ENTRY vtt_S19032C3[] = {
  {&(_ZTV8S19032C3[9]),  9,20},
  {&(_ZTV8S19032C3[9]),  9,20},
  {&(_ZTV8S19032C3[18]),  18,20},
  {&(_tg__ZTV8S19032C7__8S19032C3[4]),  4,6},
  {&(_tg__ZTV8S19032C9__8S19032C3[7]),  7,9},
  {&(_tg__ZTV8S19032C7__8S19032C9__8S19032C3[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19032C3[];
extern  VTBL_ENTRY _ZTV8S19032C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C3[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19032C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19032C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C3D0Ev,_ZThn44_N8S19032C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C3D1Ev,_ZThn44_N8S19032C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19032C3 = {  "S19032C3", // class name
  bases_S19032C3, 11,
  &(vtc_S19032C3[0]), // expected_vtbl_contents
  &(vtt_S19032C3[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19032C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19032C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19032C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names114,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C2  : S19032C3 {
  virtual  ~S19032C2(); // _ZN8S19032C2D2Ev
  S19032C2(); // tgen
};
//SIG(-1 S19032C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ m Fp} Fp[2]} VBC6{ VBC5 VBC4 vd} VBC7{ BC5 BC4} VBC8{ VBC4 VBC5 VBC6 VBC3 vd Fi[9]} vd FL} vd}


 S19032C2 ::~S19032C2(){ note_dtor("S19032C2", this);}
S19032C2 ::S19032C2(){ note_ctor("S19032C2", this);} // tgen

static void Test_S19032C2()
{
  extern Class_Descriptor cd_S19032C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S19032C2, buf);
    S19032C2 *dp, &lv = *(dp=new (buf) S19032C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19032C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C2)");
    /*is_ambiguous_... S19032C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19032C3*), 0, "S19032C2");
    /*is_ambiguous_... S19032C2::S19032C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(16,12), "S19032C2");
    /*is_ambiguous_... S19032C3::S19032C5 */ AMB_check_base_class_offset(lv, (S19032C5*)(S19032C3*), ABISELECT(16,12), "S19032C2");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(16,12), "S19032C2");
    check_base_class_offset(lv, (S19032C5*)(S19032C9*), ABISELECT(16,12), "S19032C2");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(40,24), "S19032C2");
    /*is_ambiguous_... S19032C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C9*), ABISELECT(40,24), "S19032C2");
    check_base_class_offset(lv, (S19032C7*)(S19032C3*), 0, "S19032C2");
    check_base_class_offset(lv, (S19032C7*)(S19032C9*), 0, "S19032C2");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C8*), ABISELECT(48,28), "S19032C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*)(S19032C8*), ABISELECT(56,32), "S19032C2");
    check_base_class_offset(lv, (S19032C5*)(S19032C8*), ABISELECT(56,32), "S19032C2");
    check_base_class_offset(lv, (S19032C8*)(S19032C3*), ABISELECT(48,28), "S19032C2");
    check_base_class_offset(lv, (S2265C38*)(S19032C9*), ABISELECT(124,84), "S19032C2");
    check_base_class_offset(lv, (S19032C9*)(S19032C3*), ABISELECT(80,44), "S19032C2");
    check_base_class_offset(lv, (S19032C3*), 0, "S19032C2");
    test_class_info(&lv, &cd_S19032C2);
    dp->~S19032C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C2(Test_S19032C2, "S19032C2", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19032C2C1Ev();
extern void _ZN8S19032C2D2Ev();
Name_Map name_map_S19032C2[] = {
  NSPAIR(_ZN8S19032C2C1Ev),
  NSPAIR(_ZN8S19032C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C8;
extern VTBL_ENTRY _ZTI8S19032C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19032C9;
extern VTBL_ENTRY _ZTI8S19032C9[];
extern  VTBL_ENTRY _ZTV8S19032C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C9[];
extern Class_Descriptor cd_S19032C3;
extern VTBL_ENTRY _ZTI8S19032C3[];
extern  VTBL_ENTRY _ZTV8S19032C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C3[];
static Base_Class bases_S19032C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19032C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19032C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19032C9,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19032C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C2[];
extern void _ZN8S19032C2D1Ev();
extern void _ZN8S19032C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19032C2D1Ev,_ZThn44_N8S19032C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19032C2D0Ev,_ZThn44_N8S19032C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19032C2[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C2[0]),
  (VTBL_ENTRY)&_ZN8S19032C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C2D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19032C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19032C2[];
extern void _ZN8S19032C3D1Ev();
extern void _ZN8S19032C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C3__8S19032C2[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C3[0]),
  (VTBL_ENTRY)&_ZN8S19032C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19032C3D1Ev,_ZThn44_N8S19032C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19032C3D0Ev,_ZThn44_N8S19032C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C9__8S19032C3__8S19032C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19032C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev),
};
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C2[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev)();
extern void _ZN8S19032C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev)();
extern void _ZN8S19032C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C9__8S19032C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C9__8S19032C2[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev),
};
static  VTT_ENTRY vtt_S19032C2[] = {
  {&(_ZTV8S19032C2[9]),  9,20},
  {&(_tg__ZTV8S19032C3__8S19032C2[9]),  9,11},
  {&(_tg__ZTV8S19032C3__8S19032C2[9]),  9,11},
  {&(_tg__ZTV8S19032C9__8S19032C3__8S19032C2[7]),  7,9},
  {&(_ZTV8S19032C2[9]),  9,20},
  {&(_ZTV8S19032C2[18]),  18,20},
  {&(_tg__ZTV8S19032C7__8S19032C2[4]),  4,6},
  {&(_tg__ZTV8S19032C9__8S19032C2[7]),  7,9},
  {&(_tg__ZTV8S19032C7__8S19032C9__8S19032C2[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19032C2[];
extern  VTBL_ENTRY _ZTV8S19032C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C2[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19032C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19032C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C3D0Ev,_ZThn44_N8S19032C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C3D1Ev,_ZThn44_N8S19032C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C2D0Ev,_ZThn44_N8S19032C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C2D1Ev,_ZThn44_N8S19032C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19032C2 = {  "S19032C2", // class name
  bases_S19032C2, 12,
  &(vtc_S19032C2[0]), // expected_vtbl_contents
  &(vtt_S19032C2[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19032C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19032C2),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19032C2),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C12  : virtual S5217C60_nt , S2265C38 , virtual S19032C8 , virtual S19032C7 {
  ~S19032C12(); // tgen
  S19032C12(); // tgen
};
//SIG(-1 S19032C12) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S19032C12 ::~S19032C12(){ note_dtor("S19032C12", this);} // tgen
S19032C12 ::S19032C12(){ note_ctor("S19032C12", this);} // tgen

static void Test_S19032C12()
{
  extern Class_Descriptor cd_S19032C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19032C12, buf);
    S19032C12 *dp, &lv = *(dp=new (buf) S19032C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19032C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C12)");
    /*is_ambiguous_... S19032C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S19032C12");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(8,4), "S19032C12");
    check_base_class_offset(lv, (S2265C38*), 0, "S19032C12");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C8*), ABISELECT(16,8), "S19032C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*)(S19032C8*), ABISELECT(24,12), "S19032C12");
    check_base_class_offset(lv, (S19032C5*)(S19032C8*), ABISELECT(24,12), "S19032C12");
    check_base_class_offset(lv, (S19032C8*), ABISELECT(16,8), "S19032C12");
    /*is_ambiguous_... S19032C12::S19032C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(48,24), "S19032C12");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(48,24), "S19032C12");
    check_base_class_offset(lv, (S19032C7*), 0, "S19032C12");
    test_class_info(&lv, &cd_S19032C12);
    dp->~S19032C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C12(Test_S19032C12, "S19032C12", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S19032C12C1Ev();
extern void _ZN9S19032C12D1Ev();
Name_Map name_map_S19032C12[] = {
  NSPAIR(_ZN9S19032C12C1Ev),
  NSPAIR(_ZN9S19032C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C8;
extern VTBL_ENTRY _ZTI8S19032C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
static Base_Class bases_S19032C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19032C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19032C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19032C12[];
extern void _ZN9S19032C12D1Ev();
extern void _ZN9S19032C12D0Ev();
static  VTBL_ENTRY vtc_S19032C12[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C12[0]),
  (VTBL_ENTRY)&_ZN9S19032C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19032C12D0Ev,
};
extern VTBL_ENTRY _ZTV9S19032C12[];
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__9S19032C12[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
static  VTT_ENTRY vtt_S19032C12[] = {
  {&(_ZTV9S19032C12[7]),  7,9},
  {&(_ZTV9S19032C12[7]),  7,9},
  {&(_tg__ZTV8S19032C7__9S19032C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19032C12[];
extern  VTBL_ENTRY _ZTV9S19032C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C12[];
Class_Descriptor cd_S19032C12 = {  "S19032C12", // class name
  bases_S19032C12, 9,
  &(vtc_S19032C12[0]), // expected_vtbl_contents
  &(vtt_S19032C12[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S19032C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19032C12),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19032C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C11  : virtual S19032C12 {
  ::S19032C7 s19032c11f0;
  ~S19032C11(); // tgen
  S19032C11(); // tgen
};
//SIG(-1 S19032C11) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S19032C11 ::~S19032C11(){ note_dtor("S19032C11", this);} // tgen
S19032C11 ::S19032C11(){ note_ctor("S19032C11", this);} // tgen

static void Test_S19032C11()
{
  extern Class_Descriptor cd_S19032C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S19032C11, buf);
    S19032C11 *dp, &lv = *(dp=new (buf) S19032C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S19032C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C11)");
    /*is_ambiguous_... S19032C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C12*), ABISELECT(48,24), "S19032C11");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(48,24), "S19032C11");
    check_base_class_offset(lv, (S2265C38*)(S19032C12*), 0, "S19032C11");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C8*), ABISELECT(56,28), "S19032C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*)(S19032C8*), ABISELECT(64,32), "S19032C11");
    check_base_class_offset(lv, (S19032C5*)(S19032C8*), ABISELECT(64,32), "S19032C11");
    check_base_class_offset(lv, (S19032C8*)(S19032C12*), ABISELECT(56,28), "S19032C11");
    /*is_ambiguous_... S19032C11::S19032C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(88,44), "S19032C11");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(88,44), "S19032C11");
    check_base_class_offset(lv, (S19032C7*)(S19032C12*), 0, "S19032C11");
    check_base_class_offset(lv, (S19032C12*), 0, "S19032C11");
    check_field_offset(lv, s19032c11f0, ABISELECT(8,4), "S19032C11.s19032c11f0");
    test_class_info(&lv, &cd_S19032C11);
    dp->~S19032C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C11(Test_S19032C11, "S19032C11", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S19032C11C1Ev();
extern void _ZN9S19032C11D1Ev();
Name_Map name_map_S19032C11[] = {
  NSPAIR(_ZN9S19032C11C1Ev),
  NSPAIR(_ZN9S19032C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C8;
extern VTBL_ENTRY _ZTI8S19032C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
extern Class_Descriptor cd_S19032C12;
extern VTBL_ENTRY _ZTI9S19032C12[];
extern  VTBL_ENTRY _ZTV9S19032C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C12[];
static Base_Class bases_S19032C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19032C8,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19032C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19032C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19032C11[];
extern void _ZN9S19032C11D1Ev();
extern void _ZN9S19032C11D0Ev();
static  VTBL_ENTRY vtc_S19032C11[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C11[0]),
  (VTBL_ENTRY)&_ZN9S19032C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19032C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S19032C11[];
extern void ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev)();
extern void _ZN9S19032C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev)();
extern void _ZN9S19032C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19032C12__9S19032C11[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev),
};
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__9S19032C11[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
static  VTT_ENTRY vtt_S19032C11[] = {
  {&(_ZTV9S19032C11[8]),  8,10},
  {&(_ZTV9S19032C11[8]),  8,10},
  {&(_ZTV9S19032C11[8]),  8,10},
  {&(_tg__ZTV9S19032C12__9S19032C11[7]),  7,9},
  {&(_tg__ZTV9S19032C12__9S19032C11[7]),  7,9},
  {&(_tg__ZTV8S19032C7__9S19032C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19032C11[];
extern  VTBL_ENTRY _ZTV9S19032C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C11[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S19032C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S19032C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19032C11 = {  "S19032C11", // class name
  bases_S19032C11, 10,
  &(vtc_S19032C11[0]), // expected_vtbl_contents
  &(vtt_S19032C11[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S19032C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19032C11),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19032C11),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C10  : S19032C11 {
  int s19032c10f0;
  virtual  ~S19032C10(); // _ZN9S19032C10D2Ev
  S19032C10(); // tgen
};
//SIG(-1 S19032C10) C1{ BC2{ VBC3{ VBC4{ m Fp} BC5{ m} VBC6{ BC4 BC7{ BC4 Fp[2]}} VBC8{ VBC4 VBC7 vd}} FC8} vd Fi}


 S19032C10 ::~S19032C10(){ note_dtor("S19032C10", this);}
S19032C10 ::S19032C10(){ note_ctor("S19032C10", this);} // tgen

static void Test_S19032C10()
{
  extern Class_Descriptor cd_S19032C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S19032C10, buf);
    S19032C10 *dp, &lv = *(dp=new (buf) S19032C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S19032C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C10)");
    /*is_ambiguous_... S19032C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C12*), ABISELECT(56,28), "S19032C10");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(56,28), "S19032C10");
    check_base_class_offset(lv, (S2265C38*)(S19032C12*), 0, "S19032C10");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C8*), ABISELECT(64,32), "S19032C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*)(S19032C8*), ABISELECT(72,36), "S19032C10");
    check_base_class_offset(lv, (S19032C5*)(S19032C8*), ABISELECT(72,36), "S19032C10");
    check_base_class_offset(lv, (S19032C8*)(S19032C12*), ABISELECT(64,32), "S19032C10");
    /*is_ambiguous_... S19032C10::S19032C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(96,48), "S19032C10");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(96,48), "S19032C10");
    check_base_class_offset(lv, (S19032C7*)(S19032C12*), 0, "S19032C10");
    check_base_class_offset(lv, (S19032C12*)(S19032C11*), 0, "S19032C10");
    check_base_class_offset(lv, (S19032C11*), 0, "S19032C10");
    check_field_offset(lv, s19032c10f0, ABISELECT(48,24), "S19032C10.s19032c10f0");
    test_class_info(&lv, &cd_S19032C10);
    dp->~S19032C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C10(Test_S19032C10, "S19032C10", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN9S19032C10C1Ev();
extern void _ZN9S19032C10D2Ev();
Name_Map name_map_S19032C10[] = {
  NSPAIR(_ZN9S19032C10C1Ev),
  NSPAIR(_ZN9S19032C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C8;
extern VTBL_ENTRY _ZTI8S19032C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
extern Class_Descriptor cd_S19032C12;
extern VTBL_ENTRY _ZTI9S19032C12[];
extern  VTBL_ENTRY _ZTV9S19032C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C12[];
extern Class_Descriptor cd_S19032C11;
extern VTBL_ENTRY _ZTI9S19032C11[];
extern  VTBL_ENTRY _ZTV9S19032C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C11[];
static Base_Class bases_S19032C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19032C8,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19032C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19032C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19032C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19032C10[];
extern void _ZN9S19032C10D1Ev();
extern void _ZN9S19032C10D0Ev();
static  VTBL_ENTRY vtc_S19032C10[] = {
  0,
  0,
  ABISELECT(64,32),
  0,
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C10[0]),
  (VTBL_ENTRY)&_ZN9S19032C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19032C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19032C10[];
extern void _ZN9S19032C11D1Ev();
extern void _ZN9S19032C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19032C11__9S19032C10[] = {
  0,
  0,
  ABISELECT(64,32),
  0,
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C11[0]),
  (VTBL_ENTRY)&_ZN9S19032C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19032C11D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev)();
extern void _ZN9S19032C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev)();
extern void _ZN9S19032C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19032C12__9S19032C10[] = {
  0,
  ABISELECT(64,32),
  0,
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev),
};
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__9S19032C10[] = {
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
static  VTT_ENTRY vtt_S19032C10[] = {
  {&(_ZTV9S19032C10[8]),  8,10},
  {&(_tg__ZTV9S19032C11__9S19032C10[8]),  8,10},
  {&(_tg__ZTV9S19032C11__9S19032C10[8]),  8,10},
  {&(_tg__ZTV9S19032C11__9S19032C10[8]),  8,10},
  {&(_ZTV9S19032C10[8]),  8,10},
  {&(_ZTV9S19032C10[8]),  8,10},
  {&(_tg__ZTV9S19032C12__9S19032C10[7]),  7,9},
  {&(_tg__ZTV9S19032C12__9S19032C10[7]),  7,9},
  {&(_tg__ZTV8S19032C7__9S19032C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19032C10[];
extern  VTBL_ENTRY _ZTV9S19032C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C10[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S19032C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S19032C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19032C10 = {  "S19032C10", // class name
  bases_S19032C10, 11,
  &(vtc_S19032C10[0]), // expected_vtbl_contents
  &(vtt_S19032C10[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI9S19032C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19032C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19032C10),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19032C1  : virtual S19032C2 , S19032C10 {
  ::S20634C2 s19032c1f0;
  int s19032c1f1;
  ~S19032C1(); // tgen
  S19032C1(); // tgen
};
//SIG(1 S19032C1) C1{ VBC2{ BC3{ BC4{ m} VBC5{ BC6{ m Fp} Fp[2]} VBC7{ VBC6 VBC5 vd} VBC8{ BC6 BC5} VBC9{ VBC5 VBC6 VBC7 VBC4 vd Fi[9]} vd FL} vd} BC10{ BC11{ VBC12{ VBC6 BC4 VBC8 VBC7} FC7} vd Fi} FC13{ VBC14{ m Fi[5]} Fp} Fi}


S19032C1 ::~S19032C1(){ note_dtor("S19032C1", this);} // tgen
S19032C1 ::S19032C1(){ note_ctor("S19032C1", this);} // tgen

static void Test_S19032C1()
{
  extern Class_Descriptor cd_S19032C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,38)];
    init_test(&cd_S19032C1, buf);
    S19032C1 *dp, &lv = *(dp=new (buf) S19032C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,148), "sizeof(S19032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19032C1)");
    /*is_ambiguous_... S19032C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19032C3*)(S19032C2*), ABISELECT(104,60), "S19032C1");
    /*is_ambiguous_... S19032C1::S19032C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*), ABISELECT(120,72), "S19032C1");
    /*is_ambiguous_... S19032C3::S19032C5 */ AMB_check_base_class_offset(lv, (S19032C5*)(S19032C3*)(S19032C2*), ABISELECT(120,72), "S19032C1");
    check_base_class_offset(lv, (S19032C5*)(S19032C7*), ABISELECT(120,72), "S19032C1");
    check_base_class_offset(lv, (S19032C5*)(S19032C9*), ABISELECT(120,72), "S19032C1");
    /*is_ambiguous_... S19032C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C7*), ABISELECT(144,84), "S19032C1");
    /*is_ambiguous_... S19032C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C9*), ABISELECT(144,84), "S19032C1");
    /*is_ambiguous_... S19032C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C12*), ABISELECT(144,84), "S19032C1");
    check_base_class_offset(lv, (S19032C7*)(S19032C3*)(S19032C2*), ABISELECT(104,60), "S19032C1");
    check_base_class_offset(lv, (S19032C7*)(S19032C9*), ABISELECT(104,60), "S19032C1");
    check_base_class_offset(lv, (S19032C7*)(S19032C12*), ABISELECT(104,60), "S19032C1");
    /*is_ambiguous_... S19032C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19032C8*), ABISELECT(152,88), "S19032C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S19032C5*)(S19032C8*), ABISELECT(160,92), "S19032C1");
    check_base_class_offset(lv, (S19032C5*)(S19032C8*), ABISELECT(160,92), "S19032C1");
    check_base_class_offset(lv, (S19032C8*)(S19032C3*)(S19032C2*), ABISELECT(152,88), "S19032C1");
    check_base_class_offset(lv, (S19032C8*)(S19032C12*), ABISELECT(152,88), "S19032C1");
    check_base_class_offset(lv, (S2265C38*)(S19032C9*), ABISELECT(228,144), "S19032C1");
    check_base_class_offset(lv, (S19032C9*)(S19032C3*)(S19032C2*), ABISELECT(184,104), "S19032C1");
    check_base_class_offset(lv, (S19032C3*)(S19032C2*), ABISELECT(104,60), "S19032C1");
    check_base_class_offset(lv, (S19032C2*), ABISELECT(104,60), "S19032C1");
    check_base_class_offset(lv, (S2265C38*)(S19032C12*), 0, "S19032C1");
    check_base_class_offset(lv, (S19032C12*)(S19032C11*)(S19032C10*), 0, "S19032C1");
    check_base_class_offset(lv, (S19032C11*)(S19032C10*), 0, "S19032C1");
    check_base_class_offset(lv, (S19032C10*), 0, "S19032C1");
    check_field_offset(lv, s19032c1f0, ABISELECT(56,28), "S19032C1.s19032c1f0");
    check_field_offset(lv, s19032c1f1, ABISELECT(96,56), "S19032C1.s19032c1f1");
    test_class_info(&lv, &cd_S19032C1);
    dp->~S19032C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19032C1(Test_S19032C1, "S19032C1", ABISELECT(232,148));

#else // __cplusplus

extern void _ZN8S19032C1C1Ev();
extern void _ZN8S19032C1D1Ev();
Name_Map name_map_S19032C1[] = {
  NSPAIR(_ZN8S19032C1C1Ev),
  NSPAIR(_ZN8S19032C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C7;
extern VTBL_ENTRY _ZTI8S19032C7[];
extern  VTBL_ENTRY _ZTV8S19032C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19032C5;
extern VTBL_ENTRY _ZTI8S19032C5[];
extern Class_Descriptor cd_S19032C8;
extern VTBL_ENTRY _ZTI8S19032C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19032C9;
extern VTBL_ENTRY _ZTI8S19032C9[];
extern  VTBL_ENTRY _ZTV8S19032C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C9[];
extern Class_Descriptor cd_S19032C3;
extern VTBL_ENTRY _ZTI8S19032C3[];
extern  VTBL_ENTRY _ZTV8S19032C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C3[];
extern Class_Descriptor cd_S19032C2;
extern VTBL_ENTRY _ZTI8S19032C2[];
extern  VTBL_ENTRY _ZTV8S19032C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19032C12;
extern VTBL_ENTRY _ZTI9S19032C12[];
extern  VTBL_ENTRY _ZTV9S19032C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C12[];
extern Class_Descriptor cd_S19032C11;
extern VTBL_ENTRY _ZTI9S19032C11[];
extern  VTBL_ENTRY _ZTV9S19032C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C11[];
extern Class_Descriptor cd_S19032C10;
extern VTBL_ENTRY _ZTI9S19032C10[];
extern  VTBL_ENTRY _ZTV9S19032C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19032C10[];
static Base_Class bases_S19032C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19032C7,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(152,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19032C5,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19032C8,    ABISELECT(152,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(228,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19032C9,    ABISELECT(184,104), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19032C3,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19032C2,    ABISELECT(104,60), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19032C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19032C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19032C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19032C1[];
extern void ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev)();
extern void _ZN8S19032C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev)();
extern void _ZN8S19032C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19032C1D1Ev,_ZThn60_N8S19032C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19032C1D0Ev,_ZThn60_N8S19032C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19032C1D1Ev,_ZThn104_N8S19032C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S19032C1D0Ev,_ZThn104_N8S19032C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19032C1[] = {
  ABISELECT(228,144),
  ABISELECT(184,104),
  ABISELECT(104,60),
  0,
  ABISELECT(104,60),
  ABISELECT(152,88),
  0,
  ABISELECT(120,72),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev),
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  ABISELECT(-104,-60),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19032C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev),
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-184,-104),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-184,-104),
  (VTBL_ENTRY)&(_ZTI8S19032C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19032C1[];
extern void ABISELECT(_ZTv0_n40_N9S19032C10D1Ev,_ZTv0_n20_N9S19032C10D1Ev)();
extern void _ZN9S19032C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C10D0Ev,_ZTv0_n20_N9S19032C10D0Ev)();
extern void _ZN9S19032C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19032C10__8S19032C1[] = {
  0,
  ABISELECT(104,60),
  ABISELECT(152,88),
  0,
  ABISELECT(120,72),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C10D1Ev,_ZTv0_n20_N9S19032C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C10D0Ev,_ZTv0_n20_N9S19032C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19032C11D1Ev,_ZTv0_n20_N9S19032C11D1Ev)();
extern void _ZN9S19032C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C11D0Ev,_ZTv0_n20_N9S19032C11D0Ev)();
extern void _ZN9S19032C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19032C119S19032C10__8S19032C1[] = {
  0,
  ABISELECT(104,60),
  ABISELECT(152,88),
  0,
  ABISELECT(120,72),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C11D1Ev,_ZTv0_n20_N9S19032C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C11D0Ev,_ZTv0_n20_N9S19032C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19032C11D1Ev,_ZTv0_n20_N9S19032C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S19032C11D1Ev,_ZThn60_N9S19032C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C11D0Ev,_ZTv0_n20_N9S19032C11D0Ev)();
extern void ABISELECT(_ZThn104_N9S19032C11D0Ev,_ZThn60_N9S19032C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C7__9S19032C119S19032C10__8S19032C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19032C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C11D1Ev,_ZTv0_n20_N9S19032C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C11D0Ev,_ZTv0_n20_N9S19032C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19032C10D1Ev,_ZTv0_n20_N9S19032C10D1Ev)();
extern void ABISELECT(_ZThn104_N9S19032C10D1Ev,_ZThn60_N9S19032C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C10D0Ev,_ZTv0_n20_N9S19032C10D0Ev)();
extern void ABISELECT(_ZThn104_N9S19032C10D0Ev,_ZThn60_N9S19032C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C7__9S19032C10__8S19032C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19032C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C10D1Ev,_ZTv0_n20_N9S19032C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C10D0Ev,_ZTv0_n20_N9S19032C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev)();
extern void _ZN8S19032C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev)();
extern void _ZN8S19032C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C2__8S19032C1[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev)();
extern void _ZN8S19032C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev)();
extern void _ZN8S19032C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C38S19032C2__8S19032C1[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19032C3D1Ev,_ZThn44_N8S19032C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19032C3D0Ev,_ZThn44_N8S19032C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C9__8S19032C38S19032C2__8S19032C1[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19032C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19032C2D1Ev,_ZThn44_N8S19032C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19032C2D0Ev,_ZThn44_N8S19032C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C9__8S19032C2__8S19032C1[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19032C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev),
};
extern void _ZN8S19032C7D1Ev();
extern void _ZN8S19032C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C1[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C7[0]),
  (VTBL_ENTRY)&_ZN8S19032C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19032C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev)();
extern void _ZN8S19032C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev)();
extern void _ZN8S19032C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C9__8S19032C1[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19032C7__8S19032C9__8S19032C1[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19032C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev)();
extern void _ZN9S19032C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev)();
extern void _ZN9S19032C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19032C12__8S19032C1[] = {
  ABISELECT(104,60),
  ABISELECT(152,88),
  0,
  ABISELECT(120,72),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19032C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev)();
extern void ABISELECT(_ZThn104_N9S19032C12D1Ev,_ZThn60_N9S19032C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev)();
extern void ABISELECT(_ZThn104_N9S19032C12D0Ev,_ZThn60_N9S19032C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19032C7__9S19032C12__8S19032C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19032C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev),
};
static  VTT_ENTRY vtt_S19032C1[] = {
  {&(_ZTV8S19032C1[11]),  11,33},
  {&(_tg__ZTV9S19032C10__8S19032C1[8]),  8,10},
  {&(_tg__ZTV9S19032C119S19032C10__8S19032C1[8]),  8,10},
  {&(_tg__ZTV9S19032C119S19032C10__8S19032C1[8]),  8,10},
  {&(_tg__ZTV8S19032C7__9S19032C119S19032C10__8S19032C1[5]),  5,7},
  {&(_tg__ZTV9S19032C10__8S19032C1[8]),  8,10},
  {&(_tg__ZTV8S19032C7__9S19032C10__8S19032C1[5]),  5,7},
  {&(_ZTV8S19032C1[22]),  22,33},
  {&(_ZTV8S19032C1[22]),  22,33},
  {&(_ZTV8S19032C1[31]),  31,33},
  {&(_ZTV8S19032C1[11]),  11,33},
  {&(_tg__ZTV8S19032C2__8S19032C1[9]),  9,11},
  {&(_tg__ZTV8S19032C38S19032C2__8S19032C1[9]),  9,11},
  {&(_tg__ZTV8S19032C38S19032C2__8S19032C1[9]),  9,11},
  {&(_tg__ZTV8S19032C9__8S19032C38S19032C2__8S19032C1[7]),  7,9},
  {&(_tg__ZTV8S19032C2__8S19032C1[9]),  9,11},
  {&(_tg__ZTV8S19032C9__8S19032C2__8S19032C1[7]),  7,9},
  {&(_tg__ZTV8S19032C7__8S19032C1[4]),  4,6},
  {&(_tg__ZTV8S19032C9__8S19032C1[7]),  7,9},
  {&(_tg__ZTV8S19032C7__8S19032C9__8S19032C1[5]),  5,7},
  {&(_tg__ZTV9S19032C12__8S19032C1[7]),  7,9},
  {&(_tg__ZTV8S19032C7__9S19032C12__8S19032C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19032C1[];
extern  VTBL_ENTRY _ZTV8S19032C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19032C1[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C12D0Ev,_ZTv0_n20_N9S19032C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19032C12D0Ev,_ZThn60_N9S19032C12D0Ev),
  (VTBL_ENTRY)_ZN9S19032C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C12D1Ev,_ZTv0_n20_N9S19032C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19032C12D1Ev,_ZThn60_N9S19032C12D1Ev),
  (VTBL_ENTRY)_ZN9S19032C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C9D0Ev,_ZTv0_n20_N8S19032C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19032C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C9D1Ev,_ZTv0_n20_N8S19032C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19032C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C3D0Ev,_ZTv0_n20_N8S19032C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C3D0Ev,_ZThn44_N8S19032C3D0Ev),
  (VTBL_ENTRY)_ZN8S19032C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C3D1Ev,_ZTv0_n20_N8S19032C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C3D1Ev,_ZThn44_N8S19032C3D1Ev),
  (VTBL_ENTRY)_ZN8S19032C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C2D0Ev,_ZTv0_n20_N8S19032C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C2D0Ev,_ZThn44_N8S19032C2D0Ev),
  (VTBL_ENTRY)_ZN8S19032C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C2D1Ev,_ZTv0_n20_N8S19032C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19032C2D1Ev,_ZThn44_N8S19032C2D1Ev),
  (VTBL_ENTRY)_ZN8S19032C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C11D0Ev,_ZTv0_n20_N9S19032C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19032C11D0Ev,_ZThn60_N9S19032C11D0Ev),
  (VTBL_ENTRY)_ZN9S19032C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C11D1Ev,_ZTv0_n20_N9S19032C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19032C11D1Ev,_ZThn60_N9S19032C11D1Ev),
  (VTBL_ENTRY)_ZN9S19032C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C10D0Ev,_ZTv0_n20_N9S19032C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19032C10D0Ev,_ZThn60_N9S19032C10D0Ev),
  (VTBL_ENTRY)_ZN9S19032C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19032C10D1Ev,_ZTv0_n20_N9S19032C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19032C10D1Ev,_ZThn60_N9S19032C10D1Ev),
  (VTBL_ENTRY)_ZN9S19032C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C1D0Ev,_ZTv0_n20_N8S19032C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19032C1D0Ev,_ZThn104_N8S19032C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19032C1D0Ev,_ZThn60_N8S19032C1D0Ev),
  (VTBL_ENTRY)_ZN8S19032C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19032C1D1Ev,_ZTv0_n20_N8S19032C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19032C1D1Ev,_ZThn104_N8S19032C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19032C1D1Ev,_ZThn60_N8S19032C1D1Ev),
  (VTBL_ENTRY)_ZN8S19032C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19032C1 = {  "S19032C1", // class name
  bases_S19032C1, 17,
  &(vtc_S19032C1[0]), // expected_vtbl_contents
  &(vtt_S19032C1[0]), // expected_vtt_contents
  ABISELECT(232,148), // object size
  NSPAIRA(_ZTI8S19032C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19032C1),33, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19032C1),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C5  : S5217C60_nt {
  void *s19031c5f0[2];
};
//SIG(-1 S19031C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S19031C5()
{
  extern Class_Descriptor cd_S19031C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19031C5, buf);
    S19031C5 &lv = *(new (buf) S19031C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19031C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S19031C5");
    check_field_offset(lv, s19031c5f0, ABISELECT(8,4), "S19031C5.s19031c5f0");
    test_class_info(&lv, &cd_S19031C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C5(Test_S19031C5, "S19031C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S19031C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C5[];
Class_Descriptor cd_S19031C5 = {  "S19031C5", // class name
  bases_S19031C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19031C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C7  : virtual S5217C60_nt , virtual S19031C5 {
  virtual  ~S19031C7(); // _ZN8S19031C7D2Ev
  S19031C7(); // tgen
};
//SIG(-1 S19031C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S19031C7 ::~S19031C7(){ note_dtor("S19031C7", this);}
S19031C7 ::S19031C7(){ note_ctor("S19031C7", this);} // tgen

static void Test_S19031C7()
{
  extern Class_Descriptor cd_S19031C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19031C7, buf);
    S19031C7 *dp, &lv = *(dp=new (buf) S19031C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19031C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C7)");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S19031C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(16,8), "S19031C7");
    check_base_class_offset(lv, (S19031C5*), ABISELECT(16,8), "S19031C7");
    test_class_info(&lv, &cd_S19031C7);
    dp->~S19031C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C7(Test_S19031C7, "S19031C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19031C7C1Ev();
extern void _ZN8S19031C7D2Ev();
Name_Map name_map_S19031C7[] = {
  NSPAIR(_ZN8S19031C7C1Ev),
  NSPAIR(_ZN8S19031C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
static Base_Class bases_S19031C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C7[];
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY vtc_S19031C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19031C7[];
static  VTT_ENTRY vtt_S19031C7[] = {
  {&(_ZTV8S19031C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
Class_Descriptor cd_S19031C7 = {  "S19031C7", // class name
  bases_S19031C7, 3,
  &(vtc_S19031C7[0]), // expected_vtbl_contents
  &(vtt_S19031C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19031C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19031C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19031C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C8  : S5217C60_nt , S19031C5 {
};
//SIG(-1 S19031C8) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S19031C8()
{
  extern Class_Descriptor cd_S19031C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19031C8, buf);
    S19031C8 &lv = *(new (buf) S19031C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19031C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C8)");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S19031C8");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(8,4), "S19031C8");
    check_base_class_offset(lv, (S19031C5*), ABISELECT(8,4), "S19031C8");
    test_class_info(&lv, &cd_S19031C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C8(Test_S19031C8, "S19031C8", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
static Base_Class bases_S19031C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C8[];
Class_Descriptor cd_S19031C8 = {  "S19031C8", // class name
  bases_S19031C8, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19031C8),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C9  : virtual S19031C5 , virtual S5217C60_nt , virtual S19031C7 , virtual S2265C38 {
  int s19031c9f0[9];
  virtual  ~S19031C9(); // _ZN8S19031C9D2Ev
  S19031C9(); // tgen
};
//SIG(-1 S19031C9) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S19031C9 ::~S19031C9(){ note_dtor("S19031C9", this);}
S19031C9 ::S19031C9(){ note_ctor("S19031C9", this);} // tgen

static void Test_S19031C9()
{
  extern Class_Descriptor cd_S19031C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S19031C9, buf);
    S19031C9 *dp, &lv = *(dp=new (buf) S19031C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S19031C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C9)");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(48,40), "S19031C9");
    check_base_class_offset(lv, (S19031C5*), ABISELECT(48,40), "S19031C9");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(48,40), "S19031C9");
    /*is_ambiguous_... S19031C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S19031C9");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(72,52), "S19031C9");
    check_base_class_offset(lv, (S19031C7*), 0, "S19031C9");
    check_base_class_offset(lv, (S2265C38*), 0, "S19031C9");
    check_field_offset(lv, s19031c9f0, ABISELECT(8,4), "S19031C9.s19031c9f0");
    test_class_info(&lv, &cd_S19031C9);
    dp->~S19031C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C9(Test_S19031C9, "S19031C9", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S19031C9C1Ev();
extern void _ZN8S19031C9D2Ev();
Name_Map name_map_S19031C9[] = {
  NSPAIR(_ZN8S19031C9C1Ev),
  NSPAIR(_ZN8S19031C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S19031C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19031C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C9[];
extern void _ZN8S19031C9D1Ev();
extern void _ZN8S19031C9D0Ev();
static  VTBL_ENTRY vtc_S19031C9[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&_ZN8S19031C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S19031C9[];
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C9[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
static  VTT_ENTRY vtt_S19031C9[] = {
  {&(_ZTV8S19031C9[7]),  7,9},
  {&(_ZTV8S19031C9[7]),  7,9},
  {&(_tg__ZTV8S19031C7__8S19031C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19031C9[];
extern  VTBL_ENTRY _ZTV8S19031C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C9[];
Class_Descriptor cd_S19031C9 = {  "S19031C9", // class name
  bases_S19031C9, 5,
  &(vtc_S19031C9[0]), // expected_vtbl_contents
  &(vtt_S19031C9[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S19031C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19031C9),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19031C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C3  : S2265C38 , virtual S19031C5 , virtual S19031C7 , virtual S19031C8 , virtual S19031C9 {
  long s19031c3f0;
  virtual  ~S19031C3(); // _ZN8S19031C3D2Ev
  S19031C3(); // tgen
};
//SIG(-1 S19031C3) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S19031C3 ::~S19031C3(){ note_dtor("S19031C3", this);}
S19031C3 ::S19031C3(){ note_ctor("S19031C3", this);} // tgen

static void Test_S19031C3()
{
  extern Class_Descriptor cd_S19031C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S19031C3, buf);
    S19031C3 *dp, &lv = *(dp=new (buf) S19031C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S19031C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C3)");
    /*is_ambiguous_... S19031C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S19031C3");
    /*is_ambiguous_... S19031C3::S19031C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(16,8), "S19031C3");
    /*is_ambiguous_... S19031C3::S19031C5 */ AMB_check_base_class_offset(lv, (S19031C5*), ABISELECT(16,8), "S19031C3");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(16,8), "S19031C3");
    check_base_class_offset(lv, (S19031C5*)(S19031C9*), ABISELECT(16,8), "S19031C3");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(40,20), "S19031C3");
    /*is_ambiguous_... S19031C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C9*), ABISELECT(40,20), "S19031C3");
    check_base_class_offset(lv, (S19031C7*), 0, "S19031C3");
    check_base_class_offset(lv, (S19031C7*)(S19031C9*), 0, "S19031C3");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C8*), ABISELECT(48,24), "S19031C3");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*)(S19031C8*), ABISELECT(56,28), "S19031C3");
    check_base_class_offset(lv, (S19031C5*)(S19031C8*), ABISELECT(56,28), "S19031C3");
    check_base_class_offset(lv, (S19031C8*), ABISELECT(48,24), "S19031C3");
    check_base_class_offset(lv, (S2265C38*)(S19031C9*), ABISELECT(124,80), "S19031C3");
    check_base_class_offset(lv, (S19031C9*), ABISELECT(80,40), "S19031C3");
    check_field_offset(lv, s19031c3f0, ABISELECT(8,4), "S19031C3.s19031c3f0");
    test_class_info(&lv, &cd_S19031C3);
    dp->~S19031C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C3(Test_S19031C3, "S19031C3", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S19031C3C1Ev();
extern void _ZN8S19031C3D2Ev();
Name_Map name_map_S19031C3[] = {
  NSPAIR(_ZN8S19031C3C1Ev),
  NSPAIR(_ZN8S19031C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C8;
extern VTBL_ENTRY _ZTI8S19031C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19031C9;
extern VTBL_ENTRY _ZTI8S19031C9[];
extern  VTBL_ENTRY _ZTV8S19031C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C9[];
static Base_Class bases_S19031C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19031C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19031C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19031C9,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C3[];
extern void _ZN8S19031C3D1Ev();
extern void _ZN8S19031C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19031C3D1Ev,_ZThn40_N8S19031C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19031C3D0Ev,_ZThn40_N8S19031C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19031C3[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C3[0]),
  (VTBL_ENTRY)&_ZN8S19031C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C3D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19031C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19031C3[];
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C3[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev)();
extern void _ZN8S19031C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev)();
extern void _ZN8S19031C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C9__8S19031C3[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C9__8S19031C3[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev),
};
static  VTT_ENTRY vtt_S19031C3[] = {
  {&(_ZTV8S19031C3[9]),  9,20},
  {&(_ZTV8S19031C3[9]),  9,20},
  {&(_ZTV8S19031C3[18]),  18,20},
  {&(_tg__ZTV8S19031C7__8S19031C3[4]),  4,6},
  {&(_tg__ZTV8S19031C9__8S19031C3[7]),  7,9},
  {&(_tg__ZTV8S19031C7__8S19031C9__8S19031C3[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19031C3[];
extern  VTBL_ENTRY _ZTV8S19031C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C3[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19031C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19031C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C3D0Ev,_ZThn40_N8S19031C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C3D1Ev,_ZThn40_N8S19031C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19031C3 = {  "S19031C3", // class name
  bases_S19031C3, 11,
  &(vtc_S19031C3[0]), // expected_vtbl_contents
  &(vtt_S19031C3[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S19031C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19031C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19031C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C2  : S19031C3 {
  virtual  ~S19031C2(); // _ZN8S19031C2D2Ev
  S19031C2(); // tgen
};
//SIG(-1 S19031C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ m Fp} Fp[2]} VBC6{ VBC5 VBC4 vd} VBC7{ BC5 BC4} VBC8{ VBC4 VBC5 VBC6 VBC3 vd Fi[9]} vd Fl} vd}


 S19031C2 ::~S19031C2(){ note_dtor("S19031C2", this);}
S19031C2 ::S19031C2(){ note_ctor("S19031C2", this);} // tgen

static void Test_S19031C2()
{
  extern Class_Descriptor cd_S19031C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S19031C2, buf);
    S19031C2 *dp, &lv = *(dp=new (buf) S19031C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S19031C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C2)");
    /*is_ambiguous_... S19031C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19031C3*), 0, "S19031C2");
    /*is_ambiguous_... S19031C2::S19031C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(16,8), "S19031C2");
    /*is_ambiguous_... S19031C3::S19031C5 */ AMB_check_base_class_offset(lv, (S19031C5*)(S19031C3*), ABISELECT(16,8), "S19031C2");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(16,8), "S19031C2");
    check_base_class_offset(lv, (S19031C5*)(S19031C9*), ABISELECT(16,8), "S19031C2");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(40,20), "S19031C2");
    /*is_ambiguous_... S19031C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C9*), ABISELECT(40,20), "S19031C2");
    check_base_class_offset(lv, (S19031C7*)(S19031C3*), 0, "S19031C2");
    check_base_class_offset(lv, (S19031C7*)(S19031C9*), 0, "S19031C2");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C8*), ABISELECT(48,24), "S19031C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*)(S19031C8*), ABISELECT(56,28), "S19031C2");
    check_base_class_offset(lv, (S19031C5*)(S19031C8*), ABISELECT(56,28), "S19031C2");
    check_base_class_offset(lv, (S19031C8*)(S19031C3*), ABISELECT(48,24), "S19031C2");
    check_base_class_offset(lv, (S2265C38*)(S19031C9*), ABISELECT(124,80), "S19031C2");
    check_base_class_offset(lv, (S19031C9*)(S19031C3*), ABISELECT(80,40), "S19031C2");
    check_base_class_offset(lv, (S19031C3*), 0, "S19031C2");
    test_class_info(&lv, &cd_S19031C2);
    dp->~S19031C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C2(Test_S19031C2, "S19031C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S19031C2C1Ev();
extern void _ZN8S19031C2D2Ev();
Name_Map name_map_S19031C2[] = {
  NSPAIR(_ZN8S19031C2C1Ev),
  NSPAIR(_ZN8S19031C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C8;
extern VTBL_ENTRY _ZTI8S19031C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19031C9;
extern VTBL_ENTRY _ZTI8S19031C9[];
extern  VTBL_ENTRY _ZTV8S19031C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C9[];
extern Class_Descriptor cd_S19031C3;
extern VTBL_ENTRY _ZTI8S19031C3[];
extern  VTBL_ENTRY _ZTV8S19031C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C3[];
static Base_Class bases_S19031C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19031C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19031C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19031C9,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19031C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C2[];
extern void _ZN8S19031C2D1Ev();
extern void _ZN8S19031C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19031C2D1Ev,_ZThn40_N8S19031C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19031C2D0Ev,_ZThn40_N8S19031C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19031C2[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C2[0]),
  (VTBL_ENTRY)&_ZN8S19031C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C2D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19031C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19031C2[];
extern void _ZN8S19031C3D1Ev();
extern void _ZN8S19031C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C3__8S19031C2[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C3[0]),
  (VTBL_ENTRY)&_ZN8S19031C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19031C3D1Ev,_ZThn40_N8S19031C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19031C3D0Ev,_ZThn40_N8S19031C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C9__8S19031C3__8S19031C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19031C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev),
};
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C2[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev)();
extern void _ZN8S19031C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev)();
extern void _ZN8S19031C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C9__8S19031C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C9__8S19031C2[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev),
};
static  VTT_ENTRY vtt_S19031C2[] = {
  {&(_ZTV8S19031C2[9]),  9,20},
  {&(_tg__ZTV8S19031C3__8S19031C2[9]),  9,11},
  {&(_tg__ZTV8S19031C3__8S19031C2[9]),  9,11},
  {&(_tg__ZTV8S19031C9__8S19031C3__8S19031C2[7]),  7,9},
  {&(_ZTV8S19031C2[9]),  9,20},
  {&(_ZTV8S19031C2[18]),  18,20},
  {&(_tg__ZTV8S19031C7__8S19031C2[4]),  4,6},
  {&(_tg__ZTV8S19031C9__8S19031C2[7]),  7,9},
  {&(_tg__ZTV8S19031C7__8S19031C9__8S19031C2[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19031C2[];
extern  VTBL_ENTRY _ZTV8S19031C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C2[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19031C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19031C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C3D0Ev,_ZThn40_N8S19031C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C3D1Ev,_ZThn40_N8S19031C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C2D0Ev,_ZThn40_N8S19031C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C2D1Ev,_ZThn40_N8S19031C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19031C2 = {  "S19031C2", // class name
  bases_S19031C2, 12,
  &(vtc_S19031C2[0]), // expected_vtbl_contents
  &(vtt_S19031C2[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S19031C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19031C2),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19031C2),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C12  : virtual S5217C60_nt , S2265C38 , virtual S19031C8 , virtual S19031C7 {
  ~S19031C12(); // tgen
  S19031C12(); // tgen
};
//SIG(-1 S19031C12) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S19031C12 ::~S19031C12(){ note_dtor("S19031C12", this);} // tgen
S19031C12 ::S19031C12(){ note_ctor("S19031C12", this);} // tgen

static void Test_S19031C12()
{
  extern Class_Descriptor cd_S19031C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19031C12, buf);
    S19031C12 *dp, &lv = *(dp=new (buf) S19031C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19031C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C12)");
    /*is_ambiguous_... S19031C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S19031C12");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(8,4), "S19031C12");
    check_base_class_offset(lv, (S2265C38*), 0, "S19031C12");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C8*), ABISELECT(16,8), "S19031C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*)(S19031C8*), ABISELECT(24,12), "S19031C12");
    check_base_class_offset(lv, (S19031C5*)(S19031C8*), ABISELECT(24,12), "S19031C12");
    check_base_class_offset(lv, (S19031C8*), ABISELECT(16,8), "S19031C12");
    /*is_ambiguous_... S19031C12::S19031C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(48,24), "S19031C12");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(48,24), "S19031C12");
    check_base_class_offset(lv, (S19031C7*), 0, "S19031C12");
    test_class_info(&lv, &cd_S19031C12);
    dp->~S19031C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C12(Test_S19031C12, "S19031C12", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S19031C12C1Ev();
extern void _ZN9S19031C12D1Ev();
Name_Map name_map_S19031C12[] = {
  NSPAIR(_ZN9S19031C12C1Ev),
  NSPAIR(_ZN9S19031C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C8;
extern VTBL_ENTRY _ZTI8S19031C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
static Base_Class bases_S19031C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19031C8,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19031C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19031C12[];
extern void _ZN9S19031C12D1Ev();
extern void _ZN9S19031C12D0Ev();
static  VTBL_ENTRY vtc_S19031C12[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C12[0]),
  (VTBL_ENTRY)&_ZN9S19031C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19031C12D0Ev,
};
extern VTBL_ENTRY _ZTV9S19031C12[];
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__9S19031C12[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
static  VTT_ENTRY vtt_S19031C12[] = {
  {&(_ZTV9S19031C12[7]),  7,9},
  {&(_ZTV9S19031C12[7]),  7,9},
  {&(_tg__ZTV8S19031C7__9S19031C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19031C12[];
extern  VTBL_ENTRY _ZTV9S19031C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C12[];
Class_Descriptor cd_S19031C12 = {  "S19031C12", // class name
  bases_S19031C12, 9,
  &(vtc_S19031C12[0]), // expected_vtbl_contents
  &(vtt_S19031C12[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S19031C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19031C12),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19031C12),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C11  : virtual S19031C12 {
  ::S19031C7 s19031c11f0;
  ~S19031C11(); // tgen
  S19031C11(); // tgen
};
//SIG(-1 S19031C11) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S19031C11 ::~S19031C11(){ note_dtor("S19031C11", this);} // tgen
S19031C11 ::S19031C11(){ note_ctor("S19031C11", this);} // tgen

static void Test_S19031C11()
{
  extern Class_Descriptor cd_S19031C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S19031C11, buf);
    S19031C11 *dp, &lv = *(dp=new (buf) S19031C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S19031C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C11)");
    /*is_ambiguous_... S19031C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C12*), ABISELECT(48,24), "S19031C11");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(48,24), "S19031C11");
    check_base_class_offset(lv, (S2265C38*)(S19031C12*), 0, "S19031C11");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C8*), ABISELECT(56,28), "S19031C11");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*)(S19031C8*), ABISELECT(64,32), "S19031C11");
    check_base_class_offset(lv, (S19031C5*)(S19031C8*), ABISELECT(64,32), "S19031C11");
    check_base_class_offset(lv, (S19031C8*)(S19031C12*), ABISELECT(56,28), "S19031C11");
    /*is_ambiguous_... S19031C11::S19031C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(88,44), "S19031C11");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(88,44), "S19031C11");
    check_base_class_offset(lv, (S19031C7*)(S19031C12*), 0, "S19031C11");
    check_base_class_offset(lv, (S19031C12*), 0, "S19031C11");
    check_field_offset(lv, s19031c11f0, ABISELECT(8,4), "S19031C11.s19031c11f0");
    test_class_info(&lv, &cd_S19031C11);
    dp->~S19031C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C11(Test_S19031C11, "S19031C11", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN9S19031C11C1Ev();
extern void _ZN9S19031C11D1Ev();
Name_Map name_map_S19031C11[] = {
  NSPAIR(_ZN9S19031C11C1Ev),
  NSPAIR(_ZN9S19031C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C8;
extern VTBL_ENTRY _ZTI8S19031C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
extern Class_Descriptor cd_S19031C12;
extern VTBL_ENTRY _ZTI9S19031C12[];
extern  VTBL_ENTRY _ZTV9S19031C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C12[];
static Base_Class bases_S19031C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19031C8,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19031C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19031C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19031C11[];
extern void _ZN9S19031C11D1Ev();
extern void _ZN9S19031C11D0Ev();
static  VTBL_ENTRY vtc_S19031C11[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C11[0]),
  (VTBL_ENTRY)&_ZN9S19031C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19031C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S19031C11[];
extern void ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev)();
extern void _ZN9S19031C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev)();
extern void _ZN9S19031C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19031C12__9S19031C11[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev),
};
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__9S19031C11[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
static  VTT_ENTRY vtt_S19031C11[] = {
  {&(_ZTV9S19031C11[8]),  8,10},
  {&(_ZTV9S19031C11[8]),  8,10},
  {&(_ZTV9S19031C11[8]),  8,10},
  {&(_tg__ZTV9S19031C12__9S19031C11[7]),  7,9},
  {&(_tg__ZTV9S19031C12__9S19031C11[7]),  7,9},
  {&(_tg__ZTV8S19031C7__9S19031C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19031C11[];
extern  VTBL_ENTRY _ZTV9S19031C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C11[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S19031C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S19031C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19031C11 = {  "S19031C11", // class name
  bases_S19031C11, 10,
  &(vtc_S19031C11[0]), // expected_vtbl_contents
  &(vtt_S19031C11[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI9S19031C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19031C11),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19031C11),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C10  : S19031C11 {
  int s19031c10f0;
  virtual  ~S19031C10(); // _ZN9S19031C10D2Ev
  S19031C10(); // tgen
};
//SIG(-1 S19031C10) C1{ BC2{ VBC3{ VBC4{ m Fp} BC5{ m} VBC6{ BC4 BC7{ BC4 Fp[2]}} VBC8{ VBC4 VBC7 vd}} FC8} vd Fi}


 S19031C10 ::~S19031C10(){ note_dtor("S19031C10", this);}
S19031C10 ::S19031C10(){ note_ctor("S19031C10", this);} // tgen

static void Test_S19031C10()
{
  extern Class_Descriptor cd_S19031C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S19031C10, buf);
    S19031C10 *dp, &lv = *(dp=new (buf) S19031C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S19031C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C10)");
    /*is_ambiguous_... S19031C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C12*), ABISELECT(56,28), "S19031C10");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(56,28), "S19031C10");
    check_base_class_offset(lv, (S2265C38*)(S19031C12*), 0, "S19031C10");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C8*), ABISELECT(64,32), "S19031C10");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*)(S19031C8*), ABISELECT(72,36), "S19031C10");
    check_base_class_offset(lv, (S19031C5*)(S19031C8*), ABISELECT(72,36), "S19031C10");
    check_base_class_offset(lv, (S19031C8*)(S19031C12*), ABISELECT(64,32), "S19031C10");
    /*is_ambiguous_... S19031C10::S19031C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(96,48), "S19031C10");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(96,48), "S19031C10");
    check_base_class_offset(lv, (S19031C7*)(S19031C12*), 0, "S19031C10");
    check_base_class_offset(lv, (S19031C12*)(S19031C11*), 0, "S19031C10");
    check_base_class_offset(lv, (S19031C11*), 0, "S19031C10");
    check_field_offset(lv, s19031c10f0, ABISELECT(48,24), "S19031C10.s19031c10f0");
    test_class_info(&lv, &cd_S19031C10);
    dp->~S19031C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C10(Test_S19031C10, "S19031C10", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN9S19031C10C1Ev();
extern void _ZN9S19031C10D2Ev();
Name_Map name_map_S19031C10[] = {
  NSPAIR(_ZN9S19031C10C1Ev),
  NSPAIR(_ZN9S19031C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C8;
extern VTBL_ENTRY _ZTI8S19031C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
extern Class_Descriptor cd_S19031C12;
extern VTBL_ENTRY _ZTI9S19031C12[];
extern  VTBL_ENTRY _ZTV9S19031C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C12[];
extern Class_Descriptor cd_S19031C11;
extern VTBL_ENTRY _ZTI9S19031C11[];
extern  VTBL_ENTRY _ZTV9S19031C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C11[];
static Base_Class bases_S19031C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19031C8,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19031C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19031C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19031C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19031C10[];
extern void _ZN9S19031C10D1Ev();
extern void _ZN9S19031C10D0Ev();
static  VTBL_ENTRY vtc_S19031C10[] = {
  0,
  0,
  ABISELECT(64,32),
  0,
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C10[0]),
  (VTBL_ENTRY)&_ZN9S19031C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19031C10D0Ev,
};
extern VTBL_ENTRY _ZTV9S19031C10[];
extern void _ZN9S19031C11D1Ev();
extern void _ZN9S19031C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19031C11__9S19031C10[] = {
  0,
  0,
  ABISELECT(64,32),
  0,
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C11[0]),
  (VTBL_ENTRY)&_ZN9S19031C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19031C11D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev)();
extern void _ZN9S19031C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev)();
extern void _ZN9S19031C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19031C12__9S19031C10[] = {
  0,
  ABISELECT(64,32),
  0,
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev),
};
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__9S19031C10[] = {
  ABISELECT(96,48),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
static  VTT_ENTRY vtt_S19031C10[] = {
  {&(_ZTV9S19031C10[8]),  8,10},
  {&(_tg__ZTV9S19031C11__9S19031C10[8]),  8,10},
  {&(_tg__ZTV9S19031C11__9S19031C10[8]),  8,10},
  {&(_tg__ZTV9S19031C11__9S19031C10[8]),  8,10},
  {&(_ZTV9S19031C10[8]),  8,10},
  {&(_ZTV9S19031C10[8]),  8,10},
  {&(_tg__ZTV9S19031C12__9S19031C10[7]),  7,9},
  {&(_tg__ZTV9S19031C12__9S19031C10[7]),  7,9},
  {&(_tg__ZTV8S19031C7__9S19031C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19031C10[];
extern  VTBL_ENTRY _ZTV9S19031C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C10[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev), // 
  (VTBL_ENTRY)_ZN9S19031C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev), // 
  (VTBL_ENTRY)_ZN9S19031C12D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19031C10 = {  "S19031C10", // class name
  bases_S19031C10, 11,
  &(vtc_S19031C10[0]), // expected_vtbl_contents
  &(vtt_S19031C10[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI9S19031C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19031C10),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19031C10),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19031C1  : virtual S19031C2 , S19031C10 {
  ::S20634C2 s19031c1f0;
  int s19031c1f1;
  ~S19031C1(); // tgen
  S19031C1(); // tgen
};
//SIG(1 S19031C1) C1{ VBC2{ BC3{ BC4{ m} VBC5{ BC6{ m Fp} Fp[2]} VBC7{ VBC6 VBC5 vd} VBC8{ BC6 BC5} VBC9{ VBC5 VBC6 VBC7 VBC4 vd Fi[9]} vd Fl} vd} BC10{ BC11{ VBC12{ VBC6 BC4 VBC8 VBC7} FC7} vd Fi} FC13{ VBC14{ m Fi[5]} Fp} Fi}


S19031C1 ::~S19031C1(){ note_dtor("S19031C1", this);} // tgen
S19031C1 ::S19031C1(){ note_ctor("S19031C1", this);} // tgen

static void Test_S19031C1()
{
  extern Class_Descriptor cd_S19031C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,37)];
    init_test(&cd_S19031C1, buf);
    S19031C1 *dp, &lv = *(dp=new (buf) S19031C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,144), "sizeof(S19031C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19031C1)");
    /*is_ambiguous_... S19031C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19031C3*)(S19031C2*), ABISELECT(104,60), "S19031C1");
    /*is_ambiguous_... S19031C1::S19031C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*), ABISELECT(120,68), "S19031C1");
    /*is_ambiguous_... S19031C3::S19031C5 */ AMB_check_base_class_offset(lv, (S19031C5*)(S19031C3*)(S19031C2*), ABISELECT(120,68), "S19031C1");
    check_base_class_offset(lv, (S19031C5*)(S19031C7*), ABISELECT(120,68), "S19031C1");
    check_base_class_offset(lv, (S19031C5*)(S19031C9*), ABISELECT(120,68), "S19031C1");
    /*is_ambiguous_... S19031C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C7*), ABISELECT(144,80), "S19031C1");
    /*is_ambiguous_... S19031C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C9*), ABISELECT(144,80), "S19031C1");
    /*is_ambiguous_... S19031C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C12*), ABISELECT(144,80), "S19031C1");
    check_base_class_offset(lv, (S19031C7*)(S19031C3*)(S19031C2*), ABISELECT(104,60), "S19031C1");
    check_base_class_offset(lv, (S19031C7*)(S19031C9*), ABISELECT(104,60), "S19031C1");
    check_base_class_offset(lv, (S19031C7*)(S19031C12*), ABISELECT(104,60), "S19031C1");
    /*is_ambiguous_... S19031C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19031C8*), ABISELECT(152,84), "S19031C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S19031C5*)(S19031C8*), ABISELECT(160,88), "S19031C1");
    check_base_class_offset(lv, (S19031C5*)(S19031C8*), ABISELECT(160,88), "S19031C1");
    check_base_class_offset(lv, (S19031C8*)(S19031C3*)(S19031C2*), ABISELECT(152,84), "S19031C1");
    check_base_class_offset(lv, (S19031C8*)(S19031C12*), ABISELECT(152,84), "S19031C1");
    check_base_class_offset(lv, (S2265C38*)(S19031C9*), ABISELECT(228,140), "S19031C1");
    check_base_class_offset(lv, (S19031C9*)(S19031C3*)(S19031C2*), ABISELECT(184,100), "S19031C1");
    check_base_class_offset(lv, (S19031C3*)(S19031C2*), ABISELECT(104,60), "S19031C1");
    check_base_class_offset(lv, (S19031C2*), ABISELECT(104,60), "S19031C1");
    check_base_class_offset(lv, (S2265C38*)(S19031C12*), 0, "S19031C1");
    check_base_class_offset(lv, (S19031C12*)(S19031C11*)(S19031C10*), 0, "S19031C1");
    check_base_class_offset(lv, (S19031C11*)(S19031C10*), 0, "S19031C1");
    check_base_class_offset(lv, (S19031C10*), 0, "S19031C1");
    check_field_offset(lv, s19031c1f0, ABISELECT(56,28), "S19031C1.s19031c1f0");
    check_field_offset(lv, s19031c1f1, ABISELECT(96,56), "S19031C1.s19031c1f1");
    test_class_info(&lv, &cd_S19031C1);
    dp->~S19031C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19031C1(Test_S19031C1, "S19031C1", ABISELECT(232,144));

#else // __cplusplus

extern void _ZN8S19031C1C1Ev();
extern void _ZN8S19031C1D1Ev();
Name_Map name_map_S19031C1[] = {
  NSPAIR(_ZN8S19031C1C1Ev),
  NSPAIR(_ZN8S19031C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C7;
extern VTBL_ENTRY _ZTI8S19031C7[];
extern  VTBL_ENTRY _ZTV8S19031C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19031C5;
extern VTBL_ENTRY _ZTI8S19031C5[];
extern Class_Descriptor cd_S19031C8;
extern VTBL_ENTRY _ZTI8S19031C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19031C9;
extern VTBL_ENTRY _ZTI8S19031C9[];
extern  VTBL_ENTRY _ZTV8S19031C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C9[];
extern Class_Descriptor cd_S19031C3;
extern VTBL_ENTRY _ZTI8S19031C3[];
extern  VTBL_ENTRY _ZTV8S19031C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C3[];
extern Class_Descriptor cd_S19031C2;
extern VTBL_ENTRY _ZTI8S19031C2[];
extern  VTBL_ENTRY _ZTV8S19031C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19031C12;
extern VTBL_ENTRY _ZTI9S19031C12[];
extern  VTBL_ENTRY _ZTV9S19031C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C12[];
extern Class_Descriptor cd_S19031C11;
extern VTBL_ENTRY _ZTI9S19031C11[];
extern  VTBL_ENTRY _ZTV9S19031C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C11[];
extern Class_Descriptor cd_S19031C10;
extern VTBL_ENTRY _ZTI9S19031C10[];
extern  VTBL_ENTRY _ZTV9S19031C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19031C10[];
static Base_Class bases_S19031C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(144,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19031C7,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19031C5,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19031C8,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(228,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19031C9,    ABISELECT(184,100), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19031C3,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19031C2,    ABISELECT(104,60), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19031C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19031C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19031C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19031C1[];
extern void ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev)();
extern void _ZN8S19031C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev)();
extern void _ZN8S19031C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S19031C1D1Ev,_ZThn60_N8S19031C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S19031C1D0Ev,_ZThn60_N8S19031C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19031C1D1Ev,_ZThn100_N8S19031C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S19031C1D0Ev,_ZThn100_N8S19031C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19031C1[] = {
  ABISELECT(228,140),
  ABISELECT(184,100),
  ABISELECT(104,60),
  0,
  ABISELECT(104,60),
  ABISELECT(152,84),
  0,
  ABISELECT(120,68),
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev),
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  ABISELECT(-104,-60),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19031C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev),
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-184,-100),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-184,-100),
  (VTBL_ENTRY)&(_ZTI8S19031C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19031C1[];
extern void ABISELECT(_ZTv0_n40_N9S19031C10D1Ev,_ZTv0_n20_N9S19031C10D1Ev)();
extern void _ZN9S19031C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C10D0Ev,_ZTv0_n20_N9S19031C10D0Ev)();
extern void _ZN9S19031C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19031C10__8S19031C1[] = {
  0,
  ABISELECT(104,60),
  ABISELECT(152,84),
  0,
  ABISELECT(120,68),
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C10D1Ev,_ZTv0_n20_N9S19031C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C10D0Ev,_ZTv0_n20_N9S19031C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19031C11D1Ev,_ZTv0_n20_N9S19031C11D1Ev)();
extern void _ZN9S19031C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C11D0Ev,_ZTv0_n20_N9S19031C11D0Ev)();
extern void _ZN9S19031C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19031C119S19031C10__8S19031C1[] = {
  0,
  ABISELECT(104,60),
  ABISELECT(152,84),
  0,
  ABISELECT(120,68),
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C11D1Ev,_ZTv0_n20_N9S19031C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C11D0Ev,_ZTv0_n20_N9S19031C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19031C11D1Ev,_ZTv0_n20_N9S19031C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S19031C11D1Ev,_ZThn60_N9S19031C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C11D0Ev,_ZTv0_n20_N9S19031C11D0Ev)();
extern void ABISELECT(_ZThn104_N9S19031C11D0Ev,_ZThn60_N9S19031C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C7__9S19031C119S19031C10__8S19031C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19031C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C11D1Ev,_ZTv0_n20_N9S19031C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C11D0Ev,_ZTv0_n20_N9S19031C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19031C10D1Ev,_ZTv0_n20_N9S19031C10D1Ev)();
extern void ABISELECT(_ZThn104_N9S19031C10D1Ev,_ZThn60_N9S19031C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C10D0Ev,_ZTv0_n20_N9S19031C10D0Ev)();
extern void ABISELECT(_ZThn104_N9S19031C10D0Ev,_ZThn60_N9S19031C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C7__9S19031C10__8S19031C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19031C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C10D1Ev,_ZTv0_n20_N9S19031C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C10D0Ev,_ZTv0_n20_N9S19031C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev)();
extern void _ZN8S19031C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev)();
extern void _ZN8S19031C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C2__8S19031C1[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev)();
extern void _ZN8S19031C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev)();
extern void _ZN8S19031C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C38S19031C2__8S19031C1[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19031C3D1Ev,_ZThn40_N8S19031C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19031C3D0Ev,_ZThn40_N8S19031C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C9__8S19031C38S19031C2__8S19031C1[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19031C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19031C2D1Ev,_ZThn40_N8S19031C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19031C2D0Ev,_ZThn40_N8S19031C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C9__8S19031C2__8S19031C1[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19031C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev),
};
extern void _ZN8S19031C7D1Ev();
extern void _ZN8S19031C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C1[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C7[0]),
  (VTBL_ENTRY)&_ZN8S19031C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19031C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev)();
extern void _ZN8S19031C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev)();
extern void _ZN8S19031C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C9__8S19031C1[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19031C7__8S19031C9__8S19031C1[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19031C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev)();
extern void _ZN9S19031C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev)();
extern void _ZN9S19031C12D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19031C12__8S19031C1[] = {
  ABISELECT(104,60),
  ABISELECT(152,84),
  0,
  ABISELECT(120,68),
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19031C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev)();
extern void ABISELECT(_ZThn104_N9S19031C12D1Ev,_ZThn60_N9S19031C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev)();
extern void ABISELECT(_ZThn104_N9S19031C12D0Ev,_ZThn60_N9S19031C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19031C7__9S19031C12__8S19031C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19031C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev),
};
static  VTT_ENTRY vtt_S19031C1[] = {
  {&(_ZTV8S19031C1[11]),  11,33},
  {&(_tg__ZTV9S19031C10__8S19031C1[8]),  8,10},
  {&(_tg__ZTV9S19031C119S19031C10__8S19031C1[8]),  8,10},
  {&(_tg__ZTV9S19031C119S19031C10__8S19031C1[8]),  8,10},
  {&(_tg__ZTV8S19031C7__9S19031C119S19031C10__8S19031C1[5]),  5,7},
  {&(_tg__ZTV9S19031C10__8S19031C1[8]),  8,10},
  {&(_tg__ZTV8S19031C7__9S19031C10__8S19031C1[5]),  5,7},
  {&(_ZTV8S19031C1[22]),  22,33},
  {&(_ZTV8S19031C1[22]),  22,33},
  {&(_ZTV8S19031C1[31]),  31,33},
  {&(_ZTV8S19031C1[11]),  11,33},
  {&(_tg__ZTV8S19031C2__8S19031C1[9]),  9,11},
  {&(_tg__ZTV8S19031C38S19031C2__8S19031C1[9]),  9,11},
  {&(_tg__ZTV8S19031C38S19031C2__8S19031C1[9]),  9,11},
  {&(_tg__ZTV8S19031C9__8S19031C38S19031C2__8S19031C1[7]),  7,9},
  {&(_tg__ZTV8S19031C2__8S19031C1[9]),  9,11},
  {&(_tg__ZTV8S19031C9__8S19031C2__8S19031C1[7]),  7,9},
  {&(_tg__ZTV8S19031C7__8S19031C1[4]),  4,6},
  {&(_tg__ZTV8S19031C9__8S19031C1[7]),  7,9},
  {&(_tg__ZTV8S19031C7__8S19031C9__8S19031C1[5]),  5,7},
  {&(_tg__ZTV9S19031C12__8S19031C1[7]),  7,9},
  {&(_tg__ZTV8S19031C7__9S19031C12__8S19031C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19031C1[];
extern  VTBL_ENTRY _ZTV8S19031C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19031C1[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C12D0Ev,_ZTv0_n20_N9S19031C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19031C12D0Ev,_ZThn60_N9S19031C12D0Ev),
  (VTBL_ENTRY)_ZN9S19031C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C12D1Ev,_ZTv0_n20_N9S19031C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19031C12D1Ev,_ZThn60_N9S19031C12D1Ev),
  (VTBL_ENTRY)_ZN9S19031C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C9D0Ev,_ZTv0_n20_N8S19031C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19031C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C9D1Ev,_ZTv0_n20_N8S19031C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19031C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C3D0Ev,_ZTv0_n20_N8S19031C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C3D0Ev,_ZThn40_N8S19031C3D0Ev),
  (VTBL_ENTRY)_ZN8S19031C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C3D1Ev,_ZTv0_n20_N8S19031C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C3D1Ev,_ZThn40_N8S19031C3D1Ev),
  (VTBL_ENTRY)_ZN8S19031C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C2D0Ev,_ZTv0_n20_N8S19031C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C2D0Ev,_ZThn40_N8S19031C2D0Ev),
  (VTBL_ENTRY)_ZN8S19031C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C2D1Ev,_ZTv0_n20_N8S19031C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19031C2D1Ev,_ZThn40_N8S19031C2D1Ev),
  (VTBL_ENTRY)_ZN8S19031C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C11D0Ev,_ZTv0_n20_N9S19031C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19031C11D0Ev,_ZThn60_N9S19031C11D0Ev),
  (VTBL_ENTRY)_ZN9S19031C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C11D1Ev,_ZTv0_n20_N9S19031C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19031C11D1Ev,_ZThn60_N9S19031C11D1Ev),
  (VTBL_ENTRY)_ZN9S19031C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C10D0Ev,_ZTv0_n20_N9S19031C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19031C10D0Ev,_ZThn60_N9S19031C10D0Ev),
  (VTBL_ENTRY)_ZN9S19031C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19031C10D1Ev,_ZTv0_n20_N9S19031C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19031C10D1Ev,_ZThn60_N9S19031C10D1Ev),
  (VTBL_ENTRY)_ZN9S19031C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C1D0Ev,_ZTv0_n20_N8S19031C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19031C1D0Ev,_ZThn100_N8S19031C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19031C1D0Ev,_ZThn60_N8S19031C1D0Ev),
  (VTBL_ENTRY)_ZN8S19031C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19031C1D1Ev,_ZTv0_n20_N8S19031C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19031C1D1Ev,_ZThn100_N8S19031C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19031C1D1Ev,_ZThn60_N8S19031C1D1Ev),
  (VTBL_ENTRY)_ZN8S19031C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19031C1 = {  "S19031C1", // class name
  bases_S19031C1, 17,
  &(vtc_S19031C1[0]), // expected_vtbl_contents
  &(vtt_S19031C1[0]), // expected_vtt_contents
  ABISELECT(232,144), // object size
  NSPAIRA(_ZTI8S19031C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19031C1),33, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19031C1),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C2  : S5217C60_nt {
  void *s19187c2f0[2];
};
//SIG(-1 S19187C2) C1{ BC2{ m Fp} Fp[2]}



static void Test_S19187C2()
{
  extern Class_Descriptor cd_S19187C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19187C2, buf);
    S19187C2 &lv = *(new (buf) S19187C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19187C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C2)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S19187C2");
    check_field_offset(lv, s19187c2f0, ABISELECT(8,4), "S19187C2.s19187c2f0");
    test_class_info(&lv, &cd_S19187C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C2(Test_S19187C2, "S19187C2", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S19187C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19187C2[];
Class_Descriptor cd_S19187C2 = {  "S19187C2", // class name
  bases_S19187C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19187C2),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C6  : virtual S20634C3_nt {
  void *s19187c6f0;
  ~S19187C6(); // tgen
  S19187C6(); // tgen
};
//SIG(-1 S19187C6) C1{ VBC2{ m Fi[5]} Fp}


S19187C6 ::~S19187C6(){ note_dtor("S19187C6", this);} // tgen
S19187C6 ::S19187C6(){ note_ctor("S19187C6", this);} // tgen

static void Test_S19187C6()
{
  extern Class_Descriptor cd_S19187C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19187C6, buf);
    S19187C6 *dp, &lv = *(dp=new (buf) S19187C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19187C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C6)");
    check_base_class_offset(lv, (S20634C3_nt*), ABISELECT(16,8), "S19187C6");
    check_field_offset(lv, s19187c6f0, ABISELECT(8,4), "S19187C6.s19187c6f0");
    test_class_info(&lv, &cd_S19187C6);
    dp->~S19187C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C6(Test_S19187C6, "S19187C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S19187C6C1Ev();
extern void _ZN8S19187C6D1Ev();
Name_Map name_map_S19187C6[] = {
  NSPAIR(_ZN8S19187C6C1Ev),
  NSPAIR(_ZN8S19187C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
static Base_Class bases_S19187C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19187C6[];
static  VTBL_ENTRY vtc_S19187C6[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C6[0]),
};
extern VTBL_ENTRY _ZTV8S19187C6[];
static  VTT_ENTRY vtt_S19187C6[] = {
  {&(_ZTV8S19187C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19187C6[];
extern  VTBL_ENTRY _ZTV8S19187C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C6[];
Class_Descriptor cd_S19187C6 = {  "S19187C6", // class name
  bases_S19187C6, 1,
  &(vtc_S19187C6[0]), // expected_vtbl_contents
  &(vtt_S19187C6[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S19187C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19187C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19187C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C5  : S19187C6 {
  ~S19187C5(); // tgen
  S19187C5(); // tgen
};
//SIG(-1 S19187C5) C1{ BC2{ VBC3{ m Fi[5]} Fp}}


S19187C5 ::~S19187C5(){ note_dtor("S19187C5", this);} // tgen
S19187C5 ::S19187C5(){ note_ctor("S19187C5", this);} // tgen

static void Test_S19187C5()
{
  extern Class_Descriptor cd_S19187C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19187C5, buf);
    S19187C5 *dp, &lv = *(dp=new (buf) S19187C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19187C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C5)");
    check_base_class_offset(lv, (S20634C3_nt*)(S19187C6*), ABISELECT(16,8), "S19187C5");
    check_base_class_offset(lv, (S19187C6*), 0, "S19187C5");
    test_class_info(&lv, &cd_S19187C5);
    dp->~S19187C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C5(Test_S19187C5, "S19187C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S19187C5C1Ev();
extern void _ZN8S19187C5D1Ev();
Name_Map name_map_S19187C5[] = {
  NSPAIR(_ZN8S19187C5C1Ev),
  NSPAIR(_ZN8S19187C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S19187C6;
extern VTBL_ENTRY _ZTI8S19187C6[];
extern  VTBL_ENTRY _ZTV8S19187C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C6[];
static Base_Class bases_S19187C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19187C5[];
static  VTBL_ENTRY vtc_S19187C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C5[0]),
};
extern VTBL_ENTRY _ZTV8S19187C5[];
static  VTBL_ENTRY _tg__ZTV8S19187C6__8S19187C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C6[0]),
};
static  VTT_ENTRY vtt_S19187C5[] = {
  {&(_ZTV8S19187C5[3]),  3,3},
  {&(_tg__ZTV8S19187C6__8S19187C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19187C5[];
extern  VTBL_ENTRY _ZTV8S19187C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C5[];
Class_Descriptor cd_S19187C5 = {  "S19187C5", // class name
  bases_S19187C5, 2,
  &(vtc_S19187C5[0]), // expected_vtbl_contents
  &(vtt_S19187C5[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S19187C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19187C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19187C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C8  : virtual S2265C38 , S2265C28 {
  int s19187c8f0;
  ~S19187C8(); // tgen
  S19187C8(); // tgen
};
//SIG(-1 S19187C8) C1{ VBC2{ m} BC3{ m} Fi}


S19187C8 ::~S19187C8(){ note_dtor("S19187C8", this);} // tgen
S19187C8 ::S19187C8(){ note_ctor("S19187C8", this);} // tgen

static void Test_S19187C8()
{
  extern Class_Descriptor cd_S19187C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19187C8, buf);
    S19187C8 *dp, &lv = *(dp=new (buf) S19187C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19187C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C8)");
    check_base_class_offset(lv, (S2265C38*), 0, "S19187C8");
    check_base_class_offset(lv, (S2265C28*), 0, "S19187C8");
    check_field_offset(lv, s19187c8f0, ABISELECT(8,4), "S19187C8.s19187c8f0");
    test_class_info(&lv, &cd_S19187C8);
    dp->~S19187C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C8(Test_S19187C8, "S19187C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19187C8C1Ev();
extern void _ZN8S19187C8D1Ev();
Name_Map name_map_S19187C8[] = {
  NSPAIR(_ZN8S19187C8C1Ev),
  NSPAIR(_ZN8S19187C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S19187C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19187C8[];
static  VTBL_ENTRY vtc_S19187C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C8[0]),
};
extern VTBL_ENTRY _ZTV8S19187C8[];
static  VTT_ENTRY vtt_S19187C8[] = {
  {&(_ZTV8S19187C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19187C8[];
extern  VTBL_ENTRY _ZTV8S19187C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C8[];
Class_Descriptor cd_S19187C8 = {  "S19187C8", // class name
  bases_S19187C8, 2,
  &(vtc_S19187C8[0]), // expected_vtbl_contents
  &(vtt_S19187C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19187C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19187C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19187C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C12  : virtual S5217C60_nt , virtual S19187C2 {
  virtual  ~S19187C12(); // _ZN9S19187C12D2Ev
  S19187C12(); // tgen
};
//SIG(-1 S19187C12) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S19187C12 ::~S19187C12(){ note_dtor("S19187C12", this);}
S19187C12 ::S19187C12(){ note_ctor("S19187C12", this);} // tgen

static void Test_S19187C12()
{
  extern Class_Descriptor cd_S19187C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19187C12, buf);
    S19187C12 *dp, &lv = *(dp=new (buf) S19187C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19187C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C12)");
    /*is_ambiguous_... S19187C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S19187C12");
    check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*), ABISELECT(16,8), "S19187C12");
    check_base_class_offset(lv, (S19187C2*), ABISELECT(16,8), "S19187C12");
    test_class_info(&lv, &cd_S19187C12);
    dp->~S19187C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C12(Test_S19187C12, "S19187C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19187C12C1Ev();
extern void _ZN9S19187C12D2Ev();
Name_Map name_map_S19187C12[] = {
  NSPAIR(_ZN9S19187C12C1Ev),
  NSPAIR(_ZN9S19187C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
static Base_Class bases_S19187C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19187C12[];
extern void _ZN9S19187C12D1Ev();
extern void _ZN9S19187C12D0Ev();
static  VTBL_ENTRY vtc_S19187C12[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C12[0]),
  (VTBL_ENTRY)&_ZN9S19187C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C12D0Ev,
};
extern VTBL_ENTRY _ZTV9S19187C12[];
static  VTT_ENTRY vtt_S19187C12[] = {
  {&(_ZTV9S19187C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19187C12[];
extern  VTBL_ENTRY _ZTV9S19187C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C12[];
Class_Descriptor cd_S19187C12 = {  "S19187C12", // class name
  bases_S19187C12, 3,
  &(vtc_S19187C12[0]), // expected_vtbl_contents
  &(vtt_S19187C12[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19187C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19187C12),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19187C12),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C11  : virtual S19187C2 , virtual S5217C60_nt , virtual S19187C12 , virtual S2265C38 {
  int s19187c11f0[9];
  virtual  ~S19187C11(); // _ZN9S19187C11D2Ev
  S19187C11(); // tgen
};
//SIG(-1 S19187C11) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S19187C11 ::~S19187C11(){ note_dtor("S19187C11", this);}
S19187C11 ::S19187C11(){ note_ctor("S19187C11", this);} // tgen

static void Test_S19187C11()
{
  extern Class_Descriptor cd_S19187C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S19187C11, buf);
    S19187C11 *dp, &lv = *(dp=new (buf) S19187C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S19187C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C11)");
    check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*), ABISELECT(48,40), "S19187C11");
    check_base_class_offset(lv, (S19187C2*), ABISELECT(48,40), "S19187C11");
    check_base_class_offset(lv, (S19187C2*)(S19187C12*), ABISELECT(48,40), "S19187C11");
    /*is_ambiguous_... S19187C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S19187C11");
    /*is_ambiguous_... S19187C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C12*), ABISELECT(72,52), "S19187C11");
    check_base_class_offset(lv, (S19187C12*), 0, "S19187C11");
    check_base_class_offset(lv, (S2265C38*), 0, "S19187C11");
    check_field_offset(lv, s19187c11f0, ABISELECT(8,4), "S19187C11.s19187c11f0");
    test_class_info(&lv, &cd_S19187C11);
    dp->~S19187C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C11(Test_S19187C11, "S19187C11", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN9S19187C11C1Ev();
extern void _ZN9S19187C11D2Ev();
Name_Map name_map_S19187C11[] = {
  NSPAIR(_ZN9S19187C11C1Ev),
  NSPAIR(_ZN9S19187C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C12;
extern VTBL_ENTRY _ZTI9S19187C12[];
extern  VTBL_ENTRY _ZTV9S19187C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C12[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S19187C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19187C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19187C11[];
extern void _ZN9S19187C11D1Ev();
extern void _ZN9S19187C11D0Ev();
static  VTBL_ENTRY vtc_S19187C11[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C11[0]),
  (VTBL_ENTRY)&_ZN9S19187C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C11D0Ev,
};
extern VTBL_ENTRY _ZTV9S19187C11[];
extern void _ZN9S19187C12D1Ev();
extern void _ZN9S19187C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19187C12__9S19187C11[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C12[0]),
  (VTBL_ENTRY)&_ZN9S19187C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C12D0Ev,
};
static  VTT_ENTRY vtt_S19187C11[] = {
  {&(_ZTV9S19187C11[7]),  7,9},
  {&(_ZTV9S19187C11[7]),  7,9},
  {&(_tg__ZTV9S19187C12__9S19187C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19187C11[];
extern  VTBL_ENTRY _ZTV9S19187C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C11[];
Class_Descriptor cd_S19187C11 = {  "S19187C11", // class name
  bases_S19187C11, 5,
  &(vtc_S19187C11[0]), // expected_vtbl_contents
  &(vtt_S19187C11[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI9S19187C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19187C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19187C11),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C4  : S19187C5 , virtual S19187C8 , virtual S19187C11 {
  ::S19187C11 s19187c4f0;
  virtual  ~S19187C4(); // _ZN8S19187C4D2Ev
  S19187C4(); // tgen
};
//SIG(-1 S19187C4) C1{ BC2{ BC3{ VBC4{ m Fi[5]} Fp}} VBC5{ VBC6{ m} BC7{ m} Fi} VBC8{ VBC9{ BC10{ m Fp} Fp[2]} VBC10 VBC11{ VBC10 VBC9 vd} VBC6 vd Fi[9]} vd FC8}


 S19187C4 ::~S19187C4(){ note_dtor("S19187C4", this);}
S19187C4 ::S19187C4(){ note_ctor("S19187C4", this);} // tgen

static void Test_S19187C4()
{
  extern Class_Descriptor cd_S19187C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,38)];
    init_test(&cd_S19187C4, buf);
    S19187C4 *dp, &lv = *(dp=new (buf) S19187C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,148), "sizeof(S19187C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C4)");
    check_base_class_offset(lv, (S20634C3_nt*)(S19187C6*)(S19187C5*), ABISELECT(96,64), "S19187C4");
    check_base_class_offset(lv, (S19187C6*)(S19187C5*), 0, "S19187C4");
    check_base_class_offset(lv, (S19187C5*), 0, "S19187C4");
    check_base_class_offset(lv, (S2265C38*)(S19187C8*), 0, "S19187C4");
    check_base_class_offset(lv, (S2265C38*)(S19187C11*), 0, "S19187C4");
    check_base_class_offset(lv, (S2265C28*)(S19187C8*), ABISELECT(120,84), "S19187C4");
    check_base_class_offset(lv, (S19187C8*), ABISELECT(120,84), "S19187C4");
    check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*), ABISELECT(184,132), "S19187C4");
    check_base_class_offset(lv, (S19187C2*)(S19187C11*), ABISELECT(184,132), "S19187C4");
    check_base_class_offset(lv, (S19187C2*)(S19187C12*), ABISELECT(184,132), "S19187C4");
    /*is_ambiguous_... S19187C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C11*), ABISELECT(208,144), "S19187C4");
    /*is_ambiguous_... S19187C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C12*), ABISELECT(208,144), "S19187C4");
    check_base_class_offset(lv, (S19187C12*)(S19187C11*), ABISELECT(136,92), "S19187C4");
    check_base_class_offset(lv, (S19187C11*), ABISELECT(136,92), "S19187C4");
    check_field_offset(lv, s19187c4f0, ABISELECT(16,8), "S19187C4.s19187c4f0");
    test_class_info(&lv, &cd_S19187C4);
    dp->~S19187C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C4(Test_S19187C4, "S19187C4", ABISELECT(216,148));

#else // __cplusplus

extern void _ZN8S19187C4C1Ev();
extern void _ZN8S19187C4D2Ev();
Name_Map name_map_S19187C4[] = {
  NSPAIR(_ZN8S19187C4C1Ev),
  NSPAIR(_ZN8S19187C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S19187C6;
extern VTBL_ENTRY _ZTI8S19187C6[];
extern  VTBL_ENTRY _ZTV8S19187C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C6[];
extern Class_Descriptor cd_S19187C5;
extern VTBL_ENTRY _ZTI8S19187C5[];
extern  VTBL_ENTRY _ZTV8S19187C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S19187C8;
extern VTBL_ENTRY _ZTI8S19187C8[];
extern  VTBL_ENTRY _ZTV8S19187C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C12;
extern VTBL_ENTRY _ZTI9S19187C12[];
extern  VTBL_ENTRY _ZTV9S19187C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C12[];
extern Class_Descriptor cd_S19187C11;
extern VTBL_ENTRY _ZTI9S19187C11[];
extern  VTBL_ENTRY _ZTV9S19187C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C11[];
static Base_Class bases_S19187C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19187C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19187C8,    ABISELECT(120,84), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(184,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(208,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19187C12,    ABISELECT(136,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19187C11,    ABISELECT(136,92), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19187C4[];
extern void _ZN8S19187C4D1Ev();
extern void _ZN8S19187C4D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19187C4D1Ev,_ZTv0_n20_N8S19187C4D1Ev)();
extern void ABISELECT(_ZThn136_N8S19187C4D1Ev,_ZThn92_N8S19187C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19187C4D0Ev,_ZTv0_n20_N8S19187C4D0Ev)();
extern void ABISELECT(_ZThn136_N8S19187C4D0Ev,_ZThn92_N8S19187C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19187C4[] = {
  ABISELECT(136,92),
  ABISELECT(208,144),
  ABISELECT(184,132),
  ABISELECT(136,92),
  0,
  ABISELECT(120,84),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C4[0]),
  (VTBL_ENTRY)&_ZN8S19187C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19187C4D0Ev,
  ABISELECT(-120,-84),
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI8S19187C4[0]),
  ABISELECT(-136,-92),
  0,
  ABISELECT(-136,-92),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-136,-92),
  (VTBL_ENTRY)&(_ZTI8S19187C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19187C4D1Ev,_ZTv0_n20_N8S19187C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19187C4D0Ev,_ZTv0_n20_N8S19187C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19187C4[];
static  VTBL_ENTRY _tg__ZTV8S19187C5__8S19187C4[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19187C68S19187C5__8S19187C4[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19187C8__8S19187C4[] = {
  ABISELECT(-120,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19187C11D1Ev,_ZTv0_n20_N9S19187C11D1Ev)();
extern void _ZN9S19187C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19187C11D0Ev,_ZTv0_n20_N9S19187C11D0Ev)();
extern void _ZN9S19187C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19187C11__8S19187C4[] = {
  ABISELECT(-136,-92),
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19187C11D1Ev,_ZTv0_n20_N9S19187C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19187C11D0Ev,_ZTv0_n20_N9S19187C11D0Ev),
};
extern void _ZN9S19187C12D1Ev();
extern void _ZN9S19187C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19187C12__8S19187C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C12[0]),
  (VTBL_ENTRY)&_ZN9S19187C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C12D0Ev,
};
static  VTT_ENTRY vtt_S19187C4[] = {
  {&(_ZTV8S19187C4[9]),  9,23},
  {&(_tg__ZTV8S19187C5__8S19187C4[3]),  3,3},
  {&(_tg__ZTV8S19187C68S19187C5__8S19187C4[3]),  3,3},
  {&(_ZTV8S19187C4[14]),  14,23},
  {&(_ZTV8S19187C4[21]),  21,23},
  {&(_ZTV8S19187C4[21]),  21,23},
  {&(_tg__ZTV8S19187C8__8S19187C4[3]),  3,3},
  {&(_tg__ZTV9S19187C11__8S19187C4[7]),  7,9},
  {&(_tg__ZTV9S19187C11__8S19187C4[7]),  7,9},
  {&(_tg__ZTV9S19187C12__8S19187C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19187C4[];
extern  VTBL_ENTRY _ZTV8S19187C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C4[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19187C11D0Ev,_ZTv0_n20_N9S19187C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S19187C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19187C11D1Ev,_ZTv0_n20_N9S19187C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S19187C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19187C4D0Ev,_ZTv0_n20_N8S19187C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19187C4D0Ev,_ZThn92_N8S19187C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19187C4D1Ev,_ZTv0_n20_N8S19187C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19187C4D1Ev,_ZThn92_N8S19187C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19187C4 = {  "S19187C4", // class name
  bases_S19187C4, 11,
  &(vtc_S19187C4[0]), // expected_vtbl_contents
  &(vtt_S19187C4[0]), // expected_vtt_contents
  ABISELECT(216,148), // object size
  NSPAIRA(_ZTI8S19187C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19187C4),23, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19187C4),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C14  : S5217C60_nt , S19187C2 {
};
//SIG(-1 S19187C14) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S19187C14()
{
  extern Class_Descriptor cd_S19187C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19187C14, buf);
    S19187C14 &lv = *(new (buf) S19187C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19187C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C14)");
    /*is_ambiguous_... S19187C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S19187C14");
    check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*), ABISELECT(8,4), "S19187C14");
    check_base_class_offset(lv, (S19187C2*), ABISELECT(8,4), "S19187C14");
    test_class_info(&lv, &cd_S19187C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C14(Test_S19187C14, "S19187C14", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
static Base_Class bases_S19187C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19187C14[];
Class_Descriptor cd_S19187C14 = {  "S19187C14", // class name
  bases_S19187C14, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S19187C14),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C13  : S19187C14 , S19187C2 , virtual S2265C38 {
  virtual  ~S19187C13(); // _ZN9S19187C13D2Ev
  S19187C13(); // tgen
};
//SIG(-1 S19187C13) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S19187C13 ::~S19187C13(){ note_dtor("S19187C13", this);}
S19187C13 ::S19187C13(){ note_ctor("S19187C13", this);} // tgen

static void Test_S19187C13()
{
  extern Class_Descriptor cd_S19187C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19187C13, buf);
    S19187C13 *dp, &lv = *(dp=new (buf) S19187C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19187C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C13)");
    /*is_ambiguous_... S19187C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C14*), ABISELECT(8,4), "S19187C13");
    check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*)(S19187C14*), ABISELECT(16,8), "S19187C13");
    check_base_class_offset(lv, (S19187C2*)(S19187C14*), ABISELECT(16,8), "S19187C13");
    check_base_class_offset(lv, (S19187C14*), ABISELECT(8,4), "S19187C13");
    /*is_ambiguous_... S19187C13::S19187C2 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*), ABISELECT(40,20), "S19187C13");
    /*is_ambiguous_... S19187C13::S19187C2 */ AMB_check_base_class_offset(lv, (S19187C2*), ABISELECT(40,20), "S19187C13");
    check_base_class_offset(lv, (S2265C38*), 0, "S19187C13");
    test_class_info(&lv, &cd_S19187C13);
    dp->~S19187C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C13(Test_S19187C13, "S19187C13", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19187C13C1Ev();
extern void _ZN9S19187C13D2Ev();
Name_Map name_map_S19187C13[] = {
  NSPAIR(_ZN9S19187C13C1Ev),
  NSPAIR(_ZN9S19187C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S19187C14;
extern VTBL_ENTRY _ZTI9S19187C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S19187C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19187C14,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19187C13[];
extern void _ZN9S19187C13D1Ev();
extern void _ZN9S19187C13D0Ev();
static  VTBL_ENTRY vtc_S19187C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C13[0]),
  (VTBL_ENTRY)&_ZN9S19187C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C13D0Ev,
};
extern VTBL_ENTRY _ZTV9S19187C13[];
static  VTT_ENTRY vtt_S19187C13[] = {
  {&(_ZTV9S19187C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19187C13[];
extern  VTBL_ENTRY _ZTV9S19187C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C13[];
Class_Descriptor cd_S19187C13 = {  "S19187C13", // class name
  bases_S19187C13, 7,
  &(vtc_S19187C13[0]), // expected_vtbl_contents
  &(vtt_S19187C13[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19187C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19187C13),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19187C13),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19187C1  : virtual S19187C2 , S19187C4 , S19187C8 , S19187C13 {
  int s19187c1f0;
  virtual  ~S19187C1(); // _ZN8S19187C1D2Ev
  S19187C1(); // tgen
};
//SIG(1 S19187C1) C1{ VBC2{ BC3{ m Fp} Fp[2]} BC4{ BC5{ BC6{ VBC7{ m Fi[5]} Fp}} VBC8{ VBC9{ m} BC10{ m} Fi} VBC11{ VBC2 VBC3 VBC12{ VBC3 VBC2 vd} VBC9 vd Fi[9]} vd FC11} BC8 BC13{ BC14{ BC3 BC2} BC2 VBC9 vd} vd Fi}


 S19187C1 ::~S19187C1(){ note_dtor("S19187C1", this);}
S19187C1 ::S19187C1(){ note_ctor("S19187C1", this);} // tgen

static void Test_S19187C1()
{
  extern Class_Descriptor cd_S19187C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,49)];
    init_test(&cd_S19187C1, buf);
    S19187C1 *dp, &lv = *(dp=new (buf) S19187C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,192), "sizeof(S19187C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19187C1)");
    /*is_ambiguous_... S19187C1::S19187C2 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*), ABISELECT(184,108), "S19187C1");
    /*is_ambiguous_... S19187C1::S19187C2 */ AMB_check_base_class_offset(lv, (S19187C2*), ABISELECT(184,108), "S19187C1");
    check_base_class_offset(lv, (S19187C2*)(S19187C11*), ABISELECT(184,108), "S19187C1");
    check_base_class_offset(lv, (S19187C2*)(S19187C12*), ABISELECT(184,108), "S19187C1");
    check_base_class_offset(lv, (S20634C3_nt*)(S19187C6*)(S19187C5*)(S19187C4*), ABISELECT(208,120), "S19187C1");
    check_base_class_offset(lv, (S19187C6*)(S19187C5*)(S19187C4*), 0, "S19187C1");
    check_base_class_offset(lv, (S19187C5*)(S19187C4*), 0, "S19187C1");
    /*is_ambiguous_... S19187C1::S19187C8 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19187C8*), 0, "S19187C1");
    check_base_class_offset(lv, (S2265C38*)(S19187C11*), 0, "S19187C1");
    /*is_ambiguous_... S19187C1::S19187C8 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19187C8*), 0, "S19187C1");
    check_base_class_offset(lv, (S2265C38*)(S19187C13*), 0, "S19187C1");
    /*is_ambiguous_... S19187C1::S19187C8 */ AMB_check_base_class_offset(lv, (S2265C28*)(S19187C8*), ABISELECT(232,140), "S19187C1");
    check_base_class_offset(lv, (S19187C8*)(S19187C4*), ABISELECT(232,140), "S19187C1");
    /*is_ambiguous_... S19187C11::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C11*), ABISELECT(296,188), "S19187C1");
    /*is_ambiguous_... S19187C12::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C12*), ABISELECT(296,188), "S19187C1");
    check_base_class_offset(lv, (S19187C12*)(S19187C11*), ABISELECT(248,148), "S19187C1");
    check_base_class_offset(lv, (S19187C11*)(S19187C4*), ABISELECT(248,148), "S19187C1");
    check_base_class_offset(lv, (S19187C4*), 0, "S19187C1");
    /*is_ambiguous_... S19187C1::S19187C8 */ AMB_check_base_class_offset(lv, (S2265C28*)(S19187C8*), ABISELECT(96,64), "S19187C1");
    /*is_ambiguous_... S19187C1::S19187C8 */ AMB_check_base_class_offset(lv, (S19187C8*), ABISELECT(96,64), "S19187C1");
    /*is_ambiguous_... S19187C14::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C14*)(S19187C13*), ABISELECT(120,76), "S19187C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*)(S19187C14*)(S19187C13*), ABISELECT(128,80), "S19187C1");
    check_base_class_offset(lv, (S19187C2*)(S19187C14*)(S19187C13*), ABISELECT(128,80), "S19187C1");
    check_base_class_offset(lv, (S19187C14*)(S19187C13*), ABISELECT(120,76), "S19187C1");
    /*is_ambiguous_... S19187C13::S19187C2 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S19187C2*)(S19187C13*), ABISELECT(152,92), "S19187C1");
    /*is_ambiguous_... S19187C13::S19187C2 */ AMB_check_base_class_offset(lv, (S19187C2*)(S19187C13*), ABISELECT(152,92), "S19187C1");
    check_base_class_offset(lv, (S19187C13*), ABISELECT(112,72), "S19187C1");
    check_field_offset(lv, s19187c1f0, ABISELECT(176,104), "S19187C1.s19187c1f0");
    test_class_info(&lv, &cd_S19187C1);
    dp->~S19187C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19187C1(Test_S19187C1, "S19187C1", ABISELECT(304,192));

#else // __cplusplus

extern void _ZN8S19187C1C1Ev();
extern void _ZN8S19187C1D2Ev();
Name_Map name_map_S19187C1[] = {
  NSPAIR(_ZN8S19187C1C1Ev),
  NSPAIR(_ZN8S19187C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S19187C6;
extern VTBL_ENTRY _ZTI8S19187C6[];
extern  VTBL_ENTRY _ZTV8S19187C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C6[];
extern Class_Descriptor cd_S19187C5;
extern VTBL_ENTRY _ZTI8S19187C5[];
extern  VTBL_ENTRY _ZTV8S19187C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S19187C8;
extern VTBL_ENTRY _ZTI8S19187C8[];
extern  VTBL_ENTRY _ZTV8S19187C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C12;
extern VTBL_ENTRY _ZTI9S19187C12[];
extern  VTBL_ENTRY _ZTV9S19187C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C12[];
extern Class_Descriptor cd_S19187C11;
extern VTBL_ENTRY _ZTI9S19187C11[];
extern  VTBL_ENTRY _ZTV9S19187C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C11[];
extern Class_Descriptor cd_S19187C4;
extern VTBL_ENTRY _ZTI8S19187C4[];
extern  VTBL_ENTRY _ZTV8S19187C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C4[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S19187C8;
extern VTBL_ENTRY _ZTI8S19187C8[];
extern  VTBL_ENTRY _ZTV8S19187C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S19187C14;
extern VTBL_ENTRY _ZTI9S19187C14[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S19187C2;
extern VTBL_ENTRY _ZTI8S19187C2[];
extern Class_Descriptor cd_S19187C13;
extern VTBL_ENTRY _ZTI9S19187C13[];
extern  VTBL_ENTRY _ZTV9S19187C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19187C13[];
static Base_Class bases_S19187C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20634C3_nt,    ABISELECT(208,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19187C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19187C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(232,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19187C8,    ABISELECT(232,140), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(296,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19187C12,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19187C11,    ABISELECT(248,148), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19187C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19187C8,    ABISELECT(96,64), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(128,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19187C14,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19187C2,    ABISELECT(152,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19187C13,    ABISELECT(112,72), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19187C1[];
extern void _ZN8S19187C1D1Ev();
extern void _ZN8S19187C1D0Ev();
extern void ABISELECT(_ZThn112_N8S19187C1D1Ev,_ZThn72_N8S19187C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19187C1D0Ev,_ZThn72_N8S19187C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19187C1D1Ev,_ZTv0_n20_N8S19187C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19187C1D1Ev,_ZThn148_N8S19187C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19187C1D0Ev,_ZTv0_n20_N8S19187C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19187C1D0Ev,_ZThn148_N8S19187C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19187C1[] = {
  ABISELECT(248,148),
  ABISELECT(296,188),
  ABISELECT(184,108),
  ABISELECT(248,148),
  0,
  ABISELECT(232,140),
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C1[0]),
  (VTBL_ENTRY)&_ZN8S19187C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19187C1D0Ev,
  ABISELECT(-96,-64),
  ABISELECT(-96,-64),
  (VTBL_ENTRY)&(_ZTI8S19187C1[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19187C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19187C1D1Ev,_ZThn72_N8S19187C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19187C1D0Ev,_ZThn72_N8S19187C1D0Ev),
  ABISELECT(-232,-140),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI8S19187C1[0]),
  ABISELECT(-248,-148),
  0,
  ABISELECT(-248,-148),
  ABISELECT(-64,-40),
  ABISELECT(48,40),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI8S19187C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19187C1D1Ev,_ZTv0_n20_N8S19187C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19187C1D0Ev,_ZTv0_n20_N8S19187C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19187C1[];
extern void _ZN8S19187C4D1Ev();
extern void _ZN8S19187C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19187C4__8S19187C1[] = {
  ABISELECT(248,148),
  ABISELECT(296,188),
  ABISELECT(184,108),
  ABISELECT(248,148),
  0,
  ABISELECT(232,140),
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C4[0]),
  (VTBL_ENTRY)&_ZN8S19187C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19187C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19187C58S19187C4__8S19187C1[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19187C68S19187C58S19187C4__8S19187C1[] = {
  ABISELECT(208,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19187C8__8S19187C4__8S19187C1[] = {
  ABISELECT(-232,-140),
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI8S19187C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S19187C4D1Ev,_ZTv0_n20_N8S19187C4D1Ev)();
extern void ABISELECT(_ZThn248_N8S19187C4D1Ev,_ZThn148_N8S19187C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19187C4D0Ev,_ZTv0_n20_N8S19187C4D0Ev)();
extern void ABISELECT(_ZThn248_N8S19187C4D0Ev,_ZThn148_N8S19187C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19187C11__8S19187C4__8S19187C1[] = {
  ABISELECT(-248,-148),
  0,
  ABISELECT(-248,-148),
  ABISELECT(-64,-40),
  ABISELECT(48,40),
  ABISELECT(-248,-148),
  (VTBL_ENTRY)&(_ZTI8S19187C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19187C4D1Ev,_ZTv0_n20_N8S19187C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19187C4D0Ev,_ZTv0_n20_N8S19187C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19187C8__A__8S19187C1[] = {
  ABISELECT(-96,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C8[0]),
};
extern void _ZN9S19187C13D1Ev();
extern void _ZN9S19187C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19187C13__8S19187C1[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C13[0]),
  (VTBL_ENTRY)&_ZN9S19187C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19187C8__8S19187C1[] = {
  ABISELECT(-232,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19187C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19187C11D1Ev,_ZTv0_n20_N9S19187C11D1Ev)();
extern void _ZN9S19187C11D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19187C11D0Ev,_ZTv0_n20_N9S19187C11D0Ev)();
extern void _ZN9S19187C11D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19187C11__8S19187C1[] = {
  ABISELECT(-248,-148),
  0,
  0,
  ABISELECT(-64,-40),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19187C11D1Ev,_ZTv0_n20_N9S19187C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19187C11D0Ev,_ZTv0_n20_N9S19187C11D0Ev),
};
extern void _ZN9S19187C12D1Ev();
extern void _ZN9S19187C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19187C12__8S19187C1[] = {
  ABISELECT(-64,-40),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19187C12[0]),
  (VTBL_ENTRY)&_ZN9S19187C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19187C12D0Ev,
};
static  VTT_ENTRY vtt_S19187C1[] = {
  {&(_ZTV8S19187C1[9]),  9,31},
  {&(_tg__ZTV8S19187C4__8S19187C1[9]),  9,11},
  {&(_tg__ZTV8S19187C58S19187C4__8S19187C1[3]),  3,3},
  {&(_tg__ZTV8S19187C68S19187C58S19187C4__8S19187C1[3]),  3,3},
  {&(_tg__ZTV8S19187C8__8S19187C4__8S19187C1[3]),  3,3},
  {&(_tg__ZTV9S19187C11__8S19187C4__8S19187C1[7]),  7,9},
  {&(_tg__ZTV9S19187C11__8S19187C4__8S19187C1[7]),  7,9},
  {&(_tg__ZTV8S19187C8__A__8S19187C1[3]),  3,3},
  {&(_tg__ZTV9S19187C13__8S19187C1[3]),  3,5},
  {&(_ZTV8S19187C1[22]),  22,31},
  {&(_ZTV8S19187C1[29]),  29,31},
  {&(_ZTV8S19187C1[29]),  29,31},
  {&(_ZTV8S19187C1[14]),  14,31},
  {&(_ZTV8S19187C1[17]),  17,31},
  {&(_tg__ZTV8S19187C8__8S19187C1[3]),  3,3},
  {&(_tg__ZTV9S19187C11__8S19187C1[7]),  7,9},
  {&(_tg__ZTV9S19187C11__8S19187C1[7]),  7,9},
  {&(_tg__ZTV9S19187C12__8S19187C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19187C1[];
extern  VTBL_ENTRY _ZTV8S19187C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19187C1[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19187C11D0Ev,_ZTv0_n20_N9S19187C11D0Ev), // 
  (VTBL_ENTRY)_ZN9S19187C11D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19187C11D1Ev,_ZTv0_n20_N9S19187C11D1Ev), // 
  (VTBL_ENTRY)_ZN9S19187C11D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19187C4D0Ev,_ZTv0_n20_N8S19187C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19187C4D0Ev,_ZThn148_N8S19187C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19187C4D1Ev,_ZTv0_n20_N8S19187C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19187C4D1Ev,_ZThn148_N8S19187C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19187C1D0Ev,_ZTv0_n20_N8S19187C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19187C1D0Ev,_ZThn148_N8S19187C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19187C1D1Ev,_ZTv0_n20_N8S19187C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19187C1D1Ev,_ZThn148_N8S19187C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19187C1 = {  "S19187C1", // class name
  bases_S19187C1, 21,
  &(vtc_S19187C1[0]), // expected_vtbl_contents
  &(vtt_S19187C1[0]), // expected_vtt_contents
  ABISELECT(304,192), // object size
  NSPAIRA(_ZTI8S19187C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19187C1),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19187C1),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C2  : virtual S19859C6 {
  virtual  ~S21171C2(); // _ZN8S21171C2D2Ev
  S21171C2(); // tgen
};
//SIG(-1 S21171C2) C1{ VBC2{ vd m Fs} vd}


 S21171C2 ::~S21171C2(){ note_dtor("S21171C2", this);}
S21171C2 ::S21171C2(){ note_ctor("S21171C2", this);} // tgen

static void Test_S21171C2()
{
  extern Class_Descriptor cd_S21171C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21171C2, buf);
    S21171C2 *dp, &lv = *(dp=new (buf) S21171C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C2)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21171C2");
    test_class_info(&lv, &cd_S21171C2);
    dp->~S21171C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C2(Test_S21171C2, "S21171C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21171C2C1Ev();
extern void _ZN8S21171C2D2Ev();
Name_Map name_map_S21171C2[] = {
  NSPAIR(_ZN8S21171C2C1Ev),
  NSPAIR(_ZN8S21171C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S21171C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C2[];
extern void _ZN8S21171C2D1Ev();
extern void _ZN8S21171C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&_ZN8S21171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C2[];
static  VTT_ENTRY vtt_S21171C2[] = {
  {&(_ZTV8S21171C2[3]),  3,10},
  {&(_ZTV8S21171C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S21171C2[];
extern  VTBL_ENTRY _ZTV8S21171C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C2[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C2 = {  "S21171C2", // class name
  bases_S21171C2, 1,
  &(vtc_S21171C2[0]), // expected_vtbl_contents
  &(vtt_S21171C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21171C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21171C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C5  : virtual S19859C6 {
  ~S21171C5(); // tgen
  S21171C5(); // tgen
};
//SIG(-1 S21171C5) C1{ VBC2{ vd m Fs}}


S21171C5 ::~S21171C5(){ note_dtor("S21171C5", this);} // tgen
S21171C5 ::S21171C5(){ note_ctor("S21171C5", this);} // tgen

static void Test_S21171C5()
{
  extern Class_Descriptor cd_S21171C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21171C5, buf);
    S21171C5 *dp, &lv = *(dp=new (buf) S21171C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21171C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C5)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21171C5");
    test_class_info(&lv, &cd_S21171C5);
    dp->~S21171C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C5(Test_S21171C5, "S21171C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21171C5C1Ev();
extern void _ZN8S21171C5D1Ev();
Name_Map name_map_S21171C5[] = {
  NSPAIR(_ZN8S21171C5C1Ev),
  NSPAIR(_ZN8S21171C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S21171C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C5[];
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C5[];
static  VTT_ENTRY vtt_S21171C5[] = {
  {&(_ZTV8S21171C5[3]),  3,10},
  {&(_ZTV8S21171C5[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C5 = {  "S21171C5", // class name
  bases_S21171C5, 1,
  &(vtc_S21171C5[0]), // expected_vtbl_contents
  &(vtt_S21171C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21171C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21171C5),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C4  : virtual S21171C5 {
  virtual  ~S21171C4(); // _ZN8S21171C4D2Ev
  S21171C4(); // tgen
};
//SIG(-1 S21171C4) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S21171C4 ::~S21171C4(){ note_dtor("S21171C4", this);}
S21171C4 ::S21171C4(){ note_ctor("S21171C4", this);} // tgen

static void Test_S21171C4()
{
  extern Class_Descriptor cd_S21171C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21171C4, buf);
    S21171C4 *dp, &lv = *(dp=new (buf) S21171C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21171C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C4)");
    check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(8,4), "S21171C4");
    check_base_class_offset(lv, (S21171C5*), 0, "S21171C4");
    test_class_info(&lv, &cd_S21171C4);
    dp->~S21171C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C4(Test_S21171C4, "S21171C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21171C4C1Ev();
extern void _ZN8S21171C4D2Ev();
Name_Map name_map_S21171C4[] = {
  NSPAIR(_ZN8S21171C4C1Ev),
  NSPAIR(_ZN8S21171C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
static Base_Class bases_S21171C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21171C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C4[];
extern void _ZN8S21171C4D1Ev();
extern void _ZN8S21171C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C4D1Ev,_ZThn4_N8S21171C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C4D0Ev,_ZThn4_N8S21171C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&_ZN8S21171C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C4[];
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__8S21171C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__8S21171C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
static  VTT_ENTRY vtt_S21171C4[] = {
  {&(_ZTV8S21171C4[5]),  5,12},
  {&(_ZTV8S21171C4[5]),  5,12},
  {&(_ZTV8S21171C4[10]),  10,12},
  {&(_tg__ZTV8S21171C5__8S21171C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__8S21171C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21171C4[];
extern  VTBL_ENTRY _ZTV8S21171C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C4[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C4D0Ev,_ZThn4_N8S21171C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C4D1Ev,_ZThn4_N8S21171C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C4 = {  "S21171C4", // class name
  bases_S21171C4, 2,
  &(vtc_S21171C4[0]), // expected_vtbl_contents
  &(vtt_S21171C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21171C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21171C4),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C4),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C6  : S19859C6 , virtual S21171C2 {
  virtual  ~S21171C6(); // _ZN8S21171C6D2Ev
  S21171C6(); // tgen
};
//SIG(-1 S21171C6) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} vd}


 S21171C6 ::~S21171C6(){ note_dtor("S21171C6", this);}
S21171C6 ::S21171C6(){ note_ctor("S21171C6", this);} // tgen

static void Test_S21171C6()
{
  extern Class_Descriptor cd_S21171C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21171C6, buf);
    S21171C6 *dp, &lv = *(dp=new (buf) S21171C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21171C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C6)");
    /*is_ambiguous_... S21171C6::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S21171C6");
    check_base_class_offset(lv, (S19859C6*)(S21171C2*), ABISELECT(24,12), "S21171C6");
    check_base_class_offset(lv, (S21171C2*), ABISELECT(16,8), "S21171C6");
    test_class_info(&lv, &cd_S21171C6);
    dp->~S21171C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C6(Test_S21171C6, "S21171C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21171C6C1Ev();
extern void _ZN8S21171C6D2Ev();
Name_Map name_map_S21171C6[] = {
  NSPAIR(_ZN8S21171C6C1Ev),
  NSPAIR(_ZN8S21171C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C2;
extern VTBL_ENTRY _ZTI8S21171C2[];
extern  VTBL_ENTRY _ZTV8S21171C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C2[];
static Base_Class bases_S21171C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21171C2,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C6[];
extern void _ZN8S21171C6D1Ev();
extern void _ZN8S21171C6D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C6D1Ev,_ZThn8_N8S21171C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C6D0Ev,_ZThn8_N8S21171C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S21171C6D1Ev,_ZThn12_N8S21171C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S21171C6D0Ev,_ZThn12_N8S21171C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C6[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&_ZN8S21171C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C6[];
extern void _ZN8S21171C2D1Ev();
extern void _ZN8S21171C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&_ZN8S21171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C2__8S21171C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev),
};
static  VTT_ENTRY vtt_S21171C6[] = {
  {&(_ZTV8S21171C6[4]),  4,17},
  {&(_ZTV8S21171C6[10]),  10,17},
  {&(_ZTV8S21171C6[15]),  15,17},
  {&(_tg__ZTV8S21171C2__8S21171C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C2__8S21171C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21171C6[];
extern  VTBL_ENTRY _ZTV8S21171C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C6[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C6D0Ev,_ZThn12_N8S21171C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C6D1Ev,_ZThn12_N8S21171C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C6D0Ev,_ZThn8_N8S21171C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C6D1Ev,_ZThn8_N8S21171C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C6 = {  "S21171C6", // class name
  bases_S21171C6, 3,
  &(vtc_S21171C6[0]), // expected_vtbl_contents
  &(vtt_S21171C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21171C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21171C6),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C6),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C9  : virtual S19859C6 , virtual S21171C5 {
  virtual  ~S21171C9(); // _ZN8S21171C9D2Ev
  S21171C9(); // tgen
};
//SIG(-1 S21171C9) C1{ VBC2{ vd m Fs} VBC3{ VBC2} vd}


 S21171C9 ::~S21171C9(){ note_dtor("S21171C9", this);}
S21171C9 ::S21171C9(){ note_ctor("S21171C9", this);} // tgen

static void Test_S21171C9()
{
  extern Class_Descriptor cd_S21171C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21171C9, buf);
    S21171C9 *dp, &lv = *(dp=new (buf) S21171C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21171C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C9)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21171C9");
    check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(8,4), "S21171C9");
    check_base_class_offset(lv, (S21171C5*), 0, "S21171C9");
    test_class_info(&lv, &cd_S21171C9);
    dp->~S21171C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C9(Test_S21171C9, "S21171C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21171C9C1Ev();
extern void _ZN8S21171C9D2Ev();
Name_Map name_map_S21171C9[] = {
  NSPAIR(_ZN8S21171C9C1Ev),
  NSPAIR(_ZN8S21171C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
static Base_Class bases_S21171C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C9[];
extern void _ZN8S21171C9D1Ev();
extern void _ZN8S21171C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C9D1Ev,_ZThn4_N8S21171C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C9D0Ev,_ZThn4_N8S21171C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&_ZN8S21171C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C9D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C9[];
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__8S21171C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__8S21171C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
static  VTT_ENTRY vtt_S21171C9[] = {
  {&(_ZTV8S21171C9[5]),  5,12},
  {&(_ZTV8S21171C9[10]),  10,12},
  {&(_ZTV8S21171C9[5]),  5,12},
  {&(_tg__ZTV8S21171C5__8S21171C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__8S21171C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21171C9[];
extern  VTBL_ENTRY _ZTV8S21171C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C9[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C9D0Ev,_ZThn4_N8S21171C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C9D1Ev,_ZThn4_N8S21171C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C9 = {  "S21171C9", // class name
  bases_S21171C9, 2,
  &(vtc_S21171C9[0]), // expected_vtbl_contents
  &(vtt_S21171C9[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21171C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21171C9),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C9),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C10  : virtual S19859C6 , virtual S21171C5 {
  ~S21171C10(); // tgen
  S21171C10(); // tgen
};
//SIG(-1 S21171C10) C1{ VBC2{ vd m Fs} VBC3{ VBC2}}


S21171C10 ::~S21171C10(){ note_dtor("S21171C10", this);} // tgen
S21171C10 ::S21171C10(){ note_ctor("S21171C10", this);} // tgen

static void Test_S21171C10()
{
  extern Class_Descriptor cd_S21171C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21171C10, buf);
    S21171C10 *dp, &lv = *(dp=new (buf) S21171C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21171C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C10)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21171C10");
    check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(8,4), "S21171C10");
    check_base_class_offset(lv, (S21171C5*), 0, "S21171C10");
    test_class_info(&lv, &cd_S21171C10);
    dp->~S21171C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C10(Test_S21171C10, "S21171C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S21171C10C1Ev();
extern void _ZN9S21171C10D1Ev();
Name_Map name_map_S21171C10[] = {
  NSPAIR(_ZN9S21171C10C1Ev),
  NSPAIR(_ZN9S21171C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
static Base_Class bases_S21171C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21171C10[];
extern void _ZN9S21171C10D1Ev();
extern void _ZN9S21171C10D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev)();
extern void ABISELECT(_ZThn8_N9S21171C10D1Ev,_ZThn4_N9S21171C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev)();
extern void ABISELECT(_ZThn8_N9S21171C10D0Ev,_ZThn4_N9S21171C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C10[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&_ZN9S21171C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21171C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S21171C10[];
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__9S21171C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__9S21171C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
static  VTT_ENTRY vtt_S21171C10[] = {
  {&(_ZTV9S21171C10[5]),  5,12},
  {&(_ZTV9S21171C10[10]),  10,12},
  {&(_ZTV9S21171C10[5]),  5,12},
  {&(_tg__ZTV8S21171C5__9S21171C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__9S21171C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21171C10[];
extern  VTBL_ENTRY _ZTV9S21171C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C10[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D0Ev,_ZThn4_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C5D1Ev,_ZThn4_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21171C10D0Ev,_ZThn4_N9S21171C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21171C10D1Ev,_ZThn4_N9S21171C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C10 = {  "S21171C10", // class name
  bases_S21171C10, 2,
  &(vtc_S21171C10[0]), // expected_vtbl_contents
  &(vtt_S21171C10[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S21171C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21171C10),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21171C10),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C8  : S21171C5 , S21171C9 , S21171C10 , virtual S21171C2 , virtual S21171C4 {
  int s21171c8f0:6;
  virtual  ~S21171C8(); // _ZN8S21171C8D2Ev
  S21171C8(); // tgen
};
//SIG(-1 S21171C8) C1{ BC2{ VBC3{ vd m Fs}} BC4{ VBC3 VBC2 vd} BC5{ VBC3 VBC2} VBC6{ VBC3 vd} VBC7{ VBC2 vd} vd Fi:6}


 S21171C8 ::~S21171C8(){ note_dtor("S21171C8", this);}
S21171C8 ::S21171C8(){ note_ctor("S21171C8", this);} // tgen

static void Test_S21171C8()
{
  extern Class_Descriptor cd_S21171C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S21171C8, buf);
    S21171C8 *dp, &lv = *(dp=new (buf) S21171C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S21171C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C8)");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(32,16), "S21171C8");
    check_base_class_offset(lv, (S19859C6*)(S21171C9*), ABISELECT(32,16), "S21171C8");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(32,16), "S21171C8");
    check_base_class_offset(lv, (S19859C6*)(S21171C10*), ABISELECT(32,16), "S21171C8");
    check_base_class_offset(lv, (S19859C6*)(S21171C2*), ABISELECT(32,16), "S21171C8");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S21171C5*), 0, "S21171C8");
    check_base_class_offset(lv, (S21171C5*)(S21171C9*), ABISELECT(8,4), "S21171C8");
    check_base_class_offset(lv, (S21171C5*)(S21171C10*), ABISELECT(8,4), "S21171C8");
    check_base_class_offset(lv, (S21171C5*)(S21171C4*), ABISELECT(8,4), "S21171C8");
    check_base_class_offset(lv, (S21171C9*), ABISELECT(8,4), "S21171C8");
    check_base_class_offset(lv, (S21171C10*), ABISELECT(16,8), "S21171C8");
    check_base_class_offset(lv, (S21171C2*), ABISELECT(48,24), "S21171C8");
    check_base_class_offset(lv, (S21171C4*), ABISELECT(56,28), "S21171C8");
    set_bf_and_test(lv, s21171c8f0, ABISELECT(24,12), 0, 6, 1, "S21171C8");
    set_bf_and_test(lv, s21171c8f0, ABISELECT(24,12), 0, 6, hide_sll(1LL<<5), "S21171C8");
    test_class_info(&lv, &cd_S21171C8);
    dp->~S21171C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C8(Test_S21171C8, "S21171C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S21171C8C1Ev();
extern void _ZN8S21171C8D2Ev();
Name_Map name_map_S21171C8[] = {
  NSPAIR(_ZN8S21171C8C1Ev),
  NSPAIR(_ZN8S21171C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C9;
extern VTBL_ENTRY _ZTI8S21171C9[];
extern  VTBL_ENTRY _ZTV8S21171C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C9[];
extern Class_Descriptor cd_S21171C10;
extern VTBL_ENTRY _ZTI9S21171C10[];
extern  VTBL_ENTRY _ZTV9S21171C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C10[];
extern Class_Descriptor cd_S21171C2;
extern VTBL_ENTRY _ZTI8S21171C2[];
extern  VTBL_ENTRY _ZTV8S21171C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C2[];
extern Class_Descriptor cd_S21171C4;
extern VTBL_ENTRY _ZTI8S21171C4[];
extern  VTBL_ENTRY _ZTV8S21171C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C4[];
static Base_Class bases_S21171C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21171C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21171C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21171C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21171C10,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21171C2,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C4,    ABISELECT(56,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C8[];
extern void _ZN8S21171C8D1Ev();
extern void _ZN8S21171C8D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C8D1Ev,_ZThn4_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C8D0Ev,_ZThn4_N8S21171C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C8D1Ev,_ZThn8_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C8D0Ev,_ZThn8_N8S21171C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S21171C8D1Ev,_ZThn16_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S21171C8D0Ev,_ZThn16_N8S21171C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S21171C8D1Ev,_ZThn24_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S21171C8D0Ev,_ZThn24_N8S21171C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S21171C8D1Ev,_ZThn28_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S21171C8D0Ev,_ZThn28_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C8[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&_ZN8S21171C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C8D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  ABISELECT(-24,-12),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C8[];
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__A__8S21171C8[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S21171C5D1Ev,_ZThn16_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S21171C5D0Ev,_ZThn16_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__A__8S21171C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev)();
extern void _ZN8S21171C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev)();
extern void _ZN8S21171C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C9__8S21171C8[] = {
  0,
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S21171C9D1Ev,_ZThn12_N8S21171C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S21171C9D0Ev,_ZThn12_N8S21171C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C9__8S21171C8[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev)();
extern void _ZN9S21171C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev)();
extern void _ZN9S21171C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C10__8S21171C8[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S21171C10D1Ev,_ZThn8_N9S21171C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S21171C10D0Ev,_ZThn8_N9S21171C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S21171C10__8S21171C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C5__9S21171C10__8S21171C8[] = {
  ABISELECT(8,4),
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev),
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__A1__8S21171C8[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S21171C5D1Ev,_ZThn12_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S21171C5D0Ev,_ZThn12_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__A1__8S21171C8[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void _ZN8S21171C2D1Ev();
extern void _ZN8S21171C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&_ZN8S21171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C2__8S21171C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev)();
extern void _ZN8S21171C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev)();
extern void _ZN8S21171C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C4__8S21171C8[] = {
  ABISELECT(-48,-24),
  0,
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C5__8S21171C4__8S21171C8[] = {
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C4__8S21171C8[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev),
};
static  VTT_ENTRY vtt_S21171C8[] = {
  {&(_ZTV8S21171C8[6]),  6,40},
  {&(_tg__ZTV8S21171C5__A__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__A__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S21171C9__8S21171C8[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21171C9__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S21171C9__8S21171C8[5]),  5,7},
  {&(_tg__ZTV9S21171C10__8S21171C8[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S21171C10__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S21171C5__9S21171C10__8S21171C8[4]),  4,6},
  {&(_ZTV8S21171C8[25]),  25,40},
  {&(_ZTV8S21171C8[13]),  13,40},
  {&(_ZTV8S21171C8[13]),  13,40},
  {&(_ZTV8S21171C8[20]),  20,40},
  {&(_ZTV8S21171C8[31]),  31,40},
  {&(_ZTV8S21171C8[38]),  38,40},
  {&(_tg__ZTV8S21171C5__A1__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__A1__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S21171C2__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C2__8S21171C8[3]),  3,5},
  {&(_tg__ZTV8S21171C4__8S21171C8[5]),  5,7},
  {&(_tg__ZTV8S21171C5__8S21171C4__8S21171C8[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21171C4__8S21171C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21171C8[];
extern  VTBL_ENTRY _ZTV8S21171C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C8[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21171C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21171C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21171C10D0Ev,_ZThn8_N9S21171C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21171C10D1Ev,_ZThn8_N9S21171C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21171C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21171C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C9D0Ev,_ZThn12_N8S21171C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C9D1Ev,_ZThn12_N8S21171C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21171C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21171C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C5D0Ev,_ZThn12_N8S21171C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21171C5D0Ev,_ZThn16_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C5D1Ev,_ZThn12_N8S21171C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21171C5D1Ev,_ZThn16_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21171C8D0Ev,_ZThn16_N8S21171C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21171C8D1Ev,_ZThn16_N8S21171C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21171C8D0Ev,_ZThn28_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21171C8D0Ev,_ZThn24_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C8D0Ev,_ZThn8_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C8D0Ev,_ZThn4_N8S21171C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21171C8D1Ev,_ZThn28_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21171C8D1Ev,_ZThn24_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C8D1Ev,_ZThn8_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C8D1Ev,_ZThn4_N8S21171C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C8 = {  "S21171C8", // class name
  bases_S21171C8, 7,
  &(vtc_S21171C8[0]), // expected_vtbl_contents
  &(vtt_S21171C8[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S21171C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21171C8),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C8),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C11  : virtual S19859C6 , virtual S21171C2 , S21171C5 {
  int s21171c11f0;
  virtual  ~S21171C11(); // _ZN9S21171C11D2Ev
  S21171C11(); // tgen
};
//SIG(-1 S21171C11) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S21171C11 ::~S21171C11(){ note_dtor("S21171C11", this);}
S21171C11 ::S21171C11(){ note_ctor("S21171C11", this);} // tgen

static void Test_S21171C11()
{
  extern Class_Descriptor cd_S21171C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21171C11, buf);
    S21171C11 *dp, &lv = *(dp=new (buf) S21171C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21171C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C11)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S21171C11");
    check_base_class_offset(lv, (S19859C6*)(S21171C2*), ABISELECT(16,8), "S21171C11");
    check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(16,8), "S21171C11");
    check_base_class_offset(lv, (S21171C2*), ABISELECT(32,16), "S21171C11");
    check_base_class_offset(lv, (S21171C5*), 0, "S21171C11");
    check_field_offset(lv, s21171c11f0, ABISELECT(8,4), "S21171C11.s21171c11f0");
    test_class_info(&lv, &cd_S21171C11);
    dp->~S21171C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C11(Test_S21171C11, "S21171C11", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S21171C11C1Ev();
extern void _ZN9S21171C11D2Ev();
Name_Map name_map_S21171C11[] = {
  NSPAIR(_ZN9S21171C11C1Ev),
  NSPAIR(_ZN9S21171C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C2;
extern VTBL_ENTRY _ZTI8S21171C2[];
extern  VTBL_ENTRY _ZTV8S21171C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C2[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
static Base_Class bases_S21171C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C2,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21171C11[];
extern void _ZN9S21171C11D1Ev();
extern void _ZN9S21171C11D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S21171C11D1Ev,_ZThn8_N9S21171C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S21171C11D0Ev,_ZThn8_N9S21171C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S21171C11D1Ev,_ZThn16_N9S21171C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S21171C11D0Ev,_ZThn16_N9S21171C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C11[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&_ZN9S21171C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21171C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21171C11[];
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__9S21171C11[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C5D1Ev,_ZThn8_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C5D0Ev,_ZThn8_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__9S21171C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void _ZN8S21171C2D1Ev();
extern void _ZN8S21171C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C2__9S21171C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&_ZN8S21171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C2__9S21171C11[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev),
};
static  VTT_ENTRY vtt_S21171C11[] = {
  {&(_ZTV9S21171C11[4]),  4,17},
  {&(_tg__ZTV8S21171C5__9S21171C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__9S21171C11[3]),  3,5},
  {&(_ZTV9S21171C11[9]),  9,17},
  {&(_ZTV9S21171C11[15]),  15,17},
  {&(_tg__ZTV8S21171C2__9S21171C11[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C2__9S21171C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21171C11[];
extern  VTBL_ENTRY _ZTV9S21171C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C11[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C5D0Ev,_ZThn8_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C5D1Ev,_ZThn8_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21171C11D0Ev,_ZThn16_N9S21171C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S21171C11D1Ev,_ZThn16_N9S21171C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21171C11D0Ev,_ZThn8_N9S21171C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21171C11D1Ev,_ZThn8_N9S21171C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C11 = {  "S21171C11", // class name
  bases_S21171C11, 3,
  &(vtc_S21171C11[0]), // expected_vtbl_contents
  &(vtt_S21171C11[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S21171C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21171C11),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21171C11),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C7  : virtual S21171C2 , S21171C8 , virtual S21171C6 , virtual S21171C11 {
  void *s21171c7f0[4];
  virtual  ~S21171C7(); // _ZN8S21171C7D2Ev
  S21171C7(); // tgen
};
//SIG(-1 S21171C7) C1{ VBC2{ VBC3{ vd m Fs} vd} BC4{ BC5{ VBC3} BC6{ VBC3 VBC5 vd} BC7{ VBC3 VBC5} VBC2 VBC8{ VBC5 vd} vd Fi:6} VBC9{ BC3 VBC2 vd} VBC10{ VBC3 VBC2 BC5 vd Fi} vd Fp[4]}


 S21171C7 ::~S21171C7(){ note_dtor("S21171C7", this);}
S21171C7 ::S21171C7(){ note_ctor("S21171C7", this);} // tgen

static void Test_S21171C7()
{
  extern Class_Descriptor cd_S21171C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S21171C7, buf);
    S21171C7 *dp, &lv = *(dp=new (buf) S21171C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S21171C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C7)");
    check_base_class_offset(lv, (S19859C6*)(S21171C2*), ABISELECT(72,36), "S21171C7");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C5*)(S21171C8*), ABISELECT(72,36), "S21171C7");
    check_base_class_offset(lv, (S19859C6*)(S21171C9*)(S21171C8*), ABISELECT(72,36), "S21171C7");
    /*is_ambiguous_... S21171C7::S21171C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(72,36), "S21171C7");
    check_base_class_offset(lv, (S19859C6*)(S21171C10*)(S21171C8*), ABISELECT(72,36), "S21171C7");
    check_base_class_offset(lv, (S19859C6*)(S21171C11*), ABISELECT(72,36), "S21171C7");
    check_base_class_offset(lv, (S19859C6*)(S21171C5*)(S21171C11*), ABISELECT(72,36), "S21171C7");
    check_base_class_offset(lv, (S21171C2*), ABISELECT(64,32), "S21171C7");
    check_base_class_offset(lv, (S21171C2*)(S21171C8*), ABISELECT(64,32), "S21171C7");
    check_base_class_offset(lv, (S21171C2*)(S21171C6*), ABISELECT(64,32), "S21171C7");
    check_base_class_offset(lv, (S21171C2*)(S21171C11*), ABISELECT(64,32), "S21171C7");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S21171C5*)(S21171C8*), 0, "S21171C7");
    check_base_class_offset(lv, (S21171C5*)(S21171C9*)(S21171C8*), ABISELECT(8,4), "S21171C7");
    check_base_class_offset(lv, (S21171C5*)(S21171C10*)(S21171C8*), ABISELECT(8,4), "S21171C7");
    check_base_class_offset(lv, (S21171C5*)(S21171C4*), ABISELECT(8,4), "S21171C7");
    check_base_class_offset(lv, (S21171C9*)(S21171C8*), ABISELECT(8,4), "S21171C7");
    check_base_class_offset(lv, (S21171C10*)(S21171C8*), ABISELECT(16,8), "S21171C7");
    check_base_class_offset(lv, (S21171C4*)(S21171C8*), ABISELECT(88,44), "S21171C7");
    check_base_class_offset(lv, (S21171C8*), 0, "S21171C7");
    /*is_ambiguous_... S21171C6::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C6*), ABISELECT(96,48), "S21171C7");
    check_base_class_offset(lv, (S21171C6*), ABISELECT(96,48), "S21171C7");
    check_base_class_offset(lv, (S21171C5*)(S21171C11*), ABISELECT(112,56), "S21171C7");
    check_base_class_offset(lv, (S21171C11*), ABISELECT(112,56), "S21171C7");
    check_field_offset(lv, s21171c7f0, ABISELECT(32,16), "S21171C7.s21171c7f0");
    test_class_info(&lv, &cd_S21171C7);
    dp->~S21171C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C7(Test_S21171C7, "S21171C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S21171C7C1Ev();
extern void _ZN8S21171C7D2Ev();
Name_Map name_map_S21171C7[] = {
  NSPAIR(_ZN8S21171C7C1Ev),
  NSPAIR(_ZN8S21171C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C2;
extern VTBL_ENTRY _ZTI8S21171C2[];
extern  VTBL_ENTRY _ZTV8S21171C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C2[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C9;
extern VTBL_ENTRY _ZTI8S21171C9[];
extern  VTBL_ENTRY _ZTV8S21171C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C9[];
extern Class_Descriptor cd_S21171C10;
extern VTBL_ENTRY _ZTI9S21171C10[];
extern  VTBL_ENTRY _ZTV9S21171C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C10[];
extern Class_Descriptor cd_S21171C4;
extern VTBL_ENTRY _ZTI8S21171C4[];
extern  VTBL_ENTRY _ZTV8S21171C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C4[];
extern Class_Descriptor cd_S21171C8;
extern VTBL_ENTRY _ZTI8S21171C8[];
extern  VTBL_ENTRY _ZTV8S21171C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C8[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C6;
extern VTBL_ENTRY _ZTI8S21171C6[];
extern  VTBL_ENTRY _ZTV8S21171C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C6[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C11;
extern VTBL_ENTRY _ZTI9S21171C11[];
extern  VTBL_ENTRY _ZTV9S21171C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C11[];
static Base_Class bases_S21171C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(72,36), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21171C2,    ABISELECT(64,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21171C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21171C9,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21171C10,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21171C4,    ABISELECT(88,44), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21171C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21171C6,    ABISELECT(96,48), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21171C11,    ABISELECT(112,56), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C7[];
extern void _ZN8S21171C7D1Ev();
extern void _ZN8S21171C7D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C7D1Ev,_ZThn4_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C7D0Ev,_ZThn4_N8S21171C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C7D1Ev,_ZThn8_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C7D0Ev,_ZThn8_N8S21171C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S21171C7D1Ev,_ZThn32_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S21171C7D0Ev,_ZThn32_N8S21171C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C7D1Ev,_ZTv0_n12_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S21171C7D1Ev,_ZThn36_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C7D0Ev,_ZTv0_n12_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S21171C7D0Ev,_ZThn36_N8S21171C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn88_N8S21171C7D1Ev,_ZThn44_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn88_N8S21171C7D0Ev,_ZThn44_N8S21171C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn96_N8S21171C7D1Ev,_ZThn48_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn96_N8S21171C7D0Ev,_ZThn48_N8S21171C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn112_N8S21171C7D1Ev,_ZThn56_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn112_N8S21171C7D0Ev,_ZThn56_N8S21171C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C7[] = {
  ABISELECT(112,56),
  ABISELECT(96,48),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(8,4),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&_ZN8S21171C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C7D0Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(64,32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C7D1Ev,_ZTv0_n12_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C7D0Ev,_ZTv0_n12_N8S21171C7D0Ev),
  ABISELECT(-80,-40),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
  ABISELECT(-96,-48),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C7[];
extern void _ZN8S21171C8D1Ev();
extern void _ZN8S21171C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C8__8S21171C7[] = {
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(8,4),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&_ZN8S21171C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C8D0Ev,
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C58S21171C8__8S21171C7[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S21171C5D1Ev,_ZThn36_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn72_N8S21171C5D0Ev,_ZThn36_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C58S21171C8__8S21171C7[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev)();
extern void _ZN8S21171C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev)();
extern void _ZN8S21171C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C98S21171C8__8S21171C7[] = {
  0,
  0,
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S21171C9D1Ev,_ZThn32_N8S21171C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S21171C9D0Ev,_ZThn32_N8S21171C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C98S21171C8__8S21171C7[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev)();
extern void _ZN9S21171C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev)();
extern void _ZN9S21171C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C108S21171C8__8S21171C7[] = {
  ABISELECT(-8,-4),
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev)();
extern void ABISELECT(_ZThn56_N9S21171C10D1Ev,_ZThn28_N9S21171C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev)();
extern void ABISELECT(_ZThn56_N9S21171C10D0Ev,_ZThn28_N9S21171C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S21171C108S21171C8__8S21171C7[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C5__9S21171C108S21171C8__8S21171C7[] = {
  ABISELECT(8,4),
  ABISELECT(64,32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn72_N8S21171C8D1Ev,_ZThn36_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn72_N8S21171C8D0Ev,_ZThn36_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C8__8S21171C7[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C8D1Ev,_ZThn4_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C8D0Ev,_ZThn4_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C9__8S21171C8__8S21171C7[] = {
  0,
  ABISELECT(-8,-4),
  ABISELECT(64,32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C8D1Ev,_ZThn8_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C8D0Ev,_ZThn8_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C10__8S21171C8__8S21171C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21171C8D1Ev,_ZThn32_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21171C8D0Ev,_ZThn32_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C8__8S21171C7[] = {
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn88_N8S21171C8D1Ev,_ZThn44_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn88_N8S21171C8D0Ev,_ZThn44_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C4__8S21171C8__8S21171C7[] = {
  ABISELECT(-80,-40),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void _ZN8S21171C2D1Ev();
extern void _ZN8S21171C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&_ZN8S21171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C2__8S21171C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev),
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__A1__8S21171C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZThn64_N8S21171C5D1Ev,_ZThn32_N8S21171C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
extern void ABISELECT(_ZThn64_N8S21171C5D0Ev,_ZThn32_N8S21171C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__A1__8S21171C7[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev)();
extern void _ZN8S21171C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev)();
extern void _ZN8S21171C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C4__8S21171C7[] = {
  ABISELECT(-80,-40),
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C5__8S21171C4__8S21171C7[] = {
  ABISELECT(80,40),
  ABISELECT(64,32),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C4__8S21171C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev),
};
extern void _ZN8S21171C6D1Ev();
extern void _ZN8S21171C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C6__8S21171C7[] = {
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&_ZN8S21171C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C6__8S21171C7[] = {
  ABISELECT(32,16),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S21171C6__8S21171C7[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev),
};
extern void _ZN9S21171C11D1Ev();
extern void _ZN9S21171C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21171C11__8S21171C7[] = {
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&_ZN9S21171C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21171C11D0Ev,
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C59S21171C11__A2__8S21171C7[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C59S21171C11__A2__8S21171C7[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S21171C11__8S21171C7[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C2__9S21171C11__8S21171C7[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev),
};
static  VTT_ENTRY vtt_S21171C7[] = {
  {&(_ZTV8S21171C7[8]),  8,56},
  {&(_tg__ZTV8S21171C8__8S21171C7[6]),  6,8},
  {&(_tg__ZTV8S21171C58S21171C8__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C58S21171C8__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C98S21171C8__8S21171C7[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21171C98S21171C8__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C98S21171C8__8S21171C7[5]),  5,7},
  {&(_tg__ZTV9S21171C108S21171C8__8S21171C7[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S21171C108S21171C8__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C5__9S21171C108S21171C8__8S21171C7[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21171C8__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C9__8S21171C8__8S21171C7[5]),  5,7},
  {&(_tg__ZTV8S21171C9__8S21171C8__8S21171C7[5]),  5,7},
  {&(_tg__ZTV9S21171C10__8S21171C8__8S21171C7[5]),  5,7},
  {&(_tg__ZTV8S21171C2__8S21171C8__8S21171C7[4]),  4,6},
  {&(_tg__ZTV8S21171C4__8S21171C8__8S21171C7[5]),  5,7},
  {&(_ZTV8S21171C7[28]),  28,56},
  {&(_ZTV8S21171C7[33]),  33,56},
  {&(_ZTV8S21171C7[15]),  15,56},
  {&(_ZTV8S21171C7[15]),  15,56},
  {&(_ZTV8S21171C7[22]),  22,56},
  {&(_ZTV8S21171C7[40]),  40,56},
  {&(_ZTV8S21171C7[47]),  47,56},
  {&(_ZTV8S21171C7[54]),  54,56},
  {&(_tg__ZTV8S21171C2__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C2__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C5__A1__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__A1__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C4__8S21171C7[5]),  5,7},
  {&(_tg__ZTV8S21171C5__8S21171C4__8S21171C7[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21171C4__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C6__8S21171C7[4]),  4,6},
  {&(_tg__ZTV8S21171C2__8S21171C6__8S21171C7[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S21171C6__8S21171C7[3]),  3,5},
  {&(_tg__ZTV9S21171C11__8S21171C7[4]),  4,6},
  {&(_tg__ZTV8S21171C59S21171C11__A2__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C59S21171C11__A2__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__9S21171C11__8S21171C7[3]),  3,5},
  {&(_tg__ZTV8S21171C2__9S21171C11__8S21171C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21171C7[];
extern  VTBL_ENTRY _ZTV8S21171C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C7[];
static VTBL_ENTRY alt_thunk_names134[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21171C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21171C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21171C8D0Ev,_ZThn44_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C8D0Ev,_ZThn32_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C8D0Ev,_ZThn8_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C8D0Ev,_ZThn4_N8S21171C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21171C8D1Ev,_ZThn44_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C8D1Ev,_ZThn32_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C8D1Ev,_ZThn8_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C8D1Ev,_ZThn4_N8S21171C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21171C8D0Ev,_ZThn36_N8S21171C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21171C8D1Ev,_ZThn36_N8S21171C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21171C10D0Ev,_ZThn28_N9S21171C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S21171C10D1Ev,_ZThn28_N9S21171C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21171C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21171C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C9D0Ev,_ZThn32_N8S21171C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C9D1Ev,_ZThn32_N8S21171C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21171C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21171C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C5D0Ev,_ZThn32_N8S21171C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21171C5D0Ev,_ZThn36_N8S21171C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C5D1Ev,_ZThn32_N8S21171C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21171C5D1Ev,_ZThn36_N8S21171C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21171C7D0Ev,_ZThn56_N8S21171C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21171C7D0Ev,_ZThn48_N8S21171C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21171C7D1Ev,_ZThn56_N8S21171C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S21171C7D1Ev,_ZThn48_N8S21171C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C7D0Ev,_ZTv0_n12_N8S21171C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21171C7D0Ev,_ZThn36_N8S21171C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C7D1Ev,_ZTv0_n12_N8S21171C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21171C7D1Ev,_ZThn36_N8S21171C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21171C7D0Ev,_ZThn44_N8S21171C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C7D0Ev,_ZThn32_N8S21171C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C7D0Ev,_ZThn8_N8S21171C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C7D0Ev,_ZThn4_N8S21171C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S21171C7D1Ev,_ZThn44_N8S21171C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C7D1Ev,_ZThn32_N8S21171C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C7D1Ev,_ZThn8_N8S21171C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C7D1Ev,_ZThn4_N8S21171C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C7 = {  "S21171C7", // class name
  bases_S21171C7, 12,
  &(vtc_S21171C7[0]), // expected_vtbl_contents
  &(vtt_S21171C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S21171C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21171C7),56, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C7),39, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names134,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21171C1  : virtual S21171C2 , virtual S21171C4 , virtual S21171C6 , virtual S21171C7 {
  virtual  ~S21171C1(); // _ZN8S21171C1D2Ev
  S21171C1(); // tgen
};
//SIG(1 S21171C1) C1{ VBC2{ VBC3{ vd m Fs} vd} VBC4{ VBC5{ VBC3} vd} VBC6{ BC3 VBC2 vd} VBC7{ VBC2 BC8{ BC5 BC9{ VBC3 VBC5 vd} BC10{ VBC3 VBC5} VBC2 VBC4 vd Fi:6} VBC6 VBC11{ VBC3 VBC2 BC5 vd Fi} vd Fp[4]} vd}


 S21171C1 ::~S21171C1(){ note_dtor("S21171C1", this);}
S21171C1 ::S21171C1(){ note_ctor("S21171C1", this);} // tgen

static void Test_S21171C1()
{
  extern Class_Descriptor cd_S21171C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S21171C1, buf);
    S21171C1 *dp, &lv = *(dp=new (buf) S21171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S21171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21171C1)");
    check_base_class_offset(lv, (S19859C6*)(S21171C2*), ABISELECT(8,4), "S21171C1");
    /*is_ambiguous_... S21171C1::S21171C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C5*), ABISELECT(8,4), "S21171C1");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C5*)(S21171C8*)(S21171C7*), ABISELECT(8,4), "S21171C1");
    check_base_class_offset(lv, (S19859C6*)(S21171C9*)(S21171C8*)(S21171C7*), ABISELECT(8,4), "S21171C1");
    check_base_class_offset(lv, (S19859C6*)(S21171C10*)(S21171C8*)(S21171C7*), ABISELECT(8,4), "S21171C1");
    check_base_class_offset(lv, (S19859C6*)(S21171C11*), ABISELECT(8,4), "S21171C1");
    check_base_class_offset(lv, (S19859C6*)(S21171C5*)(S21171C11*), ABISELECT(8,4), "S21171C1");
    check_base_class_offset(lv, (S21171C2*), 0, "S21171C1");
    check_base_class_offset(lv, (S21171C2*)(S21171C6*), 0, "S21171C1");
    check_base_class_offset(lv, (S21171C2*)(S21171C7*), 0, "S21171C1");
    check_base_class_offset(lv, (S21171C2*)(S21171C8*)(S21171C7*), 0, "S21171C1");
    check_base_class_offset(lv, (S21171C2*)(S21171C11*), 0, "S21171C1");
    check_base_class_offset(lv, (S21171C5*)(S21171C4*), ABISELECT(24,12), "S21171C1");
    check_base_class_offset(lv, (S21171C5*)(S21171C9*)(S21171C8*)(S21171C7*), ABISELECT(24,12), "S21171C1");
    check_base_class_offset(lv, (S21171C5*)(S21171C10*)(S21171C8*)(S21171C7*), ABISELECT(24,12), "S21171C1");
    check_base_class_offset(lv, (S21171C4*), ABISELECT(24,12), "S21171C1");
    check_base_class_offset(lv, (S21171C4*)(S21171C8*)(S21171C7*), ABISELECT(24,12), "S21171C1");
    /*is_ambiguous_... S21171C6::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21171C6*), ABISELECT(32,16), "S21171C1");
    check_base_class_offset(lv, (S21171C6*), ABISELECT(32,16), "S21171C1");
    check_base_class_offset(lv, (S21171C6*)(S21171C7*), ABISELECT(32,16), "S21171C1");
    /*is_ambiguous_... S21171C8::S21171C5 */ AMB_check_base_class_offset(lv, (S21171C5*)(S21171C8*)(S21171C7*), ABISELECT(48,24), "S21171C1");
    check_base_class_offset(lv, (S21171C9*)(S21171C8*)(S21171C7*), ABISELECT(56,28), "S21171C1");
    check_base_class_offset(lv, (S21171C10*)(S21171C8*)(S21171C7*), ABISELECT(64,32), "S21171C1");
    check_base_class_offset(lv, (S21171C8*)(S21171C7*), ABISELECT(48,24), "S21171C1");
    check_base_class_offset(lv, (S21171C5*)(S21171C11*), ABISELECT(112,56), "S21171C1");
    check_base_class_offset(lv, (S21171C11*)(S21171C7*), ABISELECT(112,56), "S21171C1");
    check_base_class_offset(lv, (S21171C7*), ABISELECT(48,24), "S21171C1");
    test_class_info(&lv, &cd_S21171C1);
    dp->~S21171C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21171C1(Test_S21171C1, "S21171C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S21171C1C1Ev();
extern void _ZN8S21171C1D2Ev();
Name_Map name_map_S21171C1[] = {
  NSPAIR(_ZN8S21171C1C1Ev),
  NSPAIR(_ZN8S21171C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C2;
extern VTBL_ENTRY _ZTI8S21171C2[];
extern  VTBL_ENTRY _ZTV8S21171C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C2[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C4;
extern VTBL_ENTRY _ZTI8S21171C4[];
extern  VTBL_ENTRY _ZTV8S21171C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C4[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21171C6;
extern VTBL_ENTRY _ZTI8S21171C6[];
extern  VTBL_ENTRY _ZTV8S21171C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C6[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C9;
extern VTBL_ENTRY _ZTI8S21171C9[];
extern  VTBL_ENTRY _ZTV8S21171C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C9[];
extern Class_Descriptor cd_S21171C10;
extern VTBL_ENTRY _ZTI9S21171C10[];
extern  VTBL_ENTRY _ZTV9S21171C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C10[];
extern Class_Descriptor cd_S21171C8;
extern VTBL_ENTRY _ZTI8S21171C8[];
extern  VTBL_ENTRY _ZTV8S21171C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C8[];
extern Class_Descriptor cd_S21171C5;
extern VTBL_ENTRY _ZTI8S21171C5[];
extern  VTBL_ENTRY _ZTV8S21171C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C5[];
extern Class_Descriptor cd_S21171C11;
extern VTBL_ENTRY _ZTI9S21171C11[];
extern  VTBL_ENTRY _ZTV9S21171C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21171C11[];
extern Class_Descriptor cd_S21171C7;
extern VTBL_ENTRY _ZTI8S21171C7[];
extern  VTBL_ENTRY _ZTV8S21171C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C7[];
static Base_Class bases_S21171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21171C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21171C4,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21171C6,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21171C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21171C9,    ABISELECT(56,28), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21171C10,    ABISELECT(64,32), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21171C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21171C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21171C11,    ABISELECT(112,56), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21171C7,    ABISELECT(48,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21171C1[];
extern void _ZN8S21171C1D1Ev();
extern void _ZN8S21171C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21171C1D1Ev,_ZTv0_n12_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C1D1Ev,_ZThn4_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C1D0Ev,_ZTv0_n12_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C1D0Ev,_ZThn4_N8S21171C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S21171C1D1Ev,_ZThn12_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S21171C1D0Ev,_ZThn12_N8S21171C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C1D1Ev,_ZTv0_n20_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21171C1D1Ev,_ZThn16_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C1D0Ev,_ZTv0_n20_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21171C1D0Ev,_ZThn16_N8S21171C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21171C1D1Ev,_ZTv0_n36_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S21171C1D1Ev,_ZThn24_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21171C1D0Ev,_ZTv0_n36_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S21171C1D0Ev,_ZThn24_N8S21171C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S21171C1D1Ev,_ZThn28_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S21171C1D0Ev,_ZThn28_N8S21171C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S21171C1D1Ev,_ZThn32_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S21171C1D0Ev,_ZThn32_N8S21171C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C1D1Ev,_ZTv0_n20_N8S21171C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S21171C1D1Ev,_ZThn56_N8S21171C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C1D0Ev,_ZTv0_n20_N8S21171C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S21171C1D0Ev,_ZThn56_N8S21171C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21171C1[] = {
  ABISELECT(112,56),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&_ZN8S21171C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C1D1Ev,_ZTv0_n12_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C1D0Ev,_ZTv0_n12_N8S21171C1D0Ev),
  0,
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C1D1Ev,_ZTv0_n20_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C1D0Ev,_ZTv0_n20_N8S21171C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(64,32),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21171C1D1Ev,_ZTv0_n36_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21171C1D0Ev,_ZTv0_n36_N8S21171C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-56,-28),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-64,-32),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S21171C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C1D1Ev,_ZTv0_n20_N8S21171C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C1D0Ev,_ZTv0_n20_N8S21171C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21171C1[];
extern void _ZN8S21171C2D1Ev();
extern void _ZN8S21171C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&_ZN8S21171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C2__8S21171C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev)();
extern void _ZN8S21171C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev)();
extern void _ZN8S21171C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C4__8S21171C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C4__8S21171C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21171C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D1Ev,_ZTv0_n12_N8S21171C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C4D0Ev,_ZTv0_n12_N8S21171C4D0Ev),
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C5__8S21171C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C5__8S21171C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void _ZN8S21171C6D1Ev();
extern void _ZN8S21171C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C6__8S21171C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&_ZN8S21171C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C6D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C6__8S21171C1[] = {
  ABISELECT(32,16),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C6D1Ev,_ZTv0_n16_N8S21171C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C6D0Ev,_ZTv0_n16_N8S21171C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S21171C6__8S21171C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21171C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C6D1Ev,_ZTv0_n12_N8S21171C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C6D0Ev,_ZTv0_n12_N8S21171C6D0Ev),
};
extern void _ZN8S21171C7D1Ev();
extern void _ZN8S21171C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C7__8S21171C1[] = {
  ABISELECT(64,32),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&_ZN8S21171C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C7D0Ev,
};
extern void _ZN8S21171C8D1Ev();
extern void _ZN8S21171C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&_ZN8S21171C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C8D0Ev,
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C58S21171C88S21171C7__A1__8S21171C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C58S21171C88S21171C7__A1__8S21171C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev)();
extern void _ZN8S21171C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev)();
extern void _ZN8S21171C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C98S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(-32,-16),
  0,
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C98S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D1Ev,_ZTv0_n12_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C9D0Ev,_ZTv0_n12_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C5__8S21171C98S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21171C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev)();
extern void _ZN9S21171C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev)();
extern void _ZN9S21171C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C108S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S21171C108S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D1Ev,_ZTv0_n12_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C10D0Ev,_ZTv0_n12_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C5__9S21171C108S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S21171C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C8D1Ev,_ZTv0_n12_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C8D0Ev,_ZTv0_n12_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C8D1Ev,_ZThn4_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C8D0Ev,_ZThn4_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C9__8S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-48,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C4__8S21171C88S21171C7__8S21171C1[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C8D1Ev,_ZThn8_N8S21171C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C8D0Ev,_ZThn8_N8S21171C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C10__8S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C88S21171C7__8S21171C1[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S21171C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C2__8S21171C7__8S21171C1[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21171C7D1Ev,_ZTv0_n12_N8S21171C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C7D0Ev,_ZTv0_n12_N8S21171C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C7__8S21171C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C7D1Ev,_ZTv0_n12_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C7D0Ev,_ZTv0_n12_N8S21171C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21171C7D1Ev,_ZThn4_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S21171C7D0Ev,_ZThn4_N8S21171C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21171C98S21171C8__8S21171C7__8S21171C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-48,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C4__8S21171C7__8S21171C1[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S21171C7D1Ev,_ZThn8_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S21171C7D0Ev,_ZThn8_N8S21171C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C108S21171C8__8S21171C7__8S21171C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C6__8S21171C7__8S21171C1[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S21171C7D1Ev,_ZThn32_N8S21171C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S21171C7D0Ev,_ZThn32_N8S21171C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S21171C11__8S21171C7__8S21171C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21171C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev),
};
extern void _ZN9S21171C11D1Ev();
extern void _ZN9S21171C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21171C11__8S21171C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&_ZN9S21171C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21171C11D0Ev,
};
extern void _ZN8S21171C5D1Ev();
extern void _ZN8S21171C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21171C59S21171C11__A2__8S21171C1[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&_ZN8S21171C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21171C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21171C59S21171C11__A2__8S21171C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI8S21171C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D1Ev,_ZTv0_n12_N8S21171C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21171C5D0Ev,_ZTv0_n12_N8S21171C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__9S21171C11__8S21171C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C11D1Ev,_ZTv0_n12_N9S21171C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21171C11D0Ev,_ZTv0_n12_N9S21171C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21171C2__9S21171C11__8S21171C1[] = {
  ABISELECT(112,56),
  ABISELECT(8,4),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI9S21171C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C11D1Ev,_ZTv0_n16_N9S21171C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21171C11D0Ev,_ZTv0_n16_N9S21171C11D0Ev),
};
static  VTT_ENTRY vtt_S21171C1[] = {
  {&(_ZTV8S21171C1[10]),  10,63},
  {&(_ZTV8S21171C1[10]),  10,63},
  {&(_ZTV8S21171C1[15]),  15,63},
  {&(_ZTV8S21171C1[22]),  22,63},
  {&(_ZTV8S21171C1[22]),  22,63},
  {&(_ZTV8S21171C1[29]),  29,63},
  {&(_ZTV8S21171C1[40]),  40,63},
  {&(_ZTV8S21171C1[47]),  47,63},
  {&(_ZTV8S21171C1[54]),  54,63},
  {&(_ZTV8S21171C1[61]),  61,63},
  {&(_tg__ZTV8S21171C2__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C2__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C4__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C4__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21171C4__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C5__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C5__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C6__8S21171C1[4]),  4,6},
  {&(_tg__ZTV8S21171C2__8S21171C6__8S21171C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S21171C6__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C7__8S21171C1[8]),  8,10},
  {&(_tg__ZTV8S21171C88S21171C7__8S21171C1[6]),  6,8},
  {&(_tg__ZTV8S21171C58S21171C88S21171C7__A1__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C58S21171C88S21171C7__A1__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C98S21171C88S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21171C98S21171C88S21171C7__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C5__8S21171C98S21171C88S21171C7__8S21171C1[4]),  4,6},
  {&(_tg__ZTV9S21171C108S21171C88S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__9S21171C108S21171C88S21171C7__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C5__9S21171C108S21171C88S21171C7__8S21171C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21171C88S21171C7__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C9__8S21171C88S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C4__8S21171C88S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV9S21171C10__8S21171C88S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C2__8S21171C88S21171C7__8S21171C1[4]),  4,6},
  {&(_tg__ZTV8S21171C4__8S21171C88S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C2__8S21171C7__8S21171C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21171C7__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C98S21171C8__8S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C4__8S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV9S21171C108S21171C8__8S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C4__8S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV8S21171C6__8S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV9S21171C11__8S21171C7__8S21171C1[5]),  5,7},
  {&(_tg__ZTV9S21171C11__8S21171C1[4]),  4,6},
  {&(_tg__ZTV8S21171C59S21171C11__A2__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21171C59S21171C11__A2__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__9S21171C11__8S21171C1[3]),  3,5},
  {&(_tg__ZTV8S21171C2__9S21171C11__8S21171C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21171C1[];
extern  VTBL_ENTRY _ZTV8S21171C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21171C1[];
static VTBL_ENTRY alt_thunk_names135[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21171C7D0Ev,_ZTv0_n20_N8S21171C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C7D0Ev,_ZThn32_N8S21171C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21171C7D1Ev,_ZTv0_n20_N8S21171C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C7D1Ev,_ZThn32_N8S21171C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C7D0Ev,_ZTv0_n16_N8S21171C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C7D0Ev,_ZThn8_N8S21171C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C7D0Ev,_ZThn4_N8S21171C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C7D1Ev,_ZTv0_n16_N8S21171C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C7D1Ev,_ZThn8_N8S21171C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C7D1Ev,_ZThn4_N8S21171C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C8D0Ev,_ZTv0_n16_N8S21171C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C8D0Ev,_ZThn8_N8S21171C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C8D0Ev,_ZThn4_N8S21171C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C8D1Ev,_ZTv0_n16_N8S21171C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21171C8D1Ev,_ZThn8_N8S21171C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C8D1Ev,_ZThn4_N8S21171C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C10D0Ev,_ZTv0_n16_N9S21171C10D0Ev), // 
  (VTBL_ENTRY)_ZN9S21171C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21171C10D1Ev,_ZTv0_n16_N9S21171C10D1Ev), // 
  (VTBL_ENTRY)_ZN9S21171C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C9D0Ev,_ZTv0_n16_N8S21171C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21171C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C9D1Ev,_ZTv0_n16_N8S21171C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21171C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C4D0Ev,_ZTv0_n16_N8S21171C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S21171C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C4D1Ev,_ZTv0_n16_N8S21171C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S21171C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D0Ev,_ZTv0_n12_N8S21171C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D0Ev,_ZThn4_N8S21171C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C2D1Ev,_ZTv0_n12_N8S21171C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C2D1Ev,_ZThn4_N8S21171C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21171C1D0Ev,_ZTv0_n36_N8S21171C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21171C1D0Ev,_ZThn24_N8S21171C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21171C1D1Ev,_ZTv0_n36_N8S21171C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21171C1D1Ev,_ZThn24_N8S21171C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21171C1D0Ev,_ZTv0_n20_N8S21171C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21171C1D0Ev,_ZThn56_N8S21171C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21171C1D0Ev,_ZThn16_N8S21171C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21171C1D1Ev,_ZTv0_n20_N8S21171C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S21171C1D1Ev,_ZThn56_N8S21171C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21171C1D1Ev,_ZThn16_N8S21171C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C1D0Ev,_ZTv0_n16_N8S21171C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C1D0Ev,_ZThn32_N8S21171C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21171C1D0Ev,_ZThn28_N8S21171C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C1D0Ev,_ZThn12_N8S21171C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21171C1D1Ev,_ZTv0_n16_N8S21171C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21171C1D1Ev,_ZThn32_N8S21171C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21171C1D1Ev,_ZThn28_N8S21171C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21171C1D1Ev,_ZThn12_N8S21171C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C1D0Ev,_ZTv0_n12_N8S21171C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C1D0Ev,_ZThn4_N8S21171C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21171C1D1Ev,_ZTv0_n12_N8S21171C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21171C1D1Ev,_ZThn4_N8S21171C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21171C1 = {  "S21171C1", // class name
  bases_S21171C1, 13,
  &(vtc_S21171C1[0]), // expected_vtbl_contents
  &(vtt_S21171C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S21171C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21171C1),63, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21171C1),49, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names135,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C5  : S5217C60_nt {
  void *s7495c5f0[2];
};
//SIG(-1 S7495C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S7495C5()
{
  extern Class_Descriptor cd_S7495C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7495C5, buf);
    S7495C5 &lv = *(new (buf) S7495C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7495C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C5)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S7495C5");
    check_field_offset(lv, s7495c5f0, ABISELECT(8,4), "S7495C5.s7495c5f0");
    test_class_info(&lv, &cd_S7495C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C5(Test_S7495C5, "S7495C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S7495C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C5[];
Class_Descriptor cd_S7495C5 = {  "S7495C5", // class name
  bases_S7495C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7495C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C7  : virtual S5217C60_nt , virtual S7495C5 {
  virtual  ~S7495C7(); // _ZN7S7495C7D2Ev
  S7495C7(); // tgen
};
//SIG(-1 S7495C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S7495C7 ::~S7495C7(){ note_dtor("S7495C7", this);}
S7495C7 ::S7495C7(){ note_ctor("S7495C7", this);} // tgen

static void Test_S7495C7()
{
  extern Class_Descriptor cd_S7495C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7495C7, buf);
    S7495C7 *dp, &lv = *(dp=new (buf) S7495C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7495C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C7)");
    /*is_ambiguous_... S7495C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7495C7");
    check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*), ABISELECT(16,8), "S7495C7");
    check_base_class_offset(lv, (S7495C5*), ABISELECT(16,8), "S7495C7");
    test_class_info(&lv, &cd_S7495C7);
    dp->~S7495C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C7(Test_S7495C7, "S7495C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7495C7C1Ev();
extern void _ZN7S7495C7D2Ev();
Name_Map name_map_S7495C7[] = {
  NSPAIR(_ZN7S7495C7C1Ev),
  NSPAIR(_ZN7S7495C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
static Base_Class bases_S7495C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C7[];
extern void _ZN7S7495C7D1Ev();
extern void _ZN7S7495C7D0Ev();
static  VTBL_ENTRY vtc_S7495C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C7[0]),
  (VTBL_ENTRY)&_ZN7S7495C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S7495C7[];
static  VTT_ENTRY vtt_S7495C7[] = {
  {&(_ZTV7S7495C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7495C7[];
extern  VTBL_ENTRY _ZTV7S7495C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C7[];
Class_Descriptor cd_S7495C7 = {  "S7495C7", // class name
  bases_S7495C7, 3,
  &(vtc_S7495C7[0]), // expected_vtbl_contents
  &(vtt_S7495C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7495C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7495C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7495C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C4  : virtual S7495C5 , virtual S5217C60_nt , virtual S7495C7 , virtual S2265C38 {
  int s7495c4f0[9];
  virtual  ~S7495C4(); // _ZN7S7495C4D2Ev
  S7495C4(); // tgen
};
//SIG(-1 S7495C4) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S7495C4 ::~S7495C4(){ note_dtor("S7495C4", this);}
S7495C4 ::S7495C4(){ note_ctor("S7495C4", this);} // tgen

static void Test_S7495C4()
{
  extern Class_Descriptor cd_S7495C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S7495C4, buf);
    S7495C4 *dp, &lv = *(dp=new (buf) S7495C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7495C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C4)");
    check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*), ABISELECT(48,40), "S7495C4");
    check_base_class_offset(lv, (S7495C5*), ABISELECT(48,40), "S7495C4");
    check_base_class_offset(lv, (S7495C5*)(S7495C7*), ABISELECT(48,40), "S7495C4");
    /*is_ambiguous_... S7495C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S7495C4");
    /*is_ambiguous_... S7495C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C7*), ABISELECT(72,52), "S7495C4");
    check_base_class_offset(lv, (S7495C7*), 0, "S7495C4");
    check_base_class_offset(lv, (S2265C38*), 0, "S7495C4");
    check_field_offset(lv, s7495c4f0, ABISELECT(8,4), "S7495C4.s7495c4f0");
    test_class_info(&lv, &cd_S7495C4);
    dp->~S7495C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C4(Test_S7495C4, "S7495C4", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S7495C4C1Ev();
extern void _ZN7S7495C4D2Ev();
Name_Map name_map_S7495C4[] = {
  NSPAIR(_ZN7S7495C4C1Ev),
  NSPAIR(_ZN7S7495C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C7;
extern VTBL_ENTRY _ZTI7S7495C7[];
extern  VTBL_ENTRY _ZTV7S7495C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7495C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7495C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C4[];
extern void _ZN7S7495C4D1Ev();
extern void _ZN7S7495C4D0Ev();
static  VTBL_ENTRY vtc_S7495C4[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C4[0]),
  (VTBL_ENTRY)&_ZN7S7495C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S7495C4[];
extern void _ZN7S7495C7D1Ev();
extern void _ZN7S7495C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7495C7__7S7495C4[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C7[0]),
  (VTBL_ENTRY)&_ZN7S7495C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C7D0Ev,
};
static  VTT_ENTRY vtt_S7495C4[] = {
  {&(_ZTV7S7495C4[7]),  7,9},
  {&(_ZTV7S7495C4[7]),  7,9},
  {&(_tg__ZTV7S7495C7__7S7495C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7495C4[];
extern  VTBL_ENTRY _ZTV7S7495C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C4[];
Class_Descriptor cd_S7495C4 = {  "S7495C4", // class name
  bases_S7495C4, 5,
  &(vtc_S7495C4[0]), // expected_vtbl_contents
  &(vtt_S7495C4[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S7495C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7495C4),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7495C4),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C2  : virtual S2265C38 , virtual S7495C4 {
  short s7495c2f0;
  char s7495c2f1;
  ~S7495C2(); // tgen
  S7495C2(); // tgen
};
//SIG(-1 S7495C2) C1{ VBC2{ m} VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC2 vd Fi[9]} Fs Fc}


S7495C2 ::~S7495C2(){ note_dtor("S7495C2", this);} // tgen
S7495C2 ::S7495C2(){ note_ctor("S7495C2", this);} // tgen

static void Test_S7495C2()
{
  extern Class_Descriptor cd_S7495C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S7495C2, buf);
    S7495C2 *dp, &lv = *(dp=new (buf) S7495C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S7495C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C2)");
    check_base_class_offset(lv, (S2265C38*), 0, "S7495C2");
    check_base_class_offset(lv, (S2265C38*)(S7495C4*), 0, "S7495C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*), ABISELECT(64,48), "S7495C2");
    check_base_class_offset(lv, (S7495C5*)(S7495C4*), ABISELECT(64,48), "S7495C2");
    check_base_class_offset(lv, (S7495C5*)(S7495C7*), ABISELECT(64,48), "S7495C2");
    /*is_ambiguous_... S7495C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C4*), ABISELECT(88,60), "S7495C2");
    /*is_ambiguous_... S7495C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C7*), ABISELECT(88,60), "S7495C2");
    check_base_class_offset(lv, (S7495C7*)(S7495C4*), 0, "S7495C2");
    check_base_class_offset(lv, (S7495C4*), ABISELECT(16,8), "S7495C2");
    check_field_offset(lv, s7495c2f0, ABISELECT(8,4), "S7495C2.s7495c2f0");
    check_field_offset(lv, s7495c2f1, ABISELECT(10,6), "S7495C2.s7495c2f1");
    test_class_info(&lv, &cd_S7495C2);
    dp->~S7495C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C2(Test_S7495C2, "S7495C2", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S7495C2C1Ev();
extern void _ZN7S7495C2D1Ev();
Name_Map name_map_S7495C2[] = {
  NSPAIR(_ZN7S7495C2C1Ev),
  NSPAIR(_ZN7S7495C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C7;
extern VTBL_ENTRY _ZTI7S7495C7[];
extern  VTBL_ENTRY _ZTV7S7495C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C7[];
extern Class_Descriptor cd_S7495C4;
extern VTBL_ENTRY _ZTI7S7495C4[];
extern  VTBL_ENTRY _ZTV7S7495C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C4[];
static Base_Class bases_S7495C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7495C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7495C4,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C2[];
extern void _ZN7S7495C2D1Ev();
extern void _ZN7S7495C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7495C2D1Ev,_ZTv0_n20_N7S7495C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7495C2D1Ev,_ZThn8_N7S7495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7495C2D0Ev,_ZTv0_n20_N7S7495C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7495C2D0Ev,_ZThn8_N7S7495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7495C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C2[0]),
  (VTBL_ENTRY)&_ZN7S7495C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C2D1Ev,_ZTv0_n20_N7S7495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C2D0Ev,_ZTv0_n20_N7S7495C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7495C2[];
extern void ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev)();
extern void _ZN7S7495C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev)();
extern void _ZN7S7495C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7495C4__7S7495C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7495C7__7S7495C4__7S7495C2[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7495C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev),
};
extern void _ZN7S7495C7D1Ev();
extern void _ZN7S7495C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7495C7__7S7495C2[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C7[0]),
  (VTBL_ENTRY)&_ZN7S7495C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C7D0Ev,
};
static  VTT_ENTRY vtt_S7495C2[] = {
  {&(_ZTV7S7495C2[8]),  8,19},
  {&(_ZTV7S7495C2[17]),  17,19},
  {&(_ZTV7S7495C2[8]),  8,19},
  {&(_tg__ZTV7S7495C4__7S7495C2[7]),  7,9},
  {&(_tg__ZTV7S7495C7__7S7495C4__7S7495C2[5]),  5,7},
  {&(_tg__ZTV7S7495C7__7S7495C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7495C2[];
extern  VTBL_ENTRY _ZTV7S7495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C2[];
static VTBL_ENTRY alt_thunk_names136[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7495C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7495C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C2D0Ev,_ZTv0_n20_N7S7495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7495C2D0Ev,_ZThn8_N7S7495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C2D1Ev,_ZTv0_n20_N7S7495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7495C2D1Ev,_ZThn8_N7S7495C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7495C2 = {  "S7495C2", // class name
  bases_S7495C2, 6,
  &(vtc_S7495C2[0]), // expected_vtbl_contents
  &(vtt_S7495C2[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S7495C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7495C2),19, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7495C2),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names136,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C9  : S5217C60_nt , S7495C5 {
};
//SIG(-1 S7495C9) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S7495C9()
{
  extern Class_Descriptor cd_S7495C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7495C9, buf);
    S7495C9 &lv = *(new (buf) S7495C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7495C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C9)");
    /*is_ambiguous_... S7495C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S7495C9");
    check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*), ABISELECT(8,4), "S7495C9");
    check_base_class_offset(lv, (S7495C5*), ABISELECT(8,4), "S7495C9");
    test_class_info(&lv, &cd_S7495C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C9(Test_S7495C9, "S7495C9", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
static Base_Class bases_S7495C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C9[];
Class_Descriptor cd_S7495C9 = {  "S7495C9", // class name
  bases_S7495C9, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7495C9),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C8  : S7495C9 , S7495C5 , virtual S2265C38 {
  virtual  ~S7495C8(); // _ZN7S7495C8D2Ev
  S7495C8(); // tgen
};
//SIG(-1 S7495C8) C1{ BC2{ BC3{ m Fp} BC4{ BC3 Fp[2]}} BC4 VBC5{ m} vd}


 S7495C8 ::~S7495C8(){ note_dtor("S7495C8", this);}
S7495C8 ::S7495C8(){ note_ctor("S7495C8", this);} // tgen

static void Test_S7495C8()
{
  extern Class_Descriptor cd_S7495C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7495C8, buf);
    S7495C8 *dp, &lv = *(dp=new (buf) S7495C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7495C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C8)");
    /*is_ambiguous_... S7495C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C9*), ABISELECT(8,4), "S7495C8");
    check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*)(S7495C9*), ABISELECT(16,8), "S7495C8");
    check_base_class_offset(lv, (S7495C5*)(S7495C9*), ABISELECT(16,8), "S7495C8");
    check_base_class_offset(lv, (S7495C9*), ABISELECT(8,4), "S7495C8");
    /*is_ambiguous_... S7495C8::S7495C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*), ABISELECT(40,20), "S7495C8");
    /*is_ambiguous_... S7495C8::S7495C5 */ AMB_check_base_class_offset(lv, (S7495C5*), ABISELECT(40,20), "S7495C8");
    check_base_class_offset(lv, (S2265C38*), 0, "S7495C8");
    test_class_info(&lv, &cd_S7495C8);
    dp->~S7495C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C8(Test_S7495C8, "S7495C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7495C8C1Ev();
extern void _ZN7S7495C8D2Ev();
Name_Map name_map_S7495C8[] = {
  NSPAIR(_ZN7S7495C8C1Ev),
  NSPAIR(_ZN7S7495C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S7495C9;
extern VTBL_ENTRY _ZTI7S7495C9[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7495C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7495C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C8[];
extern void _ZN7S7495C8D1Ev();
extern void _ZN7S7495C8D0Ev();
static  VTBL_ENTRY vtc_S7495C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C8[0]),
  (VTBL_ENTRY)&_ZN7S7495C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7495C8[];
static  VTT_ENTRY vtt_S7495C8[] = {
  {&(_ZTV7S7495C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7495C8[];
extern  VTBL_ENTRY _ZTV7S7495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C8[];
Class_Descriptor cd_S7495C8 = {  "S7495C8", // class name
  bases_S7495C8, 7,
  &(vtc_S7495C8[0]), // expected_vtbl_contents
  &(vtt_S7495C8[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7495C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7495C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7495C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7495C1  : S7495C2 , virtual S7495C8 , S5217C60_nt {
  ::S19032C10 s7495c1f0;
  virtual  ~S7495C1(); // _ZN7S7495C1D2Ev
  S7495C1(); // tgen
};
//SIG(1 S7495C1) C1{ BC2{ VBC3{ m} VBC4{ VBC5{ BC6{ m Fp} Fp[2]} VBC6 VBC7{ VBC6 VBC5 vd} VBC3 vd Fi[9]} Fs Fc} VBC8{ BC9{ BC6 BC5} BC5 VBC3 vd} BC6 vd FC10{ BC11{ VBC12{ VBC6 BC3 VBC13{ BC6 BC14{ BC6 Fp[2]}} VBC15{ VBC6 VBC14 vd}} FC15} vd Fi}}


 S7495C1 ::~S7495C1(){ note_dtor("S7495C1", this);}
S7495C1 ::S7495C1(){ note_ctor("S7495C1", this);} // tgen

static void Test_S7495C1()
{
  extern Class_Descriptor cd_S7495C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,41)];
    init_test(&cd_S7495C1, buf);
    S7495C1 *dp, &lv = *(dp=new (buf) S7495C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,160), "sizeof(S7495C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7495C1)");
    check_base_class_offset(lv, (S2265C38*)(S7495C2*), 0, "S7495C1");
    check_base_class_offset(lv, (S2265C38*)(S7495C4*), 0, "S7495C1");
    check_base_class_offset(lv, (S2265C38*)(S7495C8*), 0, "S7495C1");
    /*is_ambiguous_... S7495C1::S7495C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*), ABISELECT(192,112), "S7495C1");
    check_base_class_offset(lv, (S7495C5*)(S7495C4*), ABISELECT(192,112), "S7495C1");
    check_base_class_offset(lv, (S7495C5*)(S7495C7*), ABISELECT(192,112), "S7495C1");
    /*is_ambiguous_... S7495C4::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C4*), ABISELECT(216,124), "S7495C1");
    /*is_ambiguous_... S7495C7::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C7*), ABISELECT(216,124), "S7495C1");
    check_base_class_offset(lv, (S7495C7*)(S7495C4*), 0, "S7495C1");
    check_base_class_offset(lv, (S7495C4*)(S7495C2*), ABISELECT(144,72), "S7495C1");
    check_base_class_offset(lv, (S7495C2*), 0, "S7495C1");
    /*is_ambiguous_... S7495C9::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C9*)(S7495C8*), ABISELECT(232,132), "S7495C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*)(S7495C9*)(S7495C8*), ABISELECT(240,136), "S7495C1");
    check_base_class_offset(lv, (S7495C5*)(S7495C9*)(S7495C8*), ABISELECT(240,136), "S7495C1");
    check_base_class_offset(lv, (S7495C9*)(S7495C8*), ABISELECT(232,132), "S7495C1");
    /*is_ambiguous_... S7495C8::S7495C5 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7495C5*)(S7495C8*), ABISELECT(264,148), "S7495C1");
    /*is_ambiguous_... S7495C8::S7495C5 */ AMB_check_base_class_offset(lv, (S7495C5*)(S7495C8*), ABISELECT(264,148), "S7495C1");
    check_base_class_offset(lv, (S7495C8*), ABISELECT(224,128), "S7495C1");
    /*is_ambiguous_... S7495C1::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(16,8), "S7495C1");
    check_field_offset(lv, s7495c1f0, ABISELECT(24,12), "S7495C1.s7495c1f0");
    test_class_info(&lv, &cd_S7495C1);
    dp->~S7495C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7495C1(Test_S7495C1, "S7495C1", ABISELECT(288,160));

#else // __cplusplus

extern void _ZN7S7495C1C1Ev();
extern void _ZN7S7495C1D2Ev();
Name_Map name_map_S7495C1[] = {
  NSPAIR(_ZN7S7495C1C1Ev),
  NSPAIR(_ZN7S7495C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C7;
extern VTBL_ENTRY _ZTI7S7495C7[];
extern  VTBL_ENTRY _ZTV7S7495C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C7[];
extern Class_Descriptor cd_S7495C4;
extern VTBL_ENTRY _ZTI7S7495C4[];
extern  VTBL_ENTRY _ZTV7S7495C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C4[];
extern Class_Descriptor cd_S7495C2;
extern VTBL_ENTRY _ZTI7S7495C2[];
extern  VTBL_ENTRY _ZTV7S7495C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C2[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S7495C9;
extern VTBL_ENTRY _ZTI7S7495C9[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7495C5;
extern VTBL_ENTRY _ZTI7S7495C5[];
extern Class_Descriptor cd_S7495C8;
extern VTBL_ENTRY _ZTI7S7495C8[];
extern  VTBL_ENTRY _ZTV7S7495C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C8[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S7495C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(192,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(216,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7495C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7495C4,    ABISELECT(144,72), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7495C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(240,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7495C9,    ABISELECT(232,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7495C5,    ABISELECT(264,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7495C8,    ABISELECT(224,128), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7495C1[];
extern void _ZN7S7495C1D1Ev();
extern void _ZN7S7495C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7495C1D1Ev,_ZTv0_n20_N7S7495C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S7495C1D1Ev,_ZThn72_N7S7495C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7495C1D0Ev,_ZTv0_n20_N7S7495C1D0Ev)();
extern void ABISELECT(_ZThn144_N7S7495C1D0Ev,_ZThn72_N7S7495C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7495C1D1Ev,_ZTv0_n16_N7S7495C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7495C1D1Ev,_ZThn128_N7S7495C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7495C1D0Ev,_ZTv0_n16_N7S7495C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7495C1D0Ev,_ZThn128_N7S7495C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7495C1[] = {
  ABISELECT(224,128),
  0,
  ABISELECT(144,72),
  0,
  0,
  ABISELECT(192,112),
  ABISELECT(216,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C1[0]),
  (VTBL_ENTRY)&_ZN7S7495C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C1D0Ev,
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C1D1Ev,_ZTv0_n20_N7S7495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C1D0Ev,_ZTv0_n20_N7S7495C1D0Ev),
  ABISELECT(-224,-128),
  ABISELECT(-224,-128),
  ABISELECT(-224,-128),
  (VTBL_ENTRY)&(_ZTI7S7495C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7495C1D1Ev,_ZTv0_n16_N7S7495C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7495C1D0Ev,_ZTv0_n16_N7S7495C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7495C1[];
extern void _ZN7S7495C2D1Ev();
extern void _ZN7S7495C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7495C2__7S7495C1[] = {
  0,
  ABISELECT(144,72),
  0,
  0,
  ABISELECT(192,112),
  ABISELECT(216,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C2[0]),
  (VTBL_ENTRY)&_ZN7S7495C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7495C2D1Ev,_ZTv0_n20_N7S7495C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S7495C2D1Ev,_ZThn72_N7S7495C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7495C2D0Ev,_ZTv0_n20_N7S7495C2D0Ev)();
extern void ABISELECT(_ZThn144_N7S7495C2D0Ev,_ZThn72_N7S7495C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7495C4__7S7495C2__7S7495C1[] = {
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7495C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C2D1Ev,_ZTv0_n20_N7S7495C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C2D0Ev,_ZTv0_n20_N7S7495C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev)();
extern void _ZN7S7495C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev)();
extern void _ZN7S7495C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7495C4__7S7495C1[] = {
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7495C7__7S7495C4__7S7495C1[] = {
  ABISELECT(144,72),
  ABISELECT(192,112),
  ABISELECT(216,124),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI7S7495C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev),
};
extern void _ZN7S7495C7D1Ev();
extern void _ZN7S7495C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7495C7__7S7495C1[] = {
  ABISELECT(192,112),
  ABISELECT(216,124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C7[0]),
  (VTBL_ENTRY)&_ZN7S7495C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C7D0Ev,
};
extern void _ZN7S7495C8D1Ev();
extern void _ZN7S7495C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7495C8__7S7495C1[] = {
  ABISELECT(-224,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S7495C8[0]),
  (VTBL_ENTRY)&_ZN7S7495C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7495C8D0Ev,
};
static  VTT_ENTRY vtt_S7495C1[] = {
  {&(_ZTV7S7495C1[9]),  9,26},
  {&(_tg__ZTV7S7495C2__7S7495C1[8]),  8,10},
  {&(_tg__ZTV7S7495C4__7S7495C2__7S7495C1[7]),  7,9},
  {&(_tg__ZTV7S7495C2__7S7495C1[8]),  8,10},
  {&(_ZTV7S7495C1[18]),  18,26},
  {&(_ZTV7S7495C1[9]),  9,26},
  {&(_ZTV7S7495C1[24]),  24,26},
  {&(_tg__ZTV7S7495C4__7S7495C1[7]),  7,9},
  {&(_tg__ZTV7S7495C7__7S7495C4__7S7495C1[5]),  5,7},
  {&(_tg__ZTV7S7495C7__7S7495C1[4]),  4,6},
  {&(_tg__ZTV7S7495C8__7S7495C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7495C1[];
extern  VTBL_ENTRY _ZTV7S7495C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7495C1[];
static VTBL_ENTRY alt_thunk_names137[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C4D0Ev,_ZTv0_n20_N7S7495C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7495C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C4D1Ev,_ZTv0_n20_N7S7495C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7495C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C2D0Ev,_ZTv0_n20_N7S7495C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7495C2D0Ev,_ZThn72_N7S7495C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C2D1Ev,_ZTv0_n20_N7S7495C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7495C2D1Ev,_ZThn72_N7S7495C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7495C1D0Ev,_ZTv0_n16_N7S7495C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7495C1D0Ev,_ZThn128_N7S7495C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7495C1D1Ev,_ZTv0_n16_N7S7495C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7495C1D1Ev,_ZThn128_N7S7495C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C1D0Ev,_ZTv0_n20_N7S7495C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7495C1D0Ev,_ZThn72_N7S7495C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7495C1D1Ev,_ZTv0_n20_N7S7495C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7495C1D1Ev,_ZThn72_N7S7495C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7495C1 = {  "S7495C1", // class name
  bases_S7495C1, 15,
  &(vtc_S7495C1[0]), // expected_vtbl_contents
  &(vtt_S7495C1[0]), // expected_vtt_contents
  ABISELECT(288,160), // object size
  NSPAIRA(_ZTI7S7495C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7495C1),26, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7495C1),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names137,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C2  {
  int s17256c2f0[8];
};
//SIG(-1 S17256C2) C1{ Fi[8]}



static void Test_S17256C2()
{
  {
    init_simple_test("S17256C2");
    S17256C2 lv;
    check2(sizeof(lv), 32, "sizeof(S17256C2)");
    check2(__alignof__(lv), 4, "__alignof__(S17256C2)");
    check_field_offset(lv, s17256c2f0, 0, "S17256C2.s17256c2f0");
  }
}
static Arrange_To_Call_Me vS17256C2(Test_S17256C2, "S17256C2", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C3_nt  {
  int s17256c3f0[4];
};
//SIG(-1 S17256C3_nt) C1{ Fi[4]}



//skip512 S17256C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C6_nt  {
  short s17256c6f0[6];
  int s17256c6f1;
};
//SIG(-1 S17256C6_nt) C1{ Fs[6] Fi}



//skip512 S17256C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C5  {
  ::S17256C6_nt s17256c5f0;
  int s17256c5f1;
  char s17256c5f2[4];
  int s17256c5f3[7];
};
//SIG(-1 S17256C5) C1{ FC2{ Fs[6] Fi} Fi Fc[4] Fi[7]}



static void Test_S17256C5()
{
  {
    init_simple_test("S17256C5");
    S17256C5 lv;
    check2(sizeof(lv), 52, "sizeof(S17256C5)");
    check2(__alignof__(lv), 4, "__alignof__(S17256C5)");
    check_field_offset(lv, s17256c5f0, 0, "S17256C5.s17256c5f0");
    check_field_offset(lv, s17256c5f1, 16, "S17256C5.s17256c5f1");
    check_field_offset(lv, s17256c5f2, 20, "S17256C5.s17256c5f2");
    check_field_offset(lv, s17256c5f3, 24, "S17256C5.s17256c5f3");
  }
}
static Arrange_To_Call_Me vS17256C5(Test_S17256C5, "S17256C5", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C8  {
  char s17256c8f0[2];
  short s17256c8f1;
  char s17256c8f2[4];
};
//SIG(-1 S17256C8) C1{ Fc[2] Fs Fc[4]}



static void Test_S17256C8()
{
  {
    init_simple_test("S17256C8");
    S17256C8 lv;
    check2(sizeof(lv), 8, "sizeof(S17256C8)");
    check2(__alignof__(lv), 2, "__alignof__(S17256C8)");
    check_field_offset(lv, s17256c8f0, 0, "S17256C8.s17256c8f0");
    check_field_offset(lv, s17256c8f1, 2, "S17256C8.s17256c8f1");
    check_field_offset(lv, s17256c8f2, 4, "S17256C8.s17256c8f2");
  }
}
static Arrange_To_Call_Me vS17256C8(Test_S17256C8, "S17256C8", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C7  {
  char s17256c7f0[4];
  ::S17256C8 s17256c7f1[32];
};
//SIG(-1 S17256C7) C1{ Fc[4] FC2{ Fc[2] Fs Fc[4]}[32]}



static void Test_S17256C7()
{
  {
    init_simple_test("S17256C7");
    S17256C7 lv;
    check2(sizeof(lv), 260, "sizeof(S17256C7)");
    check2(__alignof__(lv), 2, "__alignof__(S17256C7)");
    check_field_offset(lv, s17256c7f0, 0, "S17256C7.s17256c7f0");
    check_field_offset(lv, s17256c7f1, 4, "S17256C7.s17256c7f1");
  }
}
static Arrange_To_Call_Me vS17256C7(Test_S17256C7, "S17256C7", 260);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C4  {
  ::S17256C5 s17256c4f0;
  ::S17256C7 s17256c4f1;
};
//SIG(-1 S17256C4) C1{ FC2{ FC3{ Fs[6] Fi} Fi Fc[4] Fi[7]} FC4{ Fc[4] FC5{ Fc[2] Fs Fc[4]}[32]}}



static void Test_S17256C4()
{
  {
    init_simple_test("S17256C4");
    S17256C4 lv;
    check2(sizeof(lv), 312, "sizeof(S17256C4)");
    check2(__alignof__(lv), 4, "__alignof__(S17256C4)");
    check_field_offset(lv, s17256c4f0, 0, "S17256C4.s17256c4f0");
    check_field_offset(lv, s17256c4f1, 52, "S17256C4.s17256c4f1");
  }
}
static Arrange_To_Call_Me vS17256C4(Test_S17256C4, "S17256C4", 312);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C9  {
  int s17256c9f0[2];
  short s17256c9f1[6];
};
//SIG(-1 S17256C9) C1{ Fi[2] Fs[6]}



static void Test_S17256C9()
{
  {
    init_simple_test("S17256C9");
    S17256C9 lv;
    check2(sizeof(lv), 20, "sizeof(S17256C9)");
    check2(__alignof__(lv), 4, "__alignof__(S17256C9)");
    check_field_offset(lv, s17256c9f0, 0, "S17256C9.s17256c9f0");
    check_field_offset(lv, s17256c9f1, 8, "S17256C9.s17256c9f1");
  }
}
static Arrange_To_Call_Me vS17256C9(Test_S17256C9, "S17256C9", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17256C1  {
  int s17256c1f0[5];
  char s17256c1f1[12];
  int s17256c1f2[2];
  ::S17256C2 s17256c1f3;
  ::S17256C3_nt s17256c1f4;
  ::S17256C4 s17256c1f5;
  int s17256c1f6[2];
  char s17256c1f7[6];
  int s17256c1f8;
  ::S17256C9 s17256c1f9;
  void  mf17256c1(); // _ZN8S17256C19mf17256c1Ev
};
//SIG(1 S17256C1) C1{ m Fi[5] Fc[12] Fi[2] FC2{ Fi[8]} FC3{ Fi[4]} FC4{ FC5{ FC6{ Fs[6] Fi} Fi Fc[4] Fi[7]} FC7{ Fc[4] FC8{ Fc[2] Fs Fc[4]}[32]}} Fi[2] Fc[6] Fi FC9{ Fi[2] Fs[6]}}


void  S17256C1 ::mf17256c1(){}

static void Test_S17256C1()
{
  {
    init_simple_test("S17256C1");
    S17256C1 lv;
    check2(sizeof(lv), 440, "sizeof(S17256C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17256C1)");
    check_field_offset(lv, s17256c1f0, 0, "S17256C1.s17256c1f0");
    check_field_offset(lv, s17256c1f1, 20, "S17256C1.s17256c1f1");
    check_field_offset(lv, s17256c1f2, 32, "S17256C1.s17256c1f2");
    check_field_offset(lv, s17256c1f3, 40, "S17256C1.s17256c1f3");
    check_field_offset(lv, s17256c1f4, 72, "S17256C1.s17256c1f4");
    check_field_offset(lv, s17256c1f5, 88, "S17256C1.s17256c1f5");
    check_field_offset(lv, s17256c1f6, 400, "S17256C1.s17256c1f6");
    check_field_offset(lv, s17256c1f7, 408, "S17256C1.s17256c1f7");
    check_field_offset(lv, s17256c1f8, 416, "S17256C1.s17256c1f8");
    check_field_offset(lv, s17256c1f9, 420, "S17256C1.s17256c1f9");
  }
}
static Arrange_To_Call_Me vS17256C1(Test_S17256C1, "S17256C1", 440);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C4_nt  {
  void  mf1933c4(); // _ZN10S1933C4_nt8mf1933c4Ev
  virtual  ~S1933C4_nt(); // _ZN10S1933C4_ntD1Ev
  S1933C4_nt(); // tgen
};
//SIG(-1 S1933C4_nt) C1{ vd m}


void  S1933C4_nt ::mf1933c4(){}
 S1933C4_nt ::~S1933C4_nt(){ note_dtor("S1933C4_nt", this);}
S1933C4_nt ::S1933C4_nt(){ note_ctor("S1933C4_nt", this);} // tgen

//skip512 S1933C4_nt

#else // __cplusplus

extern void _ZN10S1933C4_ntC1Ev();
extern void _ZN10S1933C4_ntD1Ev();
Name_Map name_map_S1933C4_nt[] = {
  NSPAIR(_ZN10S1933C4_ntC1Ev),
  NSPAIR(_ZN10S1933C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern void _ZN10S1933C4_ntD1Ev();
extern void _ZN10S1933C4_ntD0Ev();
static  VTBL_ENTRY vtc_S1933C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1933C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1933C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1933C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
VTBL_ENTRY *P__ZTI10S1933C4_nt = _ZTI10S1933C4_nt; 
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
Class_Descriptor cd_S1933C4_nt = {  "S1933C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1933C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1933C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1933C4_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C5_nt  {
  void *s1933c5f0[2];
};
//SIG(-1 S1933C5_nt) C1{ Fp[2]}



//skip512 S1933C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C3_nt  : S1933C4_nt {
  int s1933c3f0;
  void *s1933c3f1;
  int s1933c3f2;
  ::S1933C5_nt s1933c3f3;
  void *s1933c3f4;
  int s1933c3f5;
  virtual  ~S1933C3_nt(); // _ZN10S1933C3_ntD1Ev
  virtual void  v3(); // _ZN10S1933C3_nt2v3Ev
  virtual void  v4(); // _ZN10S1933C3_nt2v4Ev
  virtual void  v5(); // _ZN10S1933C3_nt2v5Ev
  S1933C3_nt(); // tgen
};
//SIG(-1 S1933C3_nt) C1{ BC2{ vd m} vd v1 v2 v3 Fi Fp Fi FC3{ Fp[2]} Fp Fi}


 S1933C3_nt ::~S1933C3_nt(){ note_dtor("S1933C3_nt", this);}
void  S1933C3_nt ::v3(){vfunc_called(this, "_ZN10S1933C3_nt2v3Ev");}
void  S1933C3_nt ::v4(){vfunc_called(this, "_ZN10S1933C3_nt2v4Ev");}
void  S1933C3_nt ::v5(){vfunc_called(this, "_ZN10S1933C3_nt2v5Ev");}
S1933C3_nt ::S1933C3_nt(){ note_ctor("S1933C3_nt", this);} // tgen

//skip512 S1933C3_nt

#else // __cplusplus

extern void _ZN10S1933C3_ntC1Ev();
extern void _ZN10S1933C3_ntD1Ev();
Name_Map name_map_S1933C3_nt[] = {
  NSPAIR(_ZN10S1933C3_ntC1Ev),
  NSPAIR(_ZN10S1933C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S1933C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1933C3_nt[];
extern void _ZN10S1933C3_ntD1Ev();
extern void _ZN10S1933C3_ntD0Ev();
extern void _ZN10S1933C3_nt2v3Ev();
extern void _ZN10S1933C3_nt2v4Ev();
extern void _ZN10S1933C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S1933C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1933C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1933C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S1933C3_nt[];
VTBL_ENTRY *P__ZTI10S1933C3_nt = _ZTI10S1933C3_nt; 
extern  VTBL_ENTRY _ZTV10S1933C3_nt[];
Class_Descriptor cd_S1933C3_nt = {  "S1933C3_nt", // class name
  bases_S1933C3_nt, 1,
  &(vtc_S1933C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI10S1933C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1933C3_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C2_nt  : S1933C3_nt {
  void *s1933c2f0;
  int s1933c2f1[3];
  virtual  ~S1933C2_nt(); // _ZN10S1933C2_ntD1Ev
  virtual void  v6(); // _ZN10S1933C2_nt2v6Ev
  S1933C2_nt(); // tgen
};
//SIG(-1 S1933C2_nt) C1{ BC2{ BC3{ vd m} vd v2 v3 v4 Fi Fp Fi FC4{ Fp[2]} Fp Fi} vd v1 Fp Fi[3]}


 S1933C2_nt ::~S1933C2_nt(){ note_dtor("S1933C2_nt", this);}
void  S1933C2_nt ::v6(){vfunc_called(this, "_ZN10S1933C2_nt2v6Ev");}
S1933C2_nt ::S1933C2_nt(){ note_ctor("S1933C2_nt", this);} // tgen

//skip512 S1933C2_nt

#else // __cplusplus

extern void _ZN10S1933C2_ntC1Ev();
extern void _ZN10S1933C2_ntD1Ev();
Name_Map name_map_S1933C2_nt[] = {
  NSPAIR(_ZN10S1933C2_ntC1Ev),
  NSPAIR(_ZN10S1933C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S1933C3_nt;
extern VTBL_ENTRY _ZTI10S1933C3_nt[];
extern  VTBL_ENTRY _ZTV10S1933C3_nt[];
static Base_Class bases_S1933C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1933C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1933C2_nt[];
extern void _ZN10S1933C2_ntD1Ev();
extern void _ZN10S1933C2_ntD0Ev();
extern void _ZN10S1933C3_nt2v3Ev();
extern void _ZN10S1933C3_nt2v4Ev();
extern void _ZN10S1933C3_nt2v5Ev();
extern void _ZN10S1933C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S1933C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1933C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1933C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1933C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1933C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S1933C2_nt[];
VTBL_ENTRY *P__ZTI10S1933C2_nt = _ZTI10S1933C2_nt; 
extern  VTBL_ENTRY _ZTV10S1933C2_nt[];
Class_Descriptor cd_S1933C2_nt = {  "S1933C2_nt", // class name
  bases_S1933C2_nt, 2,
  &(vtc_S1933C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI10S1933C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1933C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C6  {
  int s1933c6f0[3];
  ::S17256C3_nt s1933c6f1;
  int s1933c6f2[2];
};
//SIG(-1 S1933C6) C1{ Fi[3] FC2{ Fi[4]} Fi[2]}



static void Test_S1933C6()
{
  {
    init_simple_test("S1933C6");
    S1933C6 lv;
    check2(sizeof(lv), 36, "sizeof(S1933C6)");
    check2(__alignof__(lv), 4, "__alignof__(S1933C6)");
    check_field_offset(lv, s1933c6f0, 0, "S1933C6.s1933c6f0");
    check_field_offset(lv, s1933c6f1, 12, "S1933C6.s1933c6f1");
    check_field_offset(lv, s1933c6f2, 28, "S1933C6.s1933c6f2");
  }
}
static Arrange_To_Call_Me vS1933C6(Test_S1933C6, "S1933C6", 36);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C9_nt  {
  __tsi64 s1933c9f0;
};
//SIG(-1 S1933C9_nt) C1{ FL}



//skip512 S1933C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C8  {
  int s1933c8f0[2];
  char s1933c8f1[4];
  ::S1933C9_nt s1933c8f2;
  ::S1933C9_nt s1933c8f3;
  int s1933c8f4[2];
};
//SIG(-1 S1933C8) C1{ Fi[2] Fc[4] FC2{ FL} FC2 Fi[2]}



static void Test_S1933C8()
{
  {
    init_simple_test("S1933C8");
    S1933C8 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S1933C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1933C8)");
    check_field_offset(lv, s1933c8f0, 0, "S1933C8.s1933c8f0");
    check_field_offset(lv, s1933c8f1, 8, "S1933C8.s1933c8f1");
    check_field_offset(lv, s1933c8f2, ABISELECT(16,12), "S1933C8.s1933c8f2");
    check_field_offset(lv, s1933c8f3, ABISELECT(24,20), "S1933C8.s1933c8f3");
    check_field_offset(lv, s1933c8f4, ABISELECT(32,28), "S1933C8.s1933c8f4");
  }
}
static Arrange_To_Call_Me vS1933C8(Test_S1933C8, "S1933C8", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1933C1  : S1933C2_nt {
  int s1933c1f0[3];
  ::S1933C6 s1933c1f1;
  ::S1933C8 s1933c1f2;
  virtual void  v1(); // _ZN7S1933C12v1Ev
  virtual void  v2(); // _ZN7S1933C12v2Ev
  ~S1933C1(); // tgen
  S1933C1(); // tgen
};
//SIG(1 S1933C1) C1{ BC2{ BC3{ BC4{ vd m} vd v3 v4 v5 Fi Fp Fi FC5{ Fp[2]} Fp Fi} vd v6 Fp Fi[3]} v1 v2 Fi[3] FC6{ Fi[3] FC7{ Fi[4]} Fi[2]} FC8{ Fi[2] Fc[4] FC9{ FL} FC9 Fi[2]}}


void  S1933C1 ::v1(){vfunc_called(this, "_ZN7S1933C12v1Ev");}
void  S1933C1 ::v2(){vfunc_called(this, "_ZN7S1933C12v2Ev");}
S1933C1 ::~S1933C1(){ note_dtor("S1933C1", this);} // tgen
S1933C1 ::S1933C1(){ note_ctor("S1933C1", this);} // tgen

static void Test_S1933C1()
{
  extern Class_Descriptor cd_S1933C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S1933C1, buf);
    S1933C1 *dp, &lv = *(dp=new (buf) S1933C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S1933C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1933C1)");
    check_base_class_offset(lv, (S1933C4_nt*)(S1933C3_nt*)(S1933C2_nt*), 0, "S1933C1");
    check_base_class_offset(lv, (S1933C3_nt*)(S1933C2_nt*), 0, "S1933C1");
    check_base_class_offset(lv, (S1933C2_nt*), 0, "S1933C1");
    check_field_offset(lv, s1933c1f0, ABISELECT(84,48), "S1933C1.s1933c1f0");
    check_field_offset(lv, s1933c1f1, ABISELECT(96,60), "S1933C1.s1933c1f1");
    check_field_offset(lv, s1933c1f2, ABISELECT(136,96), "S1933C1.s1933c1f2");
    test_class_info(&lv, &cd_S1933C1);
    dp->~S1933C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1933C1(Test_S1933C1, "S1933C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S1933C1C1Ev();
extern void _ZN7S1933C1D1Ev();
Name_Map name_map_S1933C1[] = {
  NSPAIR(_ZN7S1933C1C1Ev),
  NSPAIR(_ZN7S1933C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S1933C3_nt;
extern VTBL_ENTRY _ZTI10S1933C3_nt[];
extern  VTBL_ENTRY _ZTV10S1933C3_nt[];
extern Class_Descriptor cd_S1933C2_nt;
extern VTBL_ENTRY _ZTI10S1933C2_nt[];
extern  VTBL_ENTRY _ZTV10S1933C2_nt[];
static Base_Class bases_S1933C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1933C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1933C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1933C1[];
extern void _ZN7S1933C1D1Ev();
extern void _ZN7S1933C1D0Ev();
extern void _ZN10S1933C3_nt2v3Ev();
extern void _ZN10S1933C3_nt2v4Ev();
extern void _ZN10S1933C3_nt2v5Ev();
extern void _ZN10S1933C2_nt2v6Ev();
extern void _ZN7S1933C12v1Ev();
extern void _ZN7S1933C12v2Ev();
static  VTBL_ENTRY vtc_S1933C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1933C1[0]),
  (VTBL_ENTRY)&_ZN7S1933C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1933C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1933C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1933C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S1933C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1933C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1933C1[];
extern  VTBL_ENTRY _ZTV7S1933C1[];
Class_Descriptor cd_S1933C1 = {  "S1933C1", // class name
  bases_S1933C1, 3,
  &(vtc_S1933C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S1933C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1933C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1932C3  : S1933C4_nt {
  int s1932c3f0;
  void *s1932c3f1;
  int s1932c3f2;
  ::S1933C5_nt s1932c3f3;
  void *s1932c3f4;
  int s1932c3f5;
  virtual  ~S1932C3(); // _ZN7S1932C3D1Ev
  virtual void  v3(); // _ZN7S1932C32v3Ev
  virtual void  v4(); // _ZN7S1932C32v4Ev
  virtual void  v5(); // _ZN7S1932C32v5Ev
  S1932C3(); // tgen
};
//SIG(-1 S1932C3) C1{ BC2{ vd m} vd v1 v2 v3 Fi Fp Fi FC3{ Fp[2]} Fp Fi}


 S1932C3 ::~S1932C3(){ note_dtor("S1932C3", this);}
void  S1932C3 ::v3(){vfunc_called(this, "_ZN7S1932C32v3Ev");}
void  S1932C3 ::v4(){vfunc_called(this, "_ZN7S1932C32v4Ev");}
void  S1932C3 ::v5(){vfunc_called(this, "_ZN7S1932C32v5Ev");}
S1932C3 ::S1932C3(){ note_ctor("S1932C3", this);} // tgen

static void Test_S1932C3()
{
  extern Class_Descriptor cd_S1932C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S1932C3, buf);
    S1932C3 *dp, &lv = *(dp=new (buf) S1932C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S1932C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1932C3)");
    check_base_class_offset(lv, (S1933C4_nt*), 0, "S1932C3");
    check_field_offset(lv, s1932c3f0, ABISELECT(8,4), "S1932C3.s1932c3f0");
    check_field_offset(lv, s1932c3f1, ABISELECT(16,8), "S1932C3.s1932c3f1");
    check_field_offset(lv, s1932c3f2, ABISELECT(24,12), "S1932C3.s1932c3f2");
    check_field_offset(lv, s1932c3f3, ABISELECT(32,16), "S1932C3.s1932c3f3");
    check_field_offset(lv, s1932c3f4, ABISELECT(48,24), "S1932C3.s1932c3f4");
    check_field_offset(lv, s1932c3f5, ABISELECT(56,28), "S1932C3.s1932c3f5");
    test_class_info(&lv, &cd_S1932C3);
    dp->~S1932C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1932C3(Test_S1932C3, "S1932C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S1932C3C1Ev();
extern void _ZN7S1932C3D1Ev();
Name_Map name_map_S1932C3[] = {
  NSPAIR(_ZN7S1932C3C1Ev),
  NSPAIR(_ZN7S1932C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S1932C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1932C3[];
extern void _ZN7S1932C3D1Ev();
extern void _ZN7S1932C3D0Ev();
extern void _ZN7S1932C32v3Ev();
extern void _ZN7S1932C32v4Ev();
extern void _ZN7S1932C32v5Ev();
static  VTBL_ENTRY vtc_S1932C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1932C3[0]),
  (VTBL_ENTRY)&_ZN7S1932C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1932C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S1932C3[];
extern  VTBL_ENTRY _ZTV7S1932C3[];
Class_Descriptor cd_S1932C3 = {  "S1932C3", // class name
  bases_S1932C3, 1,
  &(vtc_S1932C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S1932C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1932C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1932C2  : S1932C3 {
  void *s1932c2f0;
  int s1932c2f1[3];
  virtual  ~S1932C2(); // _ZN7S1932C2D1Ev
  virtual void  v6(); // _ZN7S1932C22v6Ev
  S1932C2(); // tgen
};
//SIG(-1 S1932C2) C1{ BC2{ BC3{ vd m} vd v2 v3 v4 Fi Fp Fi FC4{ Fp[2]} Fp Fi} vd v1 Fp Fi[3]}


 S1932C2 ::~S1932C2(){ note_dtor("S1932C2", this);}
void  S1932C2 ::v6(){vfunc_called(this, "_ZN7S1932C22v6Ev");}
S1932C2 ::S1932C2(){ note_ctor("S1932C2", this);} // tgen

static void Test_S1932C2()
{
  extern Class_Descriptor cd_S1932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S1932C2, buf);
    S1932C2 *dp, &lv = *(dp=new (buf) S1932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S1932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1932C2)");
    check_base_class_offset(lv, (S1933C4_nt*)(S1932C3*), 0, "S1932C2");
    check_base_class_offset(lv, (S1932C3*), 0, "S1932C2");
    check_field_offset(lv, s1932c2f0, ABISELECT(64,32), "S1932C2.s1932c2f0");
    check_field_offset(lv, s1932c2f1, ABISELECT(72,36), "S1932C2.s1932c2f1");
    test_class_info(&lv, &cd_S1932C2);
    dp->~S1932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1932C2(Test_S1932C2, "S1932C2", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S1932C2C1Ev();
extern void _ZN7S1932C2D1Ev();
Name_Map name_map_S1932C2[] = {
  NSPAIR(_ZN7S1932C2C1Ev),
  NSPAIR(_ZN7S1932C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S1932C3;
extern VTBL_ENTRY _ZTI7S1932C3[];
extern  VTBL_ENTRY _ZTV7S1932C3[];
static Base_Class bases_S1932C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1932C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1932C2[];
extern void _ZN7S1932C2D1Ev();
extern void _ZN7S1932C2D0Ev();
extern void _ZN7S1932C32v3Ev();
extern void _ZN7S1932C32v4Ev();
extern void _ZN7S1932C32v5Ev();
extern void _ZN7S1932C22v6Ev();
static  VTBL_ENTRY vtc_S1932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1932C2[0]),
  (VTBL_ENTRY)&_ZN7S1932C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1932C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1932C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S1932C2[];
extern  VTBL_ENTRY _ZTV7S1932C2[];
Class_Descriptor cd_S1932C2 = {  "S1932C2", // class name
  bases_S1932C2, 2,
  &(vtc_S1932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S1932C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1932C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1932C9_nt  {
  long s1932c9f0;
};
//SIG(-1 S1932C9_nt) C1{ Fl}



//skip512 S1932C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1932C8  {
  int s1932c8f0[2];
  char s1932c8f1[4];
  ::S1932C9_nt s1932c8f2;
  ::S1932C9_nt s1932c8f3;
  int s1932c8f4[2];
};
//SIG(-1 S1932C8) C1{ Fi[2] Fc[4] FC2{ Fl} FC2 Fi[2]}



static void Test_S1932C8()
{
  {
    init_simple_test("S1932C8");
    S1932C8 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S1932C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1932C8)");
    check_field_offset(lv, s1932c8f0, 0, "S1932C8.s1932c8f0");
    check_field_offset(lv, s1932c8f1, 8, "S1932C8.s1932c8f1");
    check_field_offset(lv, s1932c8f2, ABISELECT(16,12), "S1932C8.s1932c8f2");
    check_field_offset(lv, s1932c8f3, ABISELECT(24,16), "S1932C8.s1932c8f3");
    check_field_offset(lv, s1932c8f4, ABISELECT(32,20), "S1932C8.s1932c8f4");
  }
}
static Arrange_To_Call_Me vS1932C8(Test_S1932C8, "S1932C8", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1932C1  : S1932C2 {
  int s1932c1f0[3];
  ::S1933C6 s1932c1f1;
  ::S1932C8 s1932c1f2;
  virtual void  v1(); // _ZN7S1932C12v1Ev
  virtual void  v2(); // _ZN7S1932C12v2Ev
  ~S1932C1(); // tgen
  S1932C1(); // tgen
};
//SIG(1 S1932C1) C1{ BC2{ BC3{ BC4{ vd m} vd v3 v4 v5 Fi Fp Fi FC5{ Fp[2]} Fp Fi} vd v6 Fp Fi[3]} v1 v2 Fi[3] FC6{ Fi[3] FC7{ Fi[4]} Fi[2]} FC8{ Fi[2] Fc[4] FC9{ Fl} FC9 Fi[2]}}


void  S1932C1 ::v1(){vfunc_called(this, "_ZN7S1932C12v1Ev");}
void  S1932C1 ::v2(){vfunc_called(this, "_ZN7S1932C12v2Ev");}
S1932C1 ::~S1932C1(){ note_dtor("S1932C1", this);} // tgen
S1932C1 ::S1932C1(){ note_ctor("S1932C1", this);} // tgen

static void Test_S1932C1()
{
  extern Class_Descriptor cd_S1932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S1932C1, buf);
    S1932C1 *dp, &lv = *(dp=new (buf) S1932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S1932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1932C1)");
    check_base_class_offset(lv, (S1933C4_nt*)(S1932C3*)(S1932C2*), 0, "S1932C1");
    check_base_class_offset(lv, (S1932C3*)(S1932C2*), 0, "S1932C1");
    check_base_class_offset(lv, (S1932C2*), 0, "S1932C1");
    check_field_offset(lv, s1932c1f0, ABISELECT(84,48), "S1932C1.s1932c1f0");
    check_field_offset(lv, s1932c1f1, ABISELECT(96,60), "S1932C1.s1932c1f1");
    check_field_offset(lv, s1932c1f2, ABISELECT(136,96), "S1932C1.s1932c1f2");
    test_class_info(&lv, &cd_S1932C1);
    dp->~S1932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1932C1(Test_S1932C1, "S1932C1", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S1932C1C1Ev();
extern void _ZN7S1932C1D1Ev();
Name_Map name_map_S1932C1[] = {
  NSPAIR(_ZN7S1932C1C1Ev),
  NSPAIR(_ZN7S1932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S1932C3;
extern VTBL_ENTRY _ZTI7S1932C3[];
extern  VTBL_ENTRY _ZTV7S1932C3[];
extern Class_Descriptor cd_S1932C2;
extern VTBL_ENTRY _ZTI7S1932C2[];
extern  VTBL_ENTRY _ZTV7S1932C2[];
static Base_Class bases_S1932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1932C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1932C1[];
extern void _ZN7S1932C1D1Ev();
extern void _ZN7S1932C1D0Ev();
extern void _ZN7S1932C32v3Ev();
extern void _ZN7S1932C32v4Ev();
extern void _ZN7S1932C32v5Ev();
extern void _ZN7S1932C22v6Ev();
extern void _ZN7S1932C12v1Ev();
extern void _ZN7S1932C12v2Ev();
static  VTBL_ENTRY vtc_S1932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1932C1[0]),
  (VTBL_ENTRY)&_ZN7S1932C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1932C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1932C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1932C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1932C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1932C1[];
extern  VTBL_ENTRY _ZTV7S1932C1[];
Class_Descriptor cd_S1932C1 = {  "S1932C1", // class name
  bases_S1932C1, 3,
  &(vtc_S1932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S1932C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1932C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C2  {
  int s11542c2f0[2];
  ::S17256C6_nt s11542c2f1;
};
//SIG(-1 S11542C2) C1{ Fi[2] FC2{ Fs[6] Fi}}



static void Test_S11542C2()
{
  {
    init_simple_test("S11542C2");
    S11542C2 lv;
    check2(sizeof(lv), 24, "sizeof(S11542C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11542C2)");
    check_field_offset(lv, s11542c2f0, 0, "S11542C2.s11542c2f0");
    check_field_offset(lv, s11542c2f1, 8, "S11542C2.s11542c2f1");
  }
}
static Arrange_To_Call_Me vS11542C2(Test_S11542C2, "S11542C2", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C5  {
  short s11542c5f0[3];
  int s11542c5f1;
  char s11542c5f2[4];
};
//SIG(-1 S11542C5) C1{ Fs[3] Fi Fc[4]}



static void Test_S11542C5()
{
  {
    init_simple_test("S11542C5");
    S11542C5 lv;
    check2(sizeof(lv), 16, "sizeof(S11542C5)");
    check2(__alignof__(lv), 4, "__alignof__(S11542C5)");
    check_field_offset(lv, s11542c5f0, 0, "S11542C5.s11542c5f0");
    check_field_offset(lv, s11542c5f1, 8, "S11542C5.s11542c5f1");
    check_field_offset(lv, s11542c5f2, 12, "S11542C5.s11542c5f2");
  }
}
static Arrange_To_Call_Me vS11542C5(Test_S11542C5, "S11542C5", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C4  {
  ::S11542C5 s11542c4f0;
  int s11542c4f1;
  __tsi64 s11542c4f2;
  int s11542c4f3;
  __tsi64 s11542c4f4;
  int s11542c4f5[2];
  char s11542c4f6[4];
  int s11542c4f7;
};
//SIG(-1 S11542C4) C1{ FC2{ Fs[3] Fi Fc[4]} Fi FL Fi FL Fi[2] Fc[4] Fi}



static void Test_S11542C4()
{
  {
    init_simple_test("S11542C4");
    S11542C4 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S11542C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11542C4)");
    check_field_offset(lv, s11542c4f0, 0, "S11542C4.s11542c4f0");
    check_field_offset(lv, s11542c4f1, 16, "S11542C4.s11542c4f1");
    check_field_offset(lv, s11542c4f2, ABISELECT(24,20), "S11542C4.s11542c4f2");
    check_field_offset(lv, s11542c4f3, ABISELECT(32,28), "S11542C4.s11542c4f3");
    check_field_offset(lv, s11542c4f4, ABISELECT(40,32), "S11542C4.s11542c4f4");
    check_field_offset(lv, s11542c4f5, ABISELECT(48,40), "S11542C4.s11542c4f5");
    check_field_offset(lv, s11542c4f6, ABISELECT(56,48), "S11542C4.s11542c4f6");
    check_field_offset(lv, s11542c4f7, ABISELECT(60,52), "S11542C4.s11542c4f7");
  }
}
static Arrange_To_Call_Me vS11542C4(Test_S11542C4, "S11542C4", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C6  {
  char s11542c6f0[36];
  int s11542c6f1[4];
};
//SIG(-1 S11542C6) C1{ Fc[36] Fi[4]}



static void Test_S11542C6()
{
  {
    init_simple_test("S11542C6");
    S11542C6 lv;
    check2(sizeof(lv), 52, "sizeof(S11542C6)");
    check2(__alignof__(lv), 4, "__alignof__(S11542C6)");
    check_field_offset(lv, s11542c6f0, 0, "S11542C6.s11542c6f0");
    check_field_offset(lv, s11542c6f1, 36, "S11542C6.s11542c6f1");
  }
}
static Arrange_To_Call_Me vS11542C6(Test_S11542C6, "S11542C6", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C7  {
  char s11542c7f0[8];
  ::S17256C8 s11542c7f1[32];
};
//SIG(-1 S11542C7) C1{ Fc[8] FC2{ Fc[2] Fs Fc[4]}[32]}



static void Test_S11542C7()
{
  {
    init_simple_test("S11542C7");
    S11542C7 lv;
    check2(sizeof(lv), 264, "sizeof(S11542C7)");
    check2(__alignof__(lv), 2, "__alignof__(S11542C7)");
    check_field_offset(lv, s11542c7f0, 0, "S11542C7.s11542c7f0");
    check_field_offset(lv, s11542c7f1, 8, "S11542C7.s11542c7f1");
  }
}
static Arrange_To_Call_Me vS11542C7(Test_S11542C7, "S11542C7", 264);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C9_nt  {
  int s11542c9f0[3];
};
//SIG(-1 S11542C9_nt) C1{ Fi[3]}



//skip512 S11542C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11542C1  {
  ::S11542C2 s11542c1f0;
  ::S11542C4 s11542c1f1;
  ::S11542C6 s11542c1f2;
  ::S11542C7 s11542c1f3;
  ::S11542C9_nt s11542c1f4;
  char s11542c1f5[8];
};
//SIG(1 S11542C1) C1{ FC2{ Fi[2] FC3{ Fs[6] Fi}} FC4{ FC5{ Fs[3] Fi Fc[4]} Fi FL Fi FL Fi[2] Fc[4] Fi} FC6{ Fc[36] Fi[4]} FC7{ Fc[8] FC8{ Fc[2] Fs Fc[4]}[32]} FC9{ Fi[3]} Fc[8]}



static void Test_S11542C1()
{
  {
    init_simple_test("S11542C1");
    S11542C1 lv;
    check2(sizeof(lv), ABISELECT(424,416), "sizeof(S11542C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11542C1)");
    check_field_offset(lv, s11542c1f0, 0, "S11542C1.s11542c1f0");
    check_field_offset(lv, s11542c1f1, 24, "S11542C1.s11542c1f1");
    check_field_offset(lv, s11542c1f2, ABISELECT(88,80), "S11542C1.s11542c1f2");
    check_field_offset(lv, s11542c1f3, ABISELECT(140,132), "S11542C1.s11542c1f3");
    check_field_offset(lv, s11542c1f4, ABISELECT(404,396), "S11542C1.s11542c1f4");
    check_field_offset(lv, s11542c1f5, ABISELECT(416,408), "S11542C1.s11542c1f5");
  }
}
static Arrange_To_Call_Me vS11542C1(Test_S11542C1, "S11542C1", ABISELECT(424,416));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C3  : virtual S19859C6 {
  virtual  ~S19590C3(); // _ZN8S19590C3D2Ev
  S19590C3(); // tgen
};
//SIG(-1 S19590C3) C1{ VBC2{ vd m Fs} vd}


 S19590C3 ::~S19590C3(){ note_dtor("S19590C3", this);}
S19590C3 ::S19590C3(){ note_ctor("S19590C3", this);} // tgen

static void Test_S19590C3()
{
  extern Class_Descriptor cd_S19590C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19590C3, buf);
    S19590C3 *dp, &lv = *(dp=new (buf) S19590C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19590C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C3)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19590C3");
    test_class_info(&lv, &cd_S19590C3);
    dp->~S19590C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C3(Test_S19590C3, "S19590C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19590C3C1Ev();
extern void _ZN8S19590C3D2Ev();
Name_Map name_map_S19590C3[] = {
  NSPAIR(_ZN8S19590C3C1Ev),
  NSPAIR(_ZN8S19590C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S19590C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C3[];
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C3[];
static  VTT_ENTRY vtt_S19590C3[] = {
  {&(_ZTV8S19590C3[3]),  3,10},
  {&(_ZTV8S19590C3[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
static VTBL_ENTRY alt_thunk_names138[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C3 = {  "S19590C3", // class name
  bases_S19590C3, 1,
  &(vtc_S19590C3[0]), // expected_vtbl_contents
  &(vtt_S19590C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19590C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19590C3),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names138,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C6  : virtual S19859C6 {
  ~S19590C6(); // tgen
  S19590C6(); // tgen
};
//SIG(-1 S19590C6) C1{ VBC2{ vd m Fs}}


S19590C6 ::~S19590C6(){ note_dtor("S19590C6", this);} // tgen
S19590C6 ::S19590C6(){ note_ctor("S19590C6", this);} // tgen

static void Test_S19590C6()
{
  extern Class_Descriptor cd_S19590C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19590C6, buf);
    S19590C6 *dp, &lv = *(dp=new (buf) S19590C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19590C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C6)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S19590C6");
    test_class_info(&lv, &cd_S19590C6);
    dp->~S19590C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C6(Test_S19590C6, "S19590C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19590C6C1Ev();
extern void _ZN8S19590C6D1Ev();
Name_Map name_map_S19590C6[] = {
  NSPAIR(_ZN8S19590C6C1Ev),
  NSPAIR(_ZN8S19590C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S19590C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C6[];
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C6D1Ev,_ZThn4_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C6D0Ev,_ZThn4_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C6[];
static  VTT_ENTRY vtt_S19590C6[] = {
  {&(_ZTV8S19590C6[3]),  3,10},
  {&(_ZTV8S19590C6[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
static VTBL_ENTRY alt_thunk_names139[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C6D0Ev,_ZThn4_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C6D1Ev,_ZThn4_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C6 = {  "S19590C6", // class name
  bases_S19590C6, 1,
  &(vtc_S19590C6[0]), // expected_vtbl_contents
  &(vtt_S19590C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19590C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19590C6),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names139,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C5  : virtual S19590C6 {
  virtual  ~S19590C5(); // _ZN8S19590C5D2Ev
  S19590C5(); // tgen
};
//SIG(-1 S19590C5) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S19590C5 ::~S19590C5(){ note_dtor("S19590C5", this);}
S19590C5 ::S19590C5(){ note_ctor("S19590C5", this);} // tgen

static void Test_S19590C5()
{
  extern Class_Descriptor cd_S19590C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19590C5, buf);
    S19590C5 *dp, &lv = *(dp=new (buf) S19590C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19590C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C5)");
    check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(8,4), "S19590C5");
    check_base_class_offset(lv, (S19590C6*), 0, "S19590C5");
    test_class_info(&lv, &cd_S19590C5);
    dp->~S19590C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C5(Test_S19590C5, "S19590C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19590C5C1Ev();
extern void _ZN8S19590C5D2Ev();
Name_Map name_map_S19590C5[] = {
  NSPAIR(_ZN8S19590C5C1Ev),
  NSPAIR(_ZN8S19590C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
static Base_Class bases_S19590C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19590C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C5[];
extern void _ZN8S19590C5D1Ev();
extern void _ZN8S19590C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C5D1Ev,_ZThn4_N8S19590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C5D0Ev,_ZThn4_N8S19590C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C5[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C5[0]),
  (VTBL_ENTRY)&_ZN8S19590C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C5D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C5[];
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__8S19590C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C6D1Ev,_ZThn4_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C6D0Ev,_ZThn4_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__8S19590C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
static  VTT_ENTRY vtt_S19590C5[] = {
  {&(_ZTV8S19590C5[5]),  5,12},
  {&(_ZTV8S19590C5[5]),  5,12},
  {&(_ZTV8S19590C5[10]),  10,12},
  {&(_tg__ZTV8S19590C6__8S19590C5[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__8S19590C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19590C5[];
extern  VTBL_ENTRY _ZTV8S19590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C5[];
static VTBL_ENTRY alt_thunk_names140[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C6D0Ev,_ZThn4_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C6D1Ev,_ZThn4_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C5D0Ev,_ZThn4_N8S19590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C5D1Ev,_ZThn4_N8S19590C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C5 = {  "S19590C5", // class name
  bases_S19590C5, 2,
  &(vtc_S19590C5[0]), // expected_vtbl_contents
  &(vtt_S19590C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19590C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19590C5),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C5),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names140,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C9  : virtual S19859C6 , virtual S19590C3 , S19590C6 {
  int s19590c9f0;
  virtual  ~S19590C9(); // _ZN8S19590C9D2Ev
  S19590C9(); // tgen
};
//SIG(-1 S19590C9) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S19590C9 ::~S19590C9(){ note_dtor("S19590C9", this);}
S19590C9 ::S19590C9(){ note_ctor("S19590C9", this);} // tgen

static void Test_S19590C9()
{
  extern Class_Descriptor cd_S19590C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19590C9, buf);
    S19590C9 *dp, &lv = *(dp=new (buf) S19590C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19590C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C9)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S19590C9");
    check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(16,8), "S19590C9");
    check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(16,8), "S19590C9");
    check_base_class_offset(lv, (S19590C3*), ABISELECT(32,16), "S19590C9");
    check_base_class_offset(lv, (S19590C6*), 0, "S19590C9");
    check_field_offset(lv, s19590c9f0, ABISELECT(8,4), "S19590C9.s19590c9f0");
    test_class_info(&lv, &cd_S19590C9);
    dp->~S19590C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C9(Test_S19590C9, "S19590C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19590C9C1Ev();
extern void _ZN8S19590C9D2Ev();
Name_Map name_map_S19590C9[] = {
  NSPAIR(_ZN8S19590C9C1Ev),
  NSPAIR(_ZN8S19590C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
static Base_Class bases_S19590C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19590C3,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19590C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C9[];
extern void _ZN8S19590C9D1Ev();
extern void _ZN8S19590C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn8_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn8_N8S19590C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S19590C9D1Ev,_ZThn16_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn32_N8S19590C9D0Ev,_ZThn16_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C9[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&_ZN8S19590C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C9[];
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__8S19590C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C6D1Ev,_ZThn8_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C6D0Ev,_ZThn8_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__8S19590C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__8S19590C9[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
static  VTT_ENTRY vtt_S19590C9[] = {
  {&(_ZTV8S19590C9[4]),  4,17},
  {&(_tg__ZTV8S19590C6__8S19590C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__8S19590C9[3]),  3,5},
  {&(_ZTV8S19590C9[9]),  9,17},
  {&(_ZTV8S19590C9[15]),  15,17},
  {&(_tg__ZTV8S19590C3__8S19590C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__8S19590C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19590C9[];
extern  VTBL_ENTRY _ZTV8S19590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C9[];
static VTBL_ENTRY alt_thunk_names141[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C6D0Ev,_ZThn8_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C6D1Ev,_ZThn8_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C9D0Ev,_ZThn16_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C9D1Ev,_ZThn16_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn8_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn8_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C9 = {  "S19590C9", // class name
  bases_S19590C9, 3,
  &(vtc_S19590C9[0]), // expected_vtbl_contents
  &(vtt_S19590C9[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19590C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19590C9),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C9),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names141,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C8  : S19859C6 , virtual S19590C3 , S19590C9 , virtual S19590C6 {
  int s19590c8f0;
  virtual  ~S19590C8(); // _ZN8S19590C8D2Ev
  S19590C8(); // tgen
};
//SIG(-1 S19590C8) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2 VBC3 BC5{ VBC2} vd Fi} VBC5 vd Fi}


 S19590C8 ::~S19590C8(){ note_dtor("S19590C8", this);}
S19590C8 ::S19590C8(){ note_ctor("S19590C8", this);} // tgen

static void Test_S19590C8()
{
  extern Class_Descriptor cd_S19590C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S19590C8, buf);
    S19590C8 *dp, &lv = *(dp=new (buf) S19590C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S19590C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C8)");
    /*is_ambiguous_... S19590C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S19590C8");
    check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(40,24), "S19590C8");
    check_base_class_offset(lv, (S19859C6*)(S19590C9*), ABISELECT(40,24), "S19590C8");
    check_base_class_offset(lv, (S19859C6*)(S19590C6*)(S19590C9*), ABISELECT(40,24), "S19590C8");
    /*is_ambiguous_... S19590C8::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(40,24), "S19590C8");
    check_base_class_offset(lv, (S19590C3*), ABISELECT(32,20), "S19590C8");
    check_base_class_offset(lv, (S19590C3*)(S19590C9*), ABISELECT(32,20), "S19590C8");
    check_base_class_offset(lv, (S19590C6*)(S19590C9*), ABISELECT(16,8), "S19590C8");
    check_base_class_offset(lv, (S19590C9*), ABISELECT(16,8), "S19590C8");
    /*is_ambiguous_... S19590C8::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*), ABISELECT(56,32), "S19590C8");
    check_field_offset(lv, s19590c8f0, ABISELECT(28,16), "S19590C8.s19590c8f0");
    test_class_info(&lv, &cd_S19590C8);
    dp->~S19590C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C8(Test_S19590C8, "S19590C8", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S19590C8C1Ev();
extern void _ZN8S19590C8D2Ev();
Name_Map name_map_S19590C8[] = {
  NSPAIR(_ZN8S19590C8C1Ev),
  NSPAIR(_ZN8S19590C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C9;
extern VTBL_ENTRY _ZTI8S19590C9[];
extern  VTBL_ENTRY _ZTV8S19590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C9[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
static Base_Class bases_S19590C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19590C3,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19590C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19590C9,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19590C6,    ABISELECT(56,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C8[];
extern void _ZN8S19590C8D1Ev();
extern void _ZN8S19590C8D0Ev();
extern void ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S19590C8D1Ev,_ZThn24_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn40_N8S19590C8D0Ev,_ZThn24_N8S19590C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19590C8D1Ev,_ZThn32_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S19590C8D0Ev,_ZThn32_N8S19590C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C8[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&_ZN8S19590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C8D0Ev,
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C8[];
extern void _ZN8S19590C9D1Ev();
extern void _ZN8S19590C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C9__8S19590C8[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&_ZN8S19590C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C9D0Ev,
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C68S19590C9__8S19590C8[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S19590C6D1Ev,_ZThn16_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S19590C6D0Ev,_ZThn16_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C68S19590C9__8S19590C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19590C9D1Ev,_ZThn16_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19590C9D0Ev,_ZThn16_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C9__8S19590C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C9__8S19590C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev),
};
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__8S19590C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__A1__8S19590C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
static  VTT_ENTRY vtt_S19590C8[] = {
  {&(_ZTV8S19590C8[5]),  5,30},
  {&(_tg__ZTV8S19590C9__8S19590C8[4]),  4,6},
  {&(_tg__ZTV8S19590C68S19590C9__8S19590C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C68S19590C9__8S19590C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C9__8S19590C8[3]),  3,5},
  {&(_tg__ZTV8S19590C3__8S19590C9__8S19590C8[4]),  4,6},
  {&(_ZTV8S19590C8[17]),  17,30},
  {&(_ZTV8S19590C8[22]),  22,30},
  {&(_ZTV8S19590C8[11]),  11,30},
  {&(_ZTV8S19590C8[28]),  28,30},
  {&(_tg__ZTV8S19590C3__8S19590C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__8S19590C8[3]),  3,5},
  {&(_tg__ZTV8S19590C6__A1__8S19590C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__A1__8S19590C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19590C8[];
extern  VTBL_ENTRY _ZTV8S19590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C8[];
static VTBL_ENTRY alt_thunk_names142[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C9D0Ev,_ZThn16_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C9D1Ev,_ZThn16_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C6D0Ev,_ZThn16_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C6D1Ev,_ZThn16_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19590C8D0Ev,_ZThn24_N8S19590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19590C8D1Ev,_ZThn24_N8S19590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C8D0Ev,_ZThn32_N8S19590C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C8D1Ev,_ZThn32_N8S19590C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C8 = {  "S19590C8", // class name
  bases_S19590C8, 6,
  &(vtc_S19590C8[0]), // expected_vtbl_contents
  &(vtt_S19590C8[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S19590C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19590C8),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C8),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names142,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C7  : virtual S19590C8 , S19590C6 {
  virtual  ~S19590C7(); // _ZN8S19590C7D2Ev
  S19590C7(); // tgen
};
//SIG(-1 S19590C7) C1{ VBC2{ BC3{ vd m Fs} VBC4{ VBC3 vd} BC5{ VBC3 VBC4 BC6{ VBC3} vd Fi} VBC6 vd Fi} BC6 vd}


 S19590C7 ::~S19590C7(){ note_dtor("S19590C7", this);}
S19590C7 ::S19590C7(){ note_ctor("S19590C7", this);} // tgen

static void Test_S19590C7()
{
  extern Class_Descriptor cd_S19590C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S19590C7, buf);
    S19590C7 *dp, &lv = *(dp=new (buf) S19590C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19590C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C7)");
    /*is_ambiguous_... S19590C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C8*), ABISELECT(8,4), "S19590C7");
    check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(48,28), "S19590C7");
    check_base_class_offset(lv, (S19859C6*)(S19590C9*)(S19590C8*), ABISELECT(48,28), "S19590C7");
    check_base_class_offset(lv, (S19859C6*)(S19590C6*)(S19590C9*)(S19590C8*), ABISELECT(48,28), "S19590C7");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(48,28), "S19590C7");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(48,28), "S19590C7");
    check_base_class_offset(lv, (S19590C3*)(S19590C8*), ABISELECT(40,24), "S19590C7");
    check_base_class_offset(lv, (S19590C3*)(S19590C9*)(S19590C8*), ABISELECT(40,24), "S19590C7");
    check_base_class_offset(lv, (S19590C6*)(S19590C9*)(S19590C8*), ABISELECT(24,12), "S19590C7");
    check_base_class_offset(lv, (S19590C9*)(S19590C8*), ABISELECT(24,12), "S19590C7");
    /*is_ambiguous_... S19590C8::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*)(S19590C8*), ABISELECT(64,36), "S19590C7");
    check_base_class_offset(lv, (S19590C8*), ABISELECT(8,4), "S19590C7");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*), 0, "S19590C7");
    test_class_info(&lv, &cd_S19590C7);
    dp->~S19590C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C7(Test_S19590C7, "S19590C7", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S19590C7C1Ev();
extern void _ZN8S19590C7D2Ev();
Name_Map name_map_S19590C7[] = {
  NSPAIR(_ZN8S19590C7C1Ev),
  NSPAIR(_ZN8S19590C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C9;
extern VTBL_ENTRY _ZTI8S19590C9[];
extern  VTBL_ENTRY _ZTV8S19590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C9[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C8;
extern VTBL_ENTRY _ZTI8S19590C8[];
extern  VTBL_ENTRY _ZTV8S19590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C8[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
static Base_Class bases_S19590C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(48,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19590C3,    ABISELECT(40,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19590C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19590C9,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19590C6,    ABISELECT(64,36), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19590C8,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19590C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C7[];
extern void _ZN8S19590C7D1Ev();
extern void _ZN8S19590C7D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C7D1Ev,_ZThn4_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C7D0Ev,_ZThn4_N8S19590C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S19590C7D1Ev,_ZTvn8_n24_N8S19590C7D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19590C7D0Ev,_ZTvn8_n24_N8S19590C7D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn40_N8S19590C7D1Ev,_ZThn24_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn40_N8S19590C7D0Ev,_ZThn24_N8S19590C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn48_N8S19590C7D1Ev,_ZThn28_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn48_N8S19590C7D0Ev,_ZThn28_N8S19590C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19590C7D1Ev,_ZThn36_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S19590C7D0Ev,_ZThn36_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C7[] = {
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&_ZN8S19590C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev),
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C7D1Ev,_ZTvn8_n24_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C7D0Ev,_ZTvn8_n24_N8S19590C7D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(8,4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C7[];
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__A__8S19590C7[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn48_N8S19590C6D1Ev,_ZThn28_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn48_N8S19590C6D0Ev,_ZThn28_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__A__8S19590C7[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void _ZN8S19590C8D1Ev();
extern void _ZN8S19590C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C8__8S19590C7[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&_ZN8S19590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C8D0Ev,
};
extern void _ZN8S19590C9D1Ev();
extern void _ZN8S19590C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C98S19590C8__8S19590C7[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&_ZN8S19590C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C9D0Ev,
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C68S19590C98S19590C8__8S19590C7[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S19590C6D1Ev,_ZThn16_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S19590C6D0Ev,_ZThn16_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C68S19590C98S19590C8__8S19590C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19590C9D1Ev,_ZThn16_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S19590C9D0Ev,_ZThn16_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C98S19590C8__8S19590C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C98S19590C8__8S19590C7[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C8__8S19590C7[] = {
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S19590C8D1Ev,_ZThn24_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn40_N8S19590C8D0Ev,_ZThn24_N8S19590C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19590C8__8S19590C7[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C9__8S19590C8__8S19590C7[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19590C8D1Ev,_ZThn32_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S19590C8D0Ev,_ZThn32_N8S19590C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C8__8S19590C7[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__8S19590C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__A1__8S19590C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
static  VTT_ENTRY vtt_S19590C7[] = {
  {&(_ZTV8S19590C7[6]),  6,39},
  {&(_tg__ZTV8S19590C6__A__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__A__8S19590C7[3]),  3,5},
  {&(_ZTV8S19590C7[14]),  14,39},
  {&(_ZTV8S19590C7[26]),  26,39},
  {&(_ZTV8S19590C7[31]),  31,39},
  {&(_ZTV8S19590C7[20]),  20,39},
  {&(_ZTV8S19590C7[37]),  37,39},
  {&(_tg__ZTV8S19590C8__8S19590C7[5]),  5,7},
  {&(_tg__ZTV8S19590C98S19590C8__8S19590C7[4]),  4,6},
  {&(_tg__ZTV8S19590C68S19590C98S19590C8__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C68S19590C98S19590C8__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C98S19590C8__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19590C3__8S19590C98S19590C8__8S19590C7[4]),  4,6},
  {&(_tg__ZTV8S19590C3__8S19590C8__8S19590C7[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19590C8__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19590C9__8S19590C8__8S19590C7[4]),  4,6},
  {&(_tg__ZTV8S19590C6__A1__8S19590C8__8S19590C7[4]),  4,6},
  {&(_tg__ZTV8S19590C3__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19590C6__A1__8S19590C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__A1__8S19590C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19590C7[];
extern  VTBL_ENTRY _ZTV8S19590C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C7[];
static VTBL_ENTRY alt_thunk_names143[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19590C8D0Ev,_ZThn24_N8S19590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19590C8D1Ev,_ZThn24_N8S19590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C8D0Ev,_ZThn32_N8S19590C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C8D1Ev,_ZThn32_N8S19590C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C9D0Ev,_ZThn16_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C9D1Ev,_ZThn16_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C6D0Ev,_ZThn16_N8S19590C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19590C6D0Ev,_ZThn28_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19590C6D1Ev,_ZThn16_N8S19590C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19590C6D1Ev,_ZThn28_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19590C7D0Ev,_ZThn28_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19590C7D1Ev,_ZThn28_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C7D0Ev,_ZThn36_N8S19590C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19590C7D0Ev,_ZThn24_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C7D1Ev,_ZThn36_N8S19590C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19590C7D1Ev,_ZThn24_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C7D0Ev,_ZThn4_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C7D1Ev,_ZThn4_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C7 = {  "S19590C7", // class name
  bases_S19590C7, 8,
  &(vtc_S19590C7[0]), // expected_vtbl_contents
  &(vtt_S19590C7[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S19590C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19590C7),39, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C7),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names143,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C10  : S19859C6 , virtual S19590C3 {
  virtual  ~S19590C10(); // _ZN9S19590C10D2Ev
  S19590C10(); // tgen
};
//SIG(-1 S19590C10) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} vd}


 S19590C10 ::~S19590C10(){ note_dtor("S19590C10", this);}
S19590C10 ::S19590C10(){ note_ctor("S19590C10", this);} // tgen

static void Test_S19590C10()
{
  extern Class_Descriptor cd_S19590C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19590C10, buf);
    S19590C10 *dp, &lv = *(dp=new (buf) S19590C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19590C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19590C10)");
    /*is_ambiguous_... S19590C10::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S19590C10");
    check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(24,12), "S19590C10");
    check_base_class_offset(lv, (S19590C3*), ABISELECT(16,8), "S19590C10");
    test_class_info(&lv, &cd_S19590C10);
    dp->~S19590C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C10(Test_S19590C10, "S19590C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19590C10C1Ev();
extern void _ZN9S19590C10D2Ev();
Name_Map name_map_S19590C10[] = {
  NSPAIR(_ZN9S19590C10C1Ev),
  NSPAIR(_ZN9S19590C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
static Base_Class bases_S19590C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19590C3,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19590C10[];
extern void _ZN9S19590C10D1Ev();
extern void _ZN9S19590C10D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S19590C10D1Ev,_ZThn8_N9S19590C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S19590C10D0Ev,_ZThn8_N9S19590C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev)();
extern void ABISELECT(_ZThn24_N9S19590C10D1Ev,_ZThn12_N9S19590C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev)();
extern void ABISELECT(_ZThn24_N9S19590C10D0Ev,_ZThn12_N9S19590C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C10[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&_ZN9S19590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19590C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19590C10[];
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__9S19590C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__9S19590C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
static  VTT_ENTRY vtt_S19590C10[] = {
  {&(_ZTV9S19590C10[4]),  4,17},
  {&(_ZTV9S19590C10[10]),  10,17},
  {&(_ZTV9S19590C10[15]),  15,17},
  {&(_tg__ZTV8S19590C3__9S19590C10[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__9S19590C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19590C10[];
extern  VTBL_ENTRY _ZTV9S19590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19590C10[];
static VTBL_ENTRY alt_thunk_names144[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D0Ev,_ZThn4_N8S19590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19590C3D1Ev,_ZThn4_N8S19590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19590C10D0Ev,_ZThn12_N9S19590C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19590C10D1Ev,_ZThn12_N9S19590C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19590C10D0Ev,_ZThn8_N9S19590C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19590C10D1Ev,_ZThn8_N9S19590C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C10 = {  "S19590C10", // class name
  bases_S19590C10, 3,
  &(vtc_S19590C10[0]), // expected_vtbl_contents
  &(vtt_S19590C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19590C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19590C10),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19590C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names144,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C2  : S19590C3 , virtual S19590C5 , S19590C7 , virtual S19590C10 {
  ::S19859C19 s19590c2f0;
  long double s19590c2f1;
  virtual  ~S19590C2(); // _ZN8S19590C2D2Ev
  S19590C2(); // tgen
};
//SIG(-1 S19590C2) C1{ BC2{ VBC3{ vd m Fs} vd} VBC4{ VBC5{ VBC3} vd} BC6{ VBC7{ BC3 VBC2 BC8{ VBC3 VBC2 BC5 vd Fi} VBC5 vd Fi} BC5 vd} VBC9{ BC3 VBC2 vd} vd FC10{ VBC11{ VBC3 vd}} FD}


 S19590C2 ::~S19590C2(){ note_dtor("S19590C2", this);}
S19590C2 ::S19590C2(){ note_ctor("S19590C2", this);} // tgen

static void Test_S19590C2()
{
  extern Class_Descriptor cd_S19590C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,20)];
    init_test(&cd_S19590C2, buf);
    S19590C2 *dp, &lv = *(dp=new (buf) S19590C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S19590C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19590C2)");
    /*is_ambiguous_... S19590C2::S19590C3 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(64,32), "S19590C2");
    /*is_ambiguous_... S19590C2::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(64,32), "S19590C2");
    /*is_ambiguous_... S19590C2::S19590C3 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(64,32), "S19590C2");
    check_base_class_offset(lv, (S19859C6*)(S19590C9*)(S19590C8*), ABISELECT(64,32), "S19590C2");
    check_base_class_offset(lv, (S19859C6*)(S19590C6*)(S19590C9*)(S19590C8*), ABISELECT(64,32), "S19590C2");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*)(S19590C7*), ABISELECT(64,32), "S19590C2");
    /*is_ambiguous_... S19590C2::S19590C3 */ AMB_check_base_class_offset(lv, (S19590C3*), 0, "S19590C2");
    check_base_class_offset(lv, (S19590C6*)(S19590C5*), ABISELECT(80,40), "S19590C2");
    /*is_ambiguous_... S19590C8::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*)(S19590C8*), ABISELECT(80,40), "S19590C2");
    check_base_class_offset(lv, (S19590C5*), ABISELECT(80,40), "S19590C2");
    /*is_ambiguous_... S19590C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C8*), ABISELECT(88,44), "S19590C2");
    check_base_class_offset(lv, (S19590C3*)(S19590C8*), ABISELECT(120,64), "S19590C2");
    check_base_class_offset(lv, (S19590C3*)(S19590C9*)(S19590C8*), ABISELECT(120,64), "S19590C2");
    check_base_class_offset(lv, (S19590C3*)(S19590C10*), ABISELECT(120,64), "S19590C2");
    check_base_class_offset(lv, (S19590C6*)(S19590C9*)(S19590C8*), ABISELECT(104,52), "S19590C2");
    check_base_class_offset(lv, (S19590C9*)(S19590C8*), ABISELECT(104,52), "S19590C2");
    check_base_class_offset(lv, (S19590C8*)(S19590C7*), ABISELECT(88,44), "S19590C2");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*)(S19590C7*), ABISELECT(8,4), "S19590C2");
    check_base_class_offset(lv, (S19590C7*), ABISELECT(8,4), "S19590C2");
    /*is_ambiguous_... S19590C10::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C10*), ABISELECT(128,68), "S19590C2");
    check_base_class_offset(lv, (S19590C10*), ABISELECT(128,68), "S19590C2");
    check_field_offset(lv, s19590c2f0, ABISELECT(16,8), "S19590C2.s19590c2f0");
    check_field_offset(lv, s19590c2f1, ABISELECT(48,20), "S19590C2.s19590c2f1");
    test_class_info(&lv, &cd_S19590C2);
    dp->~S19590C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C2(Test_S19590C2, "S19590C2", ABISELECT(144,76));

#else // __cplusplus

extern void _ZN8S19590C2C1Ev();
extern void _ZN8S19590C2D2Ev();
Name_Map name_map_S19590C2[] = {
  NSPAIR(_ZN8S19590C2C1Ev),
  NSPAIR(_ZN8S19590C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C5;
extern VTBL_ENTRY _ZTI8S19590C5[];
extern  VTBL_ENTRY _ZTV8S19590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C9;
extern VTBL_ENTRY _ZTI8S19590C9[];
extern  VTBL_ENTRY _ZTV8S19590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C9[];
extern Class_Descriptor cd_S19590C8;
extern VTBL_ENTRY _ZTI8S19590C8[];
extern  VTBL_ENTRY _ZTV8S19590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C8[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C7;
extern VTBL_ENTRY _ZTI8S19590C7[];
extern  VTBL_ENTRY _ZTV8S19590C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C7[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C10;
extern VTBL_ENTRY _ZTI9S19590C10[];
extern  VTBL_ENTRY _ZTV9S19590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19590C10[];
static Base_Class bases_S19590C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(64,32), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19590C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19590C6,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19590C5,    ABISELECT(80,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19590C3,    ABISELECT(120,64), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19590C6,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19590C9,    ABISELECT(104,52), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19590C8,    ABISELECT(88,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19590C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19590C7,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(128,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19590C10,    ABISELECT(128,68), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C2[];
extern void _ZN8S19590C2D1Ev();
extern void _ZN8S19590C2D0Ev();
extern void ABISELECT(_ZThn8_N8S19590C2D1Ev,_ZThn4_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C2D0Ev,_ZThn4_N8S19590C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C2D1Ev,_ZTv0_n12_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S19590C2D1Ev,_ZThn32_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C2D0Ev,_ZTv0_n12_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S19590C2D0Ev,_ZThn32_N8S19590C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19590C2D1Ev,_ZThn40_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19590C2D0Ev,_ZThn40_N8S19590C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C2D1Ev,_ZTv0_n24_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn88_N8S19590C2D1Ev,_ZThn44_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C2D0Ev,_ZTv0_n24_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn88_N8S19590C2D0Ev,_ZThn44_N8S19590C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S19590C2D1Ev,_ZTvn8_n24_N8S19590C2D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19590C2D0Ev,_ZTvn8_n24_N8S19590C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S19590C2D1Ev,_ZThn64_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S19590C2D0Ev,_ZThn64_N8S19590C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19590C2D1Ev,_ZTv0_n20_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn128_N8S19590C2D1Ev,_ZThn68_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19590C2D0Ev,_ZTv0_n20_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn128_N8S19590C2D0Ev,_ZThn68_N8S19590C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C2[] = {
  ABISELECT(128,68),
  ABISELECT(120,64),
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&_ZN8S19590C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C2D0Ev,
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19590C2D1Ev,_ZThn4_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19590C2D0Ev,_ZThn4_N8S19590C2D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C2D1Ev,_ZTv0_n12_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C2D0Ev,_ZTv0_n12_N8S19590C2D0Ev),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C2D1Ev,_ZTv0_n24_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C2D0Ev,_ZTv0_n24_N8S19590C2D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C2D1Ev,_ZTvn8_n24_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C2D0Ev,_ZTvn8_n24_N8S19590C2D0Ev),
  ABISELECT(-120,-64),
  ABISELECT(-56,-32),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev),
  ABISELECT(-128,-68),
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19590C2D1Ev,_ZTv0_n20_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19590C2D0Ev,_ZTv0_n20_N8S19590C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C2[];
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__A__8S19590C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19590C3D1Ev,_ZThn32_N8S19590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19590C3D0Ev,_ZThn32_N8S19590C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__A__8S19590C2[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern void _ZN8S19590C7D1Ev();
extern void _ZN8S19590C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C7__8S19590C2[] = {
  ABISELECT(72,36),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&_ZN8S19590C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C7D0Ev,
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C68S19590C7__A2__8S19590C2[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19590C6D1Ev,_ZThn28_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S19590C6D0Ev,_ZThn28_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C68S19590C7__A2__8S19590C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn80_N8S19590C7D1Ev,_ZThn40_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn80_N8S19590C7D0Ev,_ZThn40_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C8__8S19590C7__8S19590C2[] = {
  ABISELECT(-80,-40),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn112_N8S19590C7D1Ev,_ZThn60_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn112_N8S19590C7D0Ev,_ZThn60_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C7__8S19590C2[] = {
  ABISELECT(-112,-60),
  ABISELECT(-56,-32),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19590C7D1Ev,_ZThn28_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19590C7D0Ev,_ZThn28_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19590C7__8S19590C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S19590C7D1Ev,_ZTvn8_n24_N8S19590C7D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19590C7D0Ev,_ZTvn8_n24_N8S19590C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C98S19590C8__8S19590C7__8S19590C2[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C7D1Ev,_ZTvn8_n24_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C7D0Ev,_ZTvn8_n24_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S19590C7D1Ev,_ZThn36_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S19590C7D0Ev,_ZThn36_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C7__8S19590C2[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C5D1Ev,_ZTv0_n16_N8S19590C5D1Ev)();
extern void _ZN8S19590C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C5D0Ev,_ZTv0_n16_N8S19590C5D0Ev)();
extern void _ZN8S19590C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C5__8S19590C2[] = {
  0,
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C5D1Ev,_ZTv0_n16_N8S19590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C5D0Ev,_ZTv0_n16_N8S19590C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C5__8S19590C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev),
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__8S19590C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__8S19590C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void _ZN8S19590C8D1Ev();
extern void _ZN8S19590C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C8__8S19590C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&_ZN8S19590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C8D0Ev,
};
extern void _ZN8S19590C9D1Ev();
extern void _ZN8S19590C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C98S19590C8__8S19590C2[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&_ZN8S19590C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C9D0Ev,
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C68S19590C98S19590C8__A1__8S19590C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C68S19590C98S19590C8__A1__8S19590C2[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C98S19590C8__8S19590C2[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C98S19590C8__8S19590C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C8__8S19590C2[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19590C8__8S19590C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C9__8S19590C8__8S19590C2[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C8__8S19590C2[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__A1__8S19590C2[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__A1__8S19590C2[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern void _ZN9S19590C10D1Ev();
extern void _ZN9S19590C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19590C10__8S19590C2[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&_ZN9S19590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19590C10D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C3__9S19590C10__8S19590C2[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19590C10__8S19590C2[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev),
};
static  VTT_ENTRY vtt_S19590C2[] = {
  {&(_ZTV8S19590C2[8]),  8,57},
  {&(_tg__ZTV8S19590C3__A__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__A__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C7__8S19590C2[6]),  6,8},
  {&(_tg__ZTV8S19590C68S19590C7__A2__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C68S19590C7__A2__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C8__8S19590C7__8S19590C2[6]),  6,8},
  {&(_tg__ZTV8S19590C3__8S19590C7__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19590C7__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C98S19590C8__8S19590C7__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19590C6__A1__8S19590C7__8S19590C2[4]),  4,6},
  {&(_ZTV8S19590C2[21]),  21,57},
  {&(_ZTV8S19590C2[28]),  28,57},
  {&(_ZTV8S19590C2[28]),  28,57},
  {&(_ZTV8S19590C2[16]),  16,57},
  {&(_ZTV8S19590C2[36]),  36,57},
  {&(_ZTV8S19590C2[48]),  48,57},
  {&(_ZTV8S19590C2[42]),  42,57},
  {&(_ZTV8S19590C2[55]),  55,57},
  {&(_tg__ZTV8S19590C5__8S19590C2[5]),  5,7},
  {&(_tg__ZTV8S19590C5__8S19590C2[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S19590C5__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C6__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C8__8S19590C2[5]),  5,7},
  {&(_tg__ZTV8S19590C98S19590C8__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19590C68S19590C98S19590C8__A1__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C68S19590C98S19590C8__A1__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C98S19590C8__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C3__8S19590C98S19590C8__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19590C3__8S19590C8__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19590C8__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19590C9__8S19590C8__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19590C6__A1__8S19590C8__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19590C3__A1__8S19590C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__A1__8S19590C2[3]),  3,5},
  {&(_tg__ZTV9S19590C10__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19590C3__9S19590C10__8S19590C2[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19590C10__8S19590C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19590C2[];
extern  VTBL_ENTRY _ZTV8S19590C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C2[];
static VTBL_ENTRY alt_thunk_names145[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C5D0Ev,_ZTv0_n16_N8S19590C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19590C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C5D1Ev,_ZTv0_n16_N8S19590C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19590C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C7D0Ev,_ZThn28_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C7D1Ev,_ZThn28_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19590C7D0Ev,_ZThn36_N8S19590C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19590C7D0Ev,_ZThn60_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19590C7D1Ev,_ZThn36_N8S19590C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19590C7D1Ev,_ZThn60_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C7D0Ev,_ZThn40_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C7D1Ev,_ZThn40_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C6D0Ev,_ZThn28_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C6D1Ev,_ZThn28_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C3D0Ev,_ZThn32_N8S19590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C3D1Ev,_ZThn32_N8S19590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19590C2D0Ev,_ZTv0_n20_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19590C2D0Ev,_ZThn68_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19590C2D1Ev,_ZTv0_n20_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19590C2D1Ev,_ZThn68_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C2D0Ev,_ZTv0_n24_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19590C2D0Ev,_ZThn44_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C2D1Ev,_ZTv0_n24_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19590C2D1Ev,_ZThn44_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19590C2D0Ev,_ZThn64_N8S19590C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C2D0Ev,_ZThn40_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19590C2D1Ev,_ZThn64_N8S19590C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C2D1Ev,_ZThn40_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C2D0Ev,_ZTv0_n12_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C2D0Ev,_ZThn32_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C2D1Ev,_ZTv0_n12_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C2D1Ev,_ZThn32_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C2 = {  "S19590C2", // class name
  bases_S19590C2, 13,
  &(vtc_S19590C2[0]), // expected_vtbl_contents
  &(vtt_S19590C2[0]), // expected_vtt_contents
  ABISELECT(144,76), // object size
  NSPAIRA(_ZTI8S19590C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19590C2),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C2),39, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names145,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19590C1  : virtual S19590C2 {
  virtual  ~S19590C1(); // _ZN8S19590C1D2Ev
  S19590C1(); // tgen
};
//SIG(1 S19590C1) C1{ VBC2{ BC3{ VBC4{ vd m Fs} vd} VBC5{ VBC6{ VBC4} vd} BC7{ VBC8{ BC4 VBC3 BC9{ VBC4 VBC3 BC6 vd Fi} VBC6 vd Fi} BC6 vd} VBC10{ BC4 VBC3 vd} vd FC11{ VBC12{ VBC4 vd}} FD} vd}


 S19590C1 ::~S19590C1(){ note_dtor("S19590C1", this);}
S19590C1 ::S19590C1(){ note_ctor("S19590C1", this);} // tgen

static void Test_S19590C1()
{
  extern Class_Descriptor cd_S19590C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19590C1, buf);
    S19590C1 *dp, &lv = *(dp=new (buf) S19590C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S19590C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19590C1)");
    /*is_ambiguous_... S19590C2::S19590C3 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C3*)(S19590C2*), ABISELECT(80,36), "S19590C1");
    /*is_ambiguous_... S19590C1::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*), ABISELECT(80,36), "S19590C1");
    /*is_ambiguous_... S19590C1::S19590C3 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C3*), ABISELECT(80,36), "S19590C1");
    check_base_class_offset(lv, (S19859C6*)(S19590C9*)(S19590C8*), ABISELECT(80,36), "S19590C1");
    check_base_class_offset(lv, (S19859C6*)(S19590C6*)(S19590C9*)(S19590C8*), ABISELECT(80,36), "S19590C1");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C6*)(S19590C7*)(S19590C2*), ABISELECT(80,36), "S19590C1");
    /*is_ambiguous_... S19590C2::S19590C3 */ AMB_check_base_class_offset(lv, (S19590C3*)(S19590C2*), ABISELECT(16,4), "S19590C1");
    check_base_class_offset(lv, (S19590C6*)(S19590C5*), 0, "S19590C1");
    /*is_ambiguous_... S19590C8::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*)(S19590C8*), 0, "S19590C1");
    check_base_class_offset(lv, (S19590C5*)(S19590C2*), 0, "S19590C1");
    /*is_ambiguous_... S19590C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C8*), ABISELECT(96,44), "S19590C1");
    check_base_class_offset(lv, (S19590C3*)(S19590C8*), ABISELECT(128,64), "S19590C1");
    check_base_class_offset(lv, (S19590C3*)(S19590C9*)(S19590C8*), ABISELECT(128,64), "S19590C1");
    check_base_class_offset(lv, (S19590C3*)(S19590C10*), ABISELECT(128,64), "S19590C1");
    check_base_class_offset(lv, (S19590C6*)(S19590C9*)(S19590C8*), ABISELECT(112,52), "S19590C1");
    check_base_class_offset(lv, (S19590C9*)(S19590C8*), ABISELECT(112,52), "S19590C1");
    check_base_class_offset(lv, (S19590C8*)(S19590C7*)(S19590C2*), ABISELECT(96,44), "S19590C1");
    /*is_ambiguous_... S19590C7::S19590C6 */ AMB_check_base_class_offset(lv, (S19590C6*)(S19590C7*)(S19590C2*), ABISELECT(24,8), "S19590C1");
    check_base_class_offset(lv, (S19590C7*)(S19590C2*), ABISELECT(24,8), "S19590C1");
    /*is_ambiguous_... S19590C10::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S19590C10*), ABISELECT(136,68), "S19590C1");
    check_base_class_offset(lv, (S19590C10*)(S19590C2*), ABISELECT(136,68), "S19590C1");
    check_base_class_offset(lv, (S19590C2*), ABISELECT(16,4), "S19590C1");
    test_class_info(&lv, &cd_S19590C1);
    dp->~S19590C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19590C1(Test_S19590C1, "S19590C1", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN8S19590C1C1Ev();
extern void _ZN8S19590C1D2Ev();
Name_Map name_map_S19590C1[] = {
  NSPAIR(_ZN8S19590C1C1Ev),
  NSPAIR(_ZN8S19590C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C5;
extern VTBL_ENTRY _ZTI8S19590C5[];
extern  VTBL_ENTRY _ZTV8S19590C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C3;
extern VTBL_ENTRY _ZTI8S19590C3[];
extern  VTBL_ENTRY _ZTV8S19590C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C3[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C9;
extern VTBL_ENTRY _ZTI8S19590C9[];
extern  VTBL_ENTRY _ZTV8S19590C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C9[];
extern Class_Descriptor cd_S19590C8;
extern VTBL_ENTRY _ZTI8S19590C8[];
extern  VTBL_ENTRY _ZTV8S19590C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C8[];
extern Class_Descriptor cd_S19590C6;
extern VTBL_ENTRY _ZTI8S19590C6[];
extern  VTBL_ENTRY _ZTV8S19590C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C6[];
extern Class_Descriptor cd_S19590C7;
extern VTBL_ENTRY _ZTI8S19590C7[];
extern  VTBL_ENTRY _ZTV8S19590C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C7[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19590C10;
extern VTBL_ENTRY _ZTI9S19590C10[];
extern  VTBL_ENTRY _ZTV9S19590C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19590C10[];
extern Class_Descriptor cd_S19590C2;
extern VTBL_ENTRY _ZTI8S19590C2[];
extern  VTBL_ENTRY _ZTV8S19590C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C2[];
static Base_Class bases_S19590C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(80,36), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19590C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19590C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19590C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19859C6,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19590C3,    ABISELECT(128,64), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19590C6,    ABISELECT(112,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19590C9,    ABISELECT(112,52), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19590C8,    ABISELECT(96,44), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19590C6,    ABISELECT(24,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19590C7,    ABISELECT(24,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19590C10,    ABISELECT(136,68), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19590C2,    ABISELECT(16,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19590C1[];
extern void ABISELECT(_ZTv0_n32_N8S19590C1D1Ev,_ZTv0_n16_N8S19590C1D1Ev)();
extern void _ZN8S19590C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C1D0Ev,_ZTv0_n16_N8S19590C1D0Ev)();
extern void _ZN8S19590C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19590C1D1Ev,_ZTv0_n36_N8S19590C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C1D1Ev,_ZThn4_N8S19590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19590C1D0Ev,_ZTv0_n36_N8S19590C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C1D0Ev,_ZThn4_N8S19590C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n72_N8S19590C1D1Ev,_ZTvn4_n36_N8S19590C1D1Ev)();
extern void ABISELECT(_ZTvn8_n72_N8S19590C1D0Ev,_ZTvn4_n36_N8S19590C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C1D1Ev,_ZTv0_n12_N8S19590C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S19590C1D1Ev,_ZThn36_N8S19590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C1D0Ev,_ZTv0_n12_N8S19590C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S19590C1D0Ev,_ZThn36_N8S19590C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C1D1Ev,_ZTv0_n24_N8S19590C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19590C1D1Ev,_ZThn44_N8S19590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C1D0Ev,_ZTv0_n24_N8S19590C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19590C1D0Ev,_ZThn44_N8S19590C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N8S19590C1D1Ev,_ZTvn8_n24_N8S19590C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19590C1D0Ev,_ZTvn8_n24_N8S19590C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C1D1Ev,_ZTv0_n16_N8S19590C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19590C1D1Ev,_ZThn64_N8S19590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C1D0Ev,_ZTv0_n16_N8S19590C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19590C1D0Ev,_ZThn64_N8S19590C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19590C1D1Ev,_ZTv0_n20_N8S19590C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19590C1D1Ev,_ZThn68_N8S19590C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19590C1D0Ev,_ZTv0_n20_N8S19590C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19590C1D0Ev,_ZThn68_N8S19590C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19590C1[] = {
  ABISELECT(136,68),
  ABISELECT(128,64),
  ABISELECT(96,44),
  0,
  ABISELECT(16,4),
  0,
  0,
  ABISELECT(80,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C1D1Ev,_ZTv0_n16_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C1D0Ev,_ZTv0_n16_N8S19590C1D0Ev),
  ABISELECT(-16,-4),
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(64,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19590C1D1Ev,_ZTv0_n36_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19590C1D0Ev,_ZTv0_n36_N8S19590C1D0Ev),
  ABISELECT(-24,-8),
  ABISELECT(104,56),
  ABISELECT(72,36),
  ABISELECT(56,28),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n72_N8S19590C1D1Ev,_ZTvn4_n36_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n72_N8S19590C1D0Ev,_ZTvn4_n36_N8S19590C1D0Ev),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C1D1Ev,_ZTv0_n12_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C1D0Ev,_ZTv0_n12_N8S19590C1D0Ev),
  ABISELECT(-96,-44),
  ABISELECT(-96,-44),
  ABISELECT(-16,-8),
  ABISELECT(32,20),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C1D1Ev,_ZTv0_n24_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C1D0Ev,_ZTv0_n24_N8S19590C1D0Ev),
  ABISELECT(16,12),
  ABISELECT(-32,-16),
  ABISELECT(-112,-52),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C1D1Ev,_ZTvn8_n24_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C1D0Ev,_ZTvn8_n24_N8S19590C1D0Ev),
  ABISELECT(-128,-64),
  ABISELECT(-48,-28),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C1D1Ev,_ZTv0_n16_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C1D0Ev,_ZTv0_n16_N8S19590C1D0Ev),
  ABISELECT(-136,-68),
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S19590C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19590C1D1Ev,_ZTv0_n20_N8S19590C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19590C1D0Ev,_ZTv0_n20_N8S19590C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19590C1[];
extern void _ZN8S19590C2D1Ev();
extern void _ZN8S19590C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C2__8S19590C1[] = {
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(80,40),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&_ZN8S19590C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C2D0Ev,
};
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C38S19590C2__8S19590C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S19590C3D1Ev,_ZThn32_N8S19590C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S19590C3D0Ev,_ZThn32_N8S19590C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C38S19590C2__8S19590C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern void _ZN8S19590C7D1Ev();
extern void _ZN8S19590C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C78S19590C2__8S19590C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(104,56),
  ABISELECT(72,36),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&_ZN8S19590C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C7D0Ev,
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C68S19590C78S19590C2__A2__8S19590C1[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S19590C6D1Ev,_ZThn28_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S19590C6D0Ev,_ZThn28_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C68S19590C78S19590C2__A2__8S19590C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S19590C7D1Ev,_ZThn36_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S19590C7D0Ev,_ZThn36_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C8__8S19590C78S19590C2__8S19590C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-96,-44),
  ABISELECT(-16,-8),
  ABISELECT(32,20),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S19590C7D1Ev,_ZThn56_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S19590C7D0Ev,_ZThn56_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C78S19590C2__8S19590C1[] = {
  ABISELECT(-104,-56),
  ABISELECT(-48,-28),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S19590C7D1Ev,_ZThn28_N8S19590C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S19590C7D0Ev,_ZThn28_N8S19590C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19590C78S19590C2__8S19590C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S19590C7D1Ev,_ZTvn8_n24_N8S19590C7D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19590C7D0Ev,_ZTvn8_n24_N8S19590C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C98S19590C8__8S19590C78S19590C2__8S19590C1[] = {
  ABISELECT(16,12),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C7D1Ev,_ZTvn8_n24_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C7D0Ev,_ZTvn8_n24_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C78S19590C2__8S19590C1[] = {
  ABISELECT(24,8),
  ABISELECT(80,36),
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI8S19590C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C2D1Ev,_ZTv0_n12_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S19590C2D1Ev,_ZThn32_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C2D0Ev,_ZTv0_n12_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S19590C2D0Ev,_ZThn32_N8S19590C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C2__8S19590C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C2D1Ev,_ZTv0_n12_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C2D0Ev,_ZTv0_n12_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C5__8S19590C2__8S19590C1[] = {
  0,
  ABISELECT(16,4),
  ABISELECT(80,36),
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZThn8_N8S19590C2D1Ev,_ZThn4_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19590C2D0Ev,_ZThn4_N8S19590C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C7__8S19590C2__8S19590C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(104,56),
  ABISELECT(72,36),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19590C2D1Ev,_ZThn4_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19590C2D0Ev,_ZThn4_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19590C2D1Ev,_ZTv0_n24_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19590C2D1Ev,_ZThn40_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19590C2D0Ev,_ZTv0_n24_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19590C2D0Ev,_ZThn40_N8S19590C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C8__8S19590C2__8S19590C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-96,-44),
  ABISELECT(-16,-8),
  ABISELECT(32,20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C2D1Ev,_ZTv0_n24_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19590C2D0Ev,_ZTv0_n24_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S19590C2D1Ev,_ZThn60_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn112_N8S19590C2D0Ev,_ZThn60_N8S19590C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__A1__8S19590C2__8S19590C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-48,-28),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N8S19590C2D1Ev,_ZTvn8_n24_N8S19590C2D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N8S19590C2D0Ev,_ZTvn8_n24_N8S19590C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C98S19590C8__8S19590C2__8S19590C1[] = {
  ABISELECT(16,12),
  ABISELECT(-32,-16),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C2D1Ev,_ZTvn8_n24_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N8S19590C2D0Ev,_ZTvn8_n24_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19590C2D1Ev,_ZTv0_n20_N8S19590C2D1Ev)();
extern void ABISELECT(_ZThn120_N8S19590C2D1Ev,_ZThn64_N8S19590C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19590C2D0Ev,_ZTv0_n20_N8S19590C2D0Ev)();
extern void ABISELECT(_ZThn120_N8S19590C2D0Ev,_ZThn64_N8S19590C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19590C10__8S19590C2__8S19590C1[] = {
  ABISELECT(-120,-64),
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19590C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19590C2D1Ev,_ZTv0_n20_N8S19590C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19590C2D0Ev,_ZTv0_n20_N8S19590C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C5D1Ev,_ZTv0_n16_N8S19590C5D1Ev)();
extern void _ZN8S19590C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C5D0Ev,_ZTv0_n16_N8S19590C5D0Ev)();
extern void _ZN8S19590C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C5__8S19590C1[] = {
  0,
  0,
  ABISELECT(80,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C5D1Ev,_ZTv0_n16_N8S19590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C5D0Ev,_ZTv0_n16_N8S19590C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev)();
extern void ABISELECT(_ZThn80_N8S19590C5D1Ev,_ZThn36_N8S19590C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev)();
extern void ABISELECT(_ZThn80_N8S19590C5D0Ev,_ZThn36_N8S19590C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C5__8S19590C1[] = {
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19590C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev),
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C6__8S19590C1[] = {
  ABISELECT(80,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S19590C6D1Ev,_ZThn36_N8S19590C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S19590C6D0Ev,_ZThn36_N8S19590C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C6__8S19590C1[] = {
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void _ZN8S19590C8D1Ev();
extern void _ZN8S19590C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C8__8S19590C1[] = {
  ABISELECT(-96,-44),
  ABISELECT(-16,-8),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&_ZN8S19590C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C8D0Ev,
};
extern void _ZN8S19590C9D1Ev();
extern void _ZN8S19590C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C98S19590C8__8S19590C1[] = {
  ABISELECT(16,12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&_ZN8S19590C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C9D0Ev,
};
extern void _ZN8S19590C6D1Ev();
extern void _ZN8S19590C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C68S19590C98S19590C8__A1__8S19590C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&_ZN8S19590C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C68S19590C98S19590C8__A1__8S19590C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19590C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C98S19590C8__8S19590C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D1Ev,_ZTv0_n12_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C9D0Ev,_ZTv0_n12_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C98S19590C8__8S19590C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-48,-28),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19590C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19590C3__8S19590C8__8S19590C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-48,-28),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S19590C8__8S19590C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D1Ev,_ZTv0_n12_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C8D0Ev,_ZTv0_n12_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C9__8S19590C8__8S19590C1[] = {
  ABISELECT(16,12),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D1Ev,_ZThn8_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19590C8D0Ev,_ZThn8_N8S19590C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C6__A1__8S19590C8__8S19590C1[] = {
  ABISELECT(96,44),
  ABISELECT(80,36),
  ABISELECT(96,44),
  (VTBL_ENTRY)&(_ZTI8S19590C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev),
};
extern void _ZN8S19590C3D1Ev();
extern void _ZN8S19590C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19590C3__A1__8S19590C1[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&_ZN8S19590C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19590C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S19590C3__A1__8S19590C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S19590C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev),
};
extern void _ZN9S19590C10D1Ev();
extern void _ZN9S19590C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19590C10__8S19590C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&_ZN9S19590C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19590C10D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19590C3__9S19590C10__8S19590C1[] = {
  ABISELECT(8,4),
  ABISELECT(-48,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19590C10D1Ev,_ZTv0_n16_N9S19590C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19590C10D0Ev,_ZTv0_n16_N9S19590C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__9S19590C10__8S19590C1[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S19590C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19590C10D1Ev,_ZTv0_n12_N9S19590C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19590C10D0Ev,_ZTv0_n12_N9S19590C10D0Ev),
};
static  VTT_ENTRY vtt_S19590C1[] = {
  {&(_ZTV8S19590C1[10]),  10,63},
  {&(_ZTV8S19590C1[21]),  21,63},
  {&(_ZTV8S19590C1[34]),  34,63},
  {&(_ZTV8S19590C1[10]),  10,63},
  {&(_ZTV8S19590C1[10]),  10,63},
  {&(_ZTV8S19590C1[29]),  29,63},
  {&(_ZTV8S19590C1[42]),  42,63},
  {&(_ZTV8S19590C1[54]),  54,63},
  {&(_ZTV8S19590C1[48]),  48,63},
  {&(_ZTV8S19590C1[61]),  61,63},
  {&(_tg__ZTV8S19590C2__8S19590C1[8]),  8,10},
  {&(_tg__ZTV8S19590C38S19590C2__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C38S19590C2__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C78S19590C2__8S19590C1[6]),  6,8},
  {&(_tg__ZTV8S19590C68S19590C78S19590C2__A2__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C68S19590C78S19590C2__A2__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C8__8S19590C78S19590C2__8S19590C1[6]),  6,8},
  {&(_tg__ZTV8S19590C3__8S19590C78S19590C2__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19590C78S19590C2__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C98S19590C8__8S19590C78S19590C2__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C6__A1__8S19590C78S19590C2__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S19590C2__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C5__8S19590C2__8S19590C1[5]),  5,7},
  {&(_tg__ZTV8S19590C5__8S19590C2__8S19590C1[5]),  5,7},
  {&(_tg__ZTV8S19590C7__8S19590C2__8S19590C1[6]),  6,8},
  {&(_tg__ZTV8S19590C8__8S19590C2__8S19590C1[6]),  6,8},
  {&(_tg__ZTV8S19590C3__A1__8S19590C2__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C98S19590C8__8S19590C2__8S19590C1[4]),  4,6},
  {&(_tg__ZTV9S19590C10__8S19590C2__8S19590C1[5]),  5,7},
  {&(_tg__ZTV8S19590C5__8S19590C1[5]),  5,7},
  {&(_tg__ZTV8S19590C5__8S19590C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S19590C5__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C6__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C6__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C8__8S19590C1[5]),  5,7},
  {&(_tg__ZTV8S19590C98S19590C8__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C68S19590C98S19590C8__A1__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C68S19590C98S19590C8__A1__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C98S19590C8__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C3__8S19590C98S19590C8__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C3__8S19590C8__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S19590C8__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19590C9__8S19590C8__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C6__A1__8S19590C8__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C3__A1__8S19590C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S19590C3__A1__8S19590C1[3]),  3,5},
  {&(_tg__ZTV9S19590C10__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19590C3__9S19590C10__8S19590C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__9S19590C10__8S19590C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19590C1[];
extern  VTBL_ENTRY _ZTV8S19590C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19590C1[];
static VTBL_ENTRY alt_thunk_names146[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D0Ev,_ZTv0_n16_N8S19590C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D0Ev,_ZThn20_N8S19590C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C8D1Ev,_ZTv0_n16_N8S19590C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19590C8D1Ev,_ZThn20_N8S19590C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D0Ev,_ZTv0_n16_N8S19590C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D0Ev,_ZThn12_N8S19590C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C9D1Ev,_ZTv0_n16_N8S19590C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C9D1Ev,_ZThn12_N8S19590C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C5D0Ev,_ZTv0_n12_N8S19590C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C5D0Ev,_ZThn36_N8S19590C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C5D1Ev,_ZTv0_n12_N8S19590C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C5D1Ev,_ZThn36_N8S19590C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C5D0Ev,_ZTv0_n16_N8S19590C5D0Ev), // 
  (VTBL_ENTRY)_ZN8S19590C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C5D1Ev,_ZTv0_n16_N8S19590C5D1Ev), // 
  (VTBL_ENTRY)_ZN8S19590C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19590C2D0Ev,_ZTv0_n20_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19590C2D0Ev,_ZThn64_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19590C2D1Ev,_ZTv0_n20_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19590C2D1Ev,_ZThn64_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C2D0Ev,_ZTv0_n16_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19590C2D0Ev,_ZThn60_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C2D1Ev,_ZTv0_n16_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19590C2D1Ev,_ZThn60_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C2D0Ev,_ZTv0_n24_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C2D0Ev,_ZThn40_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C2D1Ev,_ZTv0_n24_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C2D1Ev,_ZThn40_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C2D0Ev,_ZTv0_n12_N8S19590C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C2D0Ev,_ZThn32_N8S19590C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C2D1Ev,_ZTv0_n12_N8S19590C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C2D1Ev,_ZThn32_N8S19590C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C7D0Ev,_ZTv0_n12_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C7D0Ev,_ZThn28_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C7D1Ev,_ZTv0_n12_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C7D1Ev,_ZThn28_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C7D0Ev,_ZTv0_n16_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19590C7D0Ev,_ZThn56_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C7D1Ev,_ZTv0_n16_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19590C7D1Ev,_ZThn56_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C7D0Ev,_ZTv0_n24_N8S19590C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19590C7D0Ev,_ZThn36_N8S19590C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C7D1Ev,_ZTv0_n24_N8S19590C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19590C7D1Ev,_ZThn36_N8S19590C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D0Ev,_ZTv0_n12_N8S19590C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C6D0Ev,_ZThn36_N8S19590C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C6D0Ev,_ZThn28_N8S19590C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C6D1Ev,_ZTv0_n12_N8S19590C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C6D1Ev,_ZThn36_N8S19590C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19590C6D1Ev,_ZThn28_N8S19590C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D0Ev,_ZTv0_n12_N8S19590C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C3D0Ev,_ZThn32_N8S19590C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C3D1Ev,_ZTv0_n12_N8S19590C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19590C3D1Ev,_ZThn32_N8S19590C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19590C1D0Ev,_ZTv0_n20_N8S19590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19590C1D0Ev,_ZThn68_N8S19590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19590C1D1Ev,_ZTv0_n20_N8S19590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19590C1D1Ev,_ZThn68_N8S19590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C1D0Ev,_ZTv0_n24_N8S19590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19590C1D0Ev,_ZThn44_N8S19590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19590C1D1Ev,_ZTv0_n24_N8S19590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19590C1D1Ev,_ZThn44_N8S19590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C1D0Ev,_ZTv0_n12_N8S19590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C1D0Ev,_ZThn36_N8S19590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19590C1D1Ev,_ZTv0_n12_N8S19590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19590C1D1Ev,_ZThn36_N8S19590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19590C1D0Ev,_ZTv0_n36_N8S19590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C1D0Ev,_ZThn4_N8S19590C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19590C1D1Ev,_ZTv0_n36_N8S19590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19590C1D1Ev,_ZThn4_N8S19590C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C1D0Ev,_ZTv0_n16_N8S19590C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19590C1D0Ev,_ZThn64_N8S19590C1D0Ev),
  (VTBL_ENTRY)_ZN8S19590C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19590C1D1Ev,_ZTv0_n16_N8S19590C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19590C1D1Ev,_ZThn64_N8S19590C1D1Ev),
  (VTBL_ENTRY)_ZN8S19590C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19590C1 = {  "S19590C1", // class name
  bases_S19590C1, 14,
  &(vtc_S19590C1[0]), // expected_vtbl_contents
  &(vtt_S19590C1[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI8S19590C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19590C1),63, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19590C1),49, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names146,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C7  : S5217C60_nt {
  void *s7745c7f0[2];
};
//SIG(-1 S7745C7) C1{ BC2{ m Fp} Fp[2]}



static void Test_S7745C7()
{
  extern Class_Descriptor cd_S7745C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7745C7, buf);
    S7745C7 &lv = *(new (buf) S7745C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7745C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C7)");
    check_base_class_offset(lv, (S5217C60_nt*), 0, "S7745C7");
    check_field_offset(lv, s7745c7f0, ABISELECT(8,4), "S7745C7.s7745c7f0");
    test_class_info(&lv, &cd_S7745C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C7(Test_S7745C7, "S7745C7", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
static Base_Class bases_S7745C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C7[];
Class_Descriptor cd_S7745C7 = {  "S7745C7", // class name
  bases_S7745C7, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7745C7),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C6  : S5217C60_nt , S7745C7 {
};
//SIG(-1 S7745C6) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S7745C6()
{
  extern Class_Descriptor cd_S7745C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7745C6, buf);
    S7745C6 &lv = *(new (buf) S7745C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7745C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C6)");
    /*is_ambiguous_... S7745C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), 0, "S7745C6");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(8,4), "S7745C6");
    check_base_class_offset(lv, (S7745C7*), ABISELECT(8,4), "S7745C6");
    test_class_info(&lv, &cd_S7745C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C6(Test_S7745C6, "S7745C6", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
static Base_Class bases_S7745C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C6[];
Class_Descriptor cd_S7745C6 = {  "S7745C6", // class name
  bases_S7745C6, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7745C6),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C8  : virtual S5217C60_nt , virtual S7745C7 {
  virtual  ~S7745C8(); // _ZN7S7745C8D2Ev
  S7745C8(); // tgen
};
//SIG(-1 S7745C8) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S7745C8 ::~S7745C8(){ note_dtor("S7745C8", this);}
S7745C8 ::S7745C8(){ note_ctor("S7745C8", this);} // tgen

static void Test_S7745C8()
{
  extern Class_Descriptor cd_S7745C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7745C8, buf);
    S7745C8 *dp, &lv = *(dp=new (buf) S7745C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7745C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C8)");
    /*is_ambiguous_... S7745C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7745C8");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(16,8), "S7745C8");
    check_base_class_offset(lv, (S7745C7*), ABISELECT(16,8), "S7745C8");
    test_class_info(&lv, &cd_S7745C8);
    dp->~S7745C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C8(Test_S7745C8, "S7745C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7745C8C1Ev();
extern void _ZN7S7745C8D2Ev();
Name_Map name_map_S7745C8[] = {
  NSPAIR(_ZN7S7745C8C1Ev),
  NSPAIR(_ZN7S7745C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
static Base_Class bases_S7745C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C8[];
extern void _ZN7S7745C8D1Ev();
extern void _ZN7S7745C8D0Ev();
static  VTBL_ENTRY vtc_S7745C8[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C8[0]),
  (VTBL_ENTRY)&_ZN7S7745C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7745C8[];
static  VTT_ENTRY vtt_S7745C8[] = {
  {&(_ZTV7S7745C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7745C8[];
extern  VTBL_ENTRY _ZTV7S7745C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C8[];
Class_Descriptor cd_S7745C8 = {  "S7745C8", // class name
  bases_S7745C8, 3,
  &(vtc_S7745C8[0]), // expected_vtbl_contents
  &(vtt_S7745C8[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7745C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7745C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7745C8),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C3  : virtual S5217C60_nt , S2265C38 , virtual S7745C6 , virtual S7745C8 {
  ~S7745C3(); // tgen
  S7745C3(); // tgen
};
//SIG(-1 S7745C3) C1{ VBC2{ m Fp} BC3{ m} VBC4{ BC2 BC5{ BC2 Fp[2]}} VBC6{ VBC2 VBC5 vd}}


S7745C3 ::~S7745C3(){ note_dtor("S7745C3", this);} // tgen
S7745C3 ::S7745C3(){ note_ctor("S7745C3", this);} // tgen

static void Test_S7745C3()
{
  extern Class_Descriptor cd_S7745C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7745C3, buf);
    S7745C3 *dp, &lv = *(dp=new (buf) S7745C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7745C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C3)");
    /*is_ambiguous_... S7745C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(8,4), "S7745C3");
    /*is_ambiguous_... S7745C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C8*), ABISELECT(8,4), "S7745C3");
    check_base_class_offset(lv, (S2265C38*), 0, "S7745C3");
    /*is_ambiguous_... S7745C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C6*), ABISELECT(16,8), "S7745C3");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*)(S7745C6*), ABISELECT(24,12), "S7745C3");
    check_base_class_offset(lv, (S7745C7*)(S7745C6*), ABISELECT(24,12), "S7745C3");
    check_base_class_offset(lv, (S7745C6*), ABISELECT(16,8), "S7745C3");
    /*is_ambiguous_... S7745C3::S7745C7 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(48,24), "S7745C3");
    check_base_class_offset(lv, (S7745C7*)(S7745C8*), ABISELECT(48,24), "S7745C3");
    check_base_class_offset(lv, (S7745C8*), 0, "S7745C3");
    test_class_info(&lv, &cd_S7745C3);
    dp->~S7745C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C3(Test_S7745C3, "S7745C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7745C3C1Ev();
extern void _ZN7S7745C3D1Ev();
Name_Map name_map_S7745C3[] = {
  NSPAIR(_ZN7S7745C3C1Ev),
  NSPAIR(_ZN7S7745C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S7745C6;
extern VTBL_ENTRY _ZTI7S7745C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S7745C8;
extern VTBL_ENTRY _ZTI7S7745C8[];
extern  VTBL_ENTRY _ZTV7S7745C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C8[];
static Base_Class bases_S7745C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5217C60_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7745C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7745C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C3[];
extern void _ZN7S7745C3D1Ev();
extern void _ZN7S7745C3D0Ev();
static  VTBL_ENTRY vtc_S7745C3[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C3[0]),
  (VTBL_ENTRY)&_ZN7S7745C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S7745C3[];
extern void _ZN7S7745C8D1Ev();
extern void _ZN7S7745C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C8__7S7745C3[] = {
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C8[0]),
  (VTBL_ENTRY)&_ZN7S7745C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C8D0Ev,
};
static  VTT_ENTRY vtt_S7745C3[] = {
  {&(_ZTV7S7745C3[7]),  7,9},
  {&(_ZTV7S7745C3[7]),  7,9},
  {&(_tg__ZTV7S7745C8__7S7745C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7745C3[];
extern  VTBL_ENTRY _ZTV7S7745C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C3[];
Class_Descriptor cd_S7745C3 = {  "S7745C3", // class name
  bases_S7745C3, 9,
  &(vtc_S7745C3[0]), // expected_vtbl_contents
  &(vtt_S7745C3[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7745C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7745C3),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7745C3),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C2  : virtual S7745C3 {
  ::S7745C8 s7745c2f0;
  ~S7745C2(); // tgen
  S7745C2(); // tgen
};
//SIG(-1 S7745C2) C1{ VBC2{ VBC3{ m Fp} BC4{ m} VBC5{ BC3 BC6{ BC3 Fp[2]}} VBC7{ VBC3 VBC6 vd}} FC7}


S7745C2 ::~S7745C2(){ note_dtor("S7745C2", this);} // tgen
S7745C2 ::S7745C2(){ note_ctor("S7745C2", this);} // tgen

static void Test_S7745C2()
{
  extern Class_Descriptor cd_S7745C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S7745C2, buf);
    S7745C2 *dp, &lv = *(dp=new (buf) S7745C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7745C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C2)");
    /*is_ambiguous_... S7745C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C3*), ABISELECT(48,24), "S7745C2");
    /*is_ambiguous_... S7745C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C8*), ABISELECT(48,24), "S7745C2");
    check_base_class_offset(lv, (S2265C38*)(S7745C3*), 0, "S7745C2");
    /*is_ambiguous_... S7745C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C6*), ABISELECT(56,28), "S7745C2");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*)(S7745C6*), ABISELECT(64,32), "S7745C2");
    check_base_class_offset(lv, (S7745C7*)(S7745C6*), ABISELECT(64,32), "S7745C2");
    check_base_class_offset(lv, (S7745C6*)(S7745C3*), ABISELECT(56,28), "S7745C2");
    /*is_ambiguous_... S7745C2::S7745C7 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(88,44), "S7745C2");
    check_base_class_offset(lv, (S7745C7*)(S7745C8*), ABISELECT(88,44), "S7745C2");
    check_base_class_offset(lv, (S7745C8*)(S7745C3*), 0, "S7745C2");
    check_base_class_offset(lv, (S7745C3*), 0, "S7745C2");
    check_field_offset(lv, s7745c2f0, ABISELECT(8,4), "S7745C2.s7745c2f0");
    test_class_info(&lv, &cd_S7745C2);
    dp->~S7745C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C2(Test_S7745C2, "S7745C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S7745C2C1Ev();
extern void _ZN7S7745C2D1Ev();
Name_Map name_map_S7745C2[] = {
  NSPAIR(_ZN7S7745C2C1Ev),
  NSPAIR(_ZN7S7745C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S7745C6;
extern VTBL_ENTRY _ZTI7S7745C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S7745C8;
extern VTBL_ENTRY _ZTI7S7745C8[];
extern  VTBL_ENTRY _ZTV7S7745C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C8[];
extern Class_Descriptor cd_S7745C3;
extern VTBL_ENTRY _ZTI7S7745C3[];
extern  VTBL_ENTRY _ZTV7S7745C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C3[];
static Base_Class bases_S7745C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7745C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7745C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7745C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C2[];
extern void _ZN7S7745C2D1Ev();
extern void _ZN7S7745C2D0Ev();
static  VTBL_ENTRY vtc_S7745C2[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C2[0]),
  (VTBL_ENTRY)&_ZN7S7745C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S7745C2[];
extern void ABISELECT(_ZTv0_n40_N7S7745C3D1Ev,_ZTv0_n20_N7S7745C3D1Ev)();
extern void _ZN7S7745C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7745C3D0Ev,_ZTv0_n20_N7S7745C3D0Ev)();
extern void _ZN7S7745C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7745C3__7S7745C2[] = {
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C3D1Ev,_ZTv0_n20_N7S7745C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C3D0Ev,_ZTv0_n20_N7S7745C3D0Ev),
};
extern void _ZN7S7745C8D1Ev();
extern void _ZN7S7745C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C8__7S7745C2[] = {
  ABISELECT(88,44),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C8[0]),
  (VTBL_ENTRY)&_ZN7S7745C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C8D0Ev,
};
static  VTT_ENTRY vtt_S7745C2[] = {
  {&(_ZTV7S7745C2[8]),  8,10},
  {&(_ZTV7S7745C2[8]),  8,10},
  {&(_ZTV7S7745C2[8]),  8,10},
  {&(_tg__ZTV7S7745C3__7S7745C2[7]),  7,9},
  {&(_tg__ZTV7S7745C3__7S7745C2[7]),  7,9},
  {&(_tg__ZTV7S7745C8__7S7745C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7745C2[];
extern  VTBL_ENTRY _ZTV7S7745C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C2[];
static VTBL_ENTRY alt_thunk_names147[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C3D0Ev,_ZTv0_n20_N7S7745C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7745C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C3D1Ev,_ZTv0_n20_N7S7745C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7745C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7745C2 = {  "S7745C2", // class name
  bases_S7745C2, 10,
  &(vtc_S7745C2[0]), // expected_vtbl_contents
  &(vtt_S7745C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S7745C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7745C2),10, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7745C2),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names147,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C10  : virtual S7745C7 , virtual S5217C60_nt , virtual S7745C8 , virtual S2265C38 {
  int s7745c10f0[9];
  virtual  ~S7745C10(); // _ZN8S7745C10D2Ev
  S7745C10(); // tgen
};
//SIG(-1 S7745C10) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S7745C10 ::~S7745C10(){ note_dtor("S7745C10", this);}
S7745C10 ::S7745C10(){ note_ctor("S7745C10", this);} // tgen

static void Test_S7745C10()
{
  extern Class_Descriptor cd_S7745C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S7745C10, buf);
    S7745C10 *dp, &lv = *(dp=new (buf) S7745C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S7745C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C10)");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(48,40), "S7745C10");
    check_base_class_offset(lv, (S7745C7*), ABISELECT(48,40), "S7745C10");
    check_base_class_offset(lv, (S7745C7*)(S7745C8*), ABISELECT(48,40), "S7745C10");
    /*is_ambiguous_... S7745C10::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*), ABISELECT(72,52), "S7745C10");
    /*is_ambiguous_... S7745C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C8*), ABISELECT(72,52), "S7745C10");
    check_base_class_offset(lv, (S7745C8*), 0, "S7745C10");
    check_base_class_offset(lv, (S2265C38*), 0, "S7745C10");
    check_field_offset(lv, s7745c10f0, ABISELECT(8,4), "S7745C10.s7745c10f0");
    test_class_info(&lv, &cd_S7745C10);
    dp->~S7745C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C10(Test_S7745C10, "S7745C10", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S7745C10C1Ev();
extern void _ZN8S7745C10D2Ev();
Name_Map name_map_S7745C10[] = {
  NSPAIR(_ZN8S7745C10C1Ev),
  NSPAIR(_ZN8S7745C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C8;
extern VTBL_ENTRY _ZTI7S7745C8[];
extern  VTBL_ENTRY _ZTV7S7745C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S7745C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7745C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7745C10[];
extern void _ZN8S7745C10D1Ev();
extern void _ZN8S7745C10D0Ev();
static  VTBL_ENTRY vtc_S7745C10[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7745C10[0]),
  (VTBL_ENTRY)&_ZN8S7745C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7745C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S7745C10[];
extern void _ZN7S7745C8D1Ev();
extern void _ZN7S7745C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C8__8S7745C10[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C8[0]),
  (VTBL_ENTRY)&_ZN7S7745C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C8D0Ev,
};
static  VTT_ENTRY vtt_S7745C10[] = {
  {&(_ZTV8S7745C10[7]),  7,9},
  {&(_ZTV8S7745C10[7]),  7,9},
  {&(_tg__ZTV7S7745C8__8S7745C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S7745C10[];
extern  VTBL_ENTRY _ZTV8S7745C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7745C10[];
Class_Descriptor cd_S7745C10 = {  "S7745C10", // class name
  bases_S7745C10, 5,
  &(vtc_S7745C10[0]), // expected_vtbl_contents
  &(vtt_S7745C10[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S7745C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7745C10),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7745C10),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C9  : virtual S2265C38 , virtual S7745C10 {
  short s7745c9f0;
  char s7745c9f1;
  ~S7745C9(); // tgen
  S7745C9(); // tgen
};
//SIG(-1 S7745C9) C1{ VBC2{ m} VBC3{ VBC4{ BC5{ m Fp} Fp[2]} VBC5 VBC6{ VBC5 VBC4 vd} VBC2 vd Fi[9]} Fs Fc}


S7745C9 ::~S7745C9(){ note_dtor("S7745C9", this);} // tgen
S7745C9 ::S7745C9(){ note_ctor("S7745C9", this);} // tgen

static void Test_S7745C9()
{
  extern Class_Descriptor cd_S7745C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S7745C9, buf);
    S7745C9 *dp, &lv = *(dp=new (buf) S7745C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S7745C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C9)");
    check_base_class_offset(lv, (S2265C38*), 0, "S7745C9");
    check_base_class_offset(lv, (S2265C38*)(S7745C10*), 0, "S7745C9");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(64,48), "S7745C9");
    check_base_class_offset(lv, (S7745C7*)(S7745C10*), ABISELECT(64,48), "S7745C9");
    check_base_class_offset(lv, (S7745C7*)(S7745C8*), ABISELECT(64,48), "S7745C9");
    /*is_ambiguous_... S7745C10::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C10*), ABISELECT(88,60), "S7745C9");
    /*is_ambiguous_... S7745C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C8*), ABISELECT(88,60), "S7745C9");
    check_base_class_offset(lv, (S7745C8*)(S7745C10*), 0, "S7745C9");
    check_base_class_offset(lv, (S7745C10*), ABISELECT(16,8), "S7745C9");
    check_field_offset(lv, s7745c9f0, ABISELECT(8,4), "S7745C9.s7745c9f0");
    check_field_offset(lv, s7745c9f1, ABISELECT(10,6), "S7745C9.s7745c9f1");
    test_class_info(&lv, &cd_S7745C9);
    dp->~S7745C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C9(Test_S7745C9, "S7745C9", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S7745C9C1Ev();
extern void _ZN7S7745C9D1Ev();
Name_Map name_map_S7745C9[] = {
  NSPAIR(_ZN7S7745C9C1Ev),
  NSPAIR(_ZN7S7745C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C8;
extern VTBL_ENTRY _ZTI7S7745C8[];
extern  VTBL_ENTRY _ZTV7S7745C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C8[];
extern Class_Descriptor cd_S7745C10;
extern VTBL_ENTRY _ZTI8S7745C10[];
extern  VTBL_ENTRY _ZTV8S7745C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7745C10[];
static Base_Class bases_S7745C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5217C60_nt,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(64,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7745C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7745C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C9[];
extern void _ZN7S7745C9D1Ev();
extern void _ZN7S7745C9D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7745C9D1Ev,_ZThn8_N7S7745C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S7745C9D0Ev,_ZThn8_N7S7745C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7745C9[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C9[0]),
  (VTBL_ENTRY)&_ZN7S7745C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(48,40),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7745C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S7745C9[];
extern void ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev)();
extern void _ZN8S7745C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev)();
extern void _ZN8S7745C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7745C10__7S7745C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7745C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7745C8__8S7745C10__7S7745C9[] = {
  ABISELECT(16,8),
  ABISELECT(64,48),
  ABISELECT(88,60),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7745C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev),
};
extern void _ZN7S7745C8D1Ev();
extern void _ZN7S7745C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C8__7S7745C9[] = {
  ABISELECT(64,48),
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C8[0]),
  (VTBL_ENTRY)&_ZN7S7745C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C8D0Ev,
};
static  VTT_ENTRY vtt_S7745C9[] = {
  {&(_ZTV7S7745C9[8]),  8,19},
  {&(_ZTV7S7745C9[17]),  17,19},
  {&(_ZTV7S7745C9[8]),  8,19},
  {&(_tg__ZTV8S7745C10__7S7745C9[7]),  7,9},
  {&(_tg__ZTV7S7745C8__8S7745C10__7S7745C9[5]),  5,7},
  {&(_tg__ZTV7S7745C8__7S7745C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7745C9[];
extern  VTBL_ENTRY _ZTV7S7745C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C9[];
static VTBL_ENTRY alt_thunk_names148[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S7745C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S7745C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7745C9D0Ev,_ZThn8_N7S7745C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7745C9D1Ev,_ZThn8_N7S7745C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7745C9 = {  "S7745C9", // class name
  bases_S7745C9, 6,
  &(vtc_S7745C9[0]), // expected_vtbl_contents
  &(vtt_S7745C9[0]), // expected_vtt_contents
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S7745C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7745C9),19, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7745C9),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names148,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7745C1  : S7745C2 , S7745C9 {
  ::S5217C45 s7745c1f0;
  virtual  ~S7745C1(); // _ZN7S7745C1D2Ev
  S7745C1(); // tgen
};
//SIG(1 S7745C1) C1{ BC2{ VBC3{ VBC4{ m Fp} BC5{ m} VBC6{ BC4 BC7{ BC4 Fp[2]}} VBC8{ VBC4 VBC7 vd}} FC8} BC9{ VBC5 VBC10{ VBC7 VBC4 VBC8 VBC5 vd Fi[9]} Fs Fc} vd FC11{}}


 S7745C1 ::~S7745C1(){ note_dtor("S7745C1", this);}
S7745C1 ::S7745C1(){ note_ctor("S7745C1", this);} // tgen

static void Test_S7745C1()
{
  extern Class_Descriptor cd_S7745C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,27)];
    init_test(&cd_S7745C1, buf);
    S7745C1 *dp, &lv = *(dp=new (buf) S7745C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S7745C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7745C1)");
    /*is_ambiguous_... S7745C3::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C3*), ABISELECT(64,32), "S7745C1");
    /*is_ambiguous_... S7745C8::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C8*), ABISELECT(64,32), "S7745C1");
    /*is_ambiguous_... S7745C10::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C10*), ABISELECT(64,32), "S7745C1");
    check_base_class_offset(lv, (S2265C38*)(S7745C3*), 0, "S7745C1");
    /*is_ambiguous_... S7745C6::S5217C60_nt */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C6*), ABISELECT(72,36), "S7745C1");
    check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*)(S7745C6*), ABISELECT(80,40), "S7745C1");
    check_base_class_offset(lv, (S7745C7*)(S7745C6*), ABISELECT(80,40), "S7745C1");
    check_base_class_offset(lv, (S7745C6*)(S7745C3*), ABISELECT(72,36), "S7745C1");
    /*is_ambiguous_... S7745C1::S7745C7 */ AMB_check_base_class_offset(lv, (S5217C60_nt*)(S7745C7*), ABISELECT(104,52), "S7745C1");
    check_base_class_offset(lv, (S7745C7*)(S7745C8*), ABISELECT(104,52), "S7745C1");
    check_base_class_offset(lv, (S7745C7*)(S7745C10*), ABISELECT(104,52), "S7745C1");
    check_base_class_offset(lv, (S7745C8*)(S7745C3*), 0, "S7745C1");
    check_base_class_offset(lv, (S7745C8*)(S7745C10*), 0, "S7745C1");
    check_base_class_offset(lv, (S7745C3*)(S7745C2*), 0, "S7745C1");
    check_base_class_offset(lv, (S7745C2*), 0, "S7745C1");
    check_base_class_offset(lv, (S2265C38*)(S7745C9*), ABISELECT(128,64), "S7745C1");
    check_base_class_offset(lv, (S2265C38*)(S7745C10*), ABISELECT(128,64), "S7745C1");
    check_base_class_offset(lv, (S7745C10*)(S7745C9*), ABISELECT(128,64), "S7745C1");
    check_base_class_offset(lv, (S7745C9*), ABISELECT(48,24), "S7745C1");
    check_field_offset(lv, s7745c1f0, ABISELECT(59,31), "S7745C1.s7745c1f0");
    test_class_info(&lv, &cd_S7745C1);
    dp->~S7745C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7745C1(Test_S7745C1, "S7745C1", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN7S7745C1C1Ev();
extern void _ZN7S7745C1D2Ev();
Name_Map name_map_S7745C1[] = {
  NSPAIR(_ZN7S7745C1C1Ev),
  NSPAIR(_ZN7S7745C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S7745C6;
extern VTBL_ENTRY _ZTI7S7745C6[];
extern Class_Descriptor cd_S5217C60_nt;
extern VTBL_ENTRY _ZTI11S5217C60_nt[];
extern Class_Descriptor cd_S7745C7;
extern VTBL_ENTRY _ZTI7S7745C7[];
extern Class_Descriptor cd_S7745C8;
extern VTBL_ENTRY _ZTI7S7745C8[];
extern  VTBL_ENTRY _ZTV7S7745C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C8[];
extern Class_Descriptor cd_S7745C3;
extern VTBL_ENTRY _ZTI7S7745C3[];
extern  VTBL_ENTRY _ZTV7S7745C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C3[];
extern Class_Descriptor cd_S7745C2;
extern VTBL_ENTRY _ZTI7S7745C2[];
extern  VTBL_ENTRY _ZTV7S7745C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S7745C10;
extern VTBL_ENTRY _ZTI8S7745C10[];
extern  VTBL_ENTRY _ZTV8S7745C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7745C10[];
extern Class_Descriptor cd_S7745C9;
extern VTBL_ENTRY _ZTI7S7745C9[];
extern  VTBL_ENTRY _ZTV7S7745C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C9[];
static Base_Class bases_S7745C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C60_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S5217C60_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7745C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S5217C60_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7745C7,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7745C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7745C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7745C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7745C10,    ABISELECT(128,64), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S7745C9,    ABISELECT(48,24), //bcp->offset
    12, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7745C1[];
extern void _ZN7S7745C1D1Ev();
extern void _ZN7S7745C1D0Ev();
extern void ABISELECT(_ZThn48_N7S7745C1D1Ev,_ZThn24_N7S7745C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7745C1D0Ev,_ZThn24_N7S7745C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7745C1D1Ev,_ZTv0_n20_N7S7745C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7745C1D1Ev,_ZThn64_N7S7745C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7745C1D0Ev,_ZTv0_n20_N7S7745C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7745C1D0Ev,_ZThn64_N7S7745C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7745C1[] = {
  ABISELECT(128,64),
  ABISELECT(128,64),
  0,
  0,
  ABISELECT(72,36),
  0,
  ABISELECT(104,52),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C1[0]),
  (VTBL_ENTRY)&_ZN7S7745C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C1D0Ev,
  ABISELECT(-48,-24),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(-48,-24),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7745C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7745C1D1Ev,_ZThn24_N7S7745C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7745C1D0Ev,_ZThn24_N7S7745C1D0Ev),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  ABISELECT(-64,-32),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7745C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C1D1Ev,_ZTv0_n20_N7S7745C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C1D0Ev,_ZTv0_n20_N7S7745C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7745C1[];
extern void _ZN7S7745C2D1Ev();
extern void _ZN7S7745C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C2__7S7745C1[] = {
  0,
  0,
  ABISELECT(72,36),
  0,
  ABISELECT(104,52),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C2[0]),
  (VTBL_ENTRY)&_ZN7S7745C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C2D0Ev,
};
extern void _ZN7S7745C9D1Ev();
extern void _ZN7S7745C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C9__7S7745C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(80,40),
  ABISELECT(80,40),
  0,
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C9[0]),
  (VTBL_ENTRY)&_ZN7S7745C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C9D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev)();
extern void ABISELECT(_ZThn80_N7S7745C9D1Ev,_ZThn40_N7S7745C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev)();
extern void ABISELECT(_ZThn80_N7S7745C9D0Ev,_ZThn40_N7S7745C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7745C10__7S7745C9__7S7745C1[] = {
  0,
  ABISELECT(-128,-64),
  ABISELECT(-80,-40),
  ABISELECT(-24,-12),
  ABISELECT(-64,-32),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7745C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7745C8__7S7745C9__7S7745C1[] = {
  ABISELECT(48,24),
  ABISELECT(104,52),
  ABISELECT(64,32),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI7S7745C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7745C3D1Ev,_ZTv0_n20_N7S7745C3D1Ev)();
extern void _ZN7S7745C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7745C3D0Ev,_ZTv0_n20_N7S7745C3D0Ev)();
extern void _ZN7S7745C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7745C3__7S7745C1[] = {
  0,
  ABISELECT(72,36),
  0,
  ABISELECT(104,52),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C3D1Ev,_ZTv0_n20_N7S7745C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7745C3D0Ev,_ZTv0_n20_N7S7745C3D0Ev),
};
extern void _ZN7S7745C8D1Ev();
extern void _ZN7S7745C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7745C8__7S7745C1[] = {
  ABISELECT(104,52),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7745C8[0]),
  (VTBL_ENTRY)&_ZN7S7745C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7745C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev)();
extern void _ZN8S7745C10D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev)();
extern void _ZN8S7745C10D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7745C10__7S7745C1[] = {
  0,
  ABISELECT(-128,-64),
  0,
  ABISELECT(-24,-12),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7745C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7745C8__8S7745C10__7S7745C1[] = {
  ABISELECT(128,64),
  ABISELECT(104,52),
  ABISELECT(64,32),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI8S7745C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev),
};
static  VTT_ENTRY vtt_S7745C1[] = {
  {&(_ZTV7S7745C1[10]),  10,31},
  {&(_tg__ZTV7S7745C2__7S7745C1[8]),  8,10},
  {&(_tg__ZTV7S7745C2__7S7745C1[8]),  8,10},
  {&(_tg__ZTV7S7745C2__7S7745C1[8]),  8,10},
  {&(_tg__ZTV7S7745C9__7S7745C1[8]),  8,10},
  {&(_tg__ZTV8S7745C10__7S7745C9__7S7745C1[7]),  7,9},
  {&(_tg__ZTV7S7745C8__7S7745C9__7S7745C1[5]),  5,7},
  {&(_ZTV7S7745C1[10]),  10,31},
  {&(_ZTV7S7745C1[10]),  10,31},
  {&(_ZTV7S7745C1[20]),  20,31},
  {&(_ZTV7S7745C1[29]),  29,31},
  {&(_tg__ZTV7S7745C3__7S7745C1[7]),  7,9},
  {&(_tg__ZTV7S7745C3__7S7745C1[7]),  7,9},
  {&(_tg__ZTV7S7745C8__7S7745C1[4]),  4,6},
  {&(_tg__ZTV8S7745C10__7S7745C1[7]),  7,9},
  {&(_tg__ZTV7S7745C8__8S7745C10__7S7745C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI7S7745C1[];
extern  VTBL_ENTRY _ZTV7S7745C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7745C1[];
static VTBL_ENTRY alt_thunk_names149[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7745C10D0Ev,_ZTv0_n20_N8S7745C10D0Ev), // 
  (VTBL_ENTRY)_ZN8S7745C10D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7745C10D1Ev,_ZTv0_n20_N8S7745C10D1Ev), // 
  (VTBL_ENTRY)_ZN8S7745C10D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C3D0Ev,_ZTv0_n20_N7S7745C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7745C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C3D1Ev,_ZTv0_n20_N7S7745C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7745C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C9D0Ev,_ZTv0_n20_N7S7745C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7745C9D0Ev,_ZThn40_N7S7745C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C9D1Ev,_ZTv0_n20_N7S7745C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7745C9D1Ev,_ZThn40_N7S7745C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C1D0Ev,_ZTv0_n20_N7S7745C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7745C1D0Ev,_ZThn64_N7S7745C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7745C1D1Ev,_ZTv0_n20_N7S7745C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7745C1D1Ev,_ZThn64_N7S7745C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7745C1 = {  "S7745C1", // class name
  bases_S7745C1, 14,
  &(vtc_S7745C1[0]), // expected_vtbl_contents
  &(vtt_S7745C1[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI7S7745C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7745C1),31, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7745C1),16, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names149,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14658C1  {
  void *s14658c1f0[4];
  char s14658c1f1;
  int s14658c1f2;
  void *s14658c1f3;
  int s14658c1f4[4];
  __tsi64 s14658c1f5;
  int s14658c1f6[7];
  void *s14658c1f7[5];
  int s14658c1f8[4];
  void *s14658c1f9[8];
  char s14658c1f10[48];
  int s14658c1f11;
  void *s14658c1f12;
  char s14658c1f13[5];
  int s14658c1f14[4];
  char s14658c1f15[4];
  short s14658c1f16[2];
  char s14658c1f17;
  int s14658c1f18;
  char s14658c1f19;
  int s14658c1f20[6];
  void *s14658c1f21[4];
  int s14658c1f22[18];
  void *s14658c1f23;
  int s14658c1f24;
  void *s14658c1f25[10];
  int s14658c1f26;
};
//SIG(1 S14658C1) C1{ Fp[4] Fc Fi Fp Fi[4] FL Fi[7] Fp[5] Fi[4] Fp[8] Fc[48] Fi Fp Fc[5] Fi[4] Fc[4] Fs[2] Fc Fi Fc Fi[6] Fp[4] Fi[18] Fp Fi Fp[10] Fi}



static void Test_S14658C1()
{
  {
    init_simple_test("S14658C1");
    S14658C1 lv;
    check2(sizeof(lv), ABISELECT(568,412), "sizeof(S14658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14658C1)");
    check_field_offset(lv, s14658c1f0, 0, "S14658C1.s14658c1f0");
    check_field_offset(lv, s14658c1f1, ABISELECT(32,16), "S14658C1.s14658c1f1");
    check_field_offset(lv, s14658c1f2, ABISELECT(36,20), "S14658C1.s14658c1f2");
    check_field_offset(lv, s14658c1f3, ABISELECT(40,24), "S14658C1.s14658c1f3");
    check_field_offset(lv, s14658c1f4, ABISELECT(48,28), "S14658C1.s14658c1f4");
    check_field_offset(lv, s14658c1f5, ABISELECT(64,44), "S14658C1.s14658c1f5");
    check_field_offset(lv, s14658c1f6, ABISELECT(72,52), "S14658C1.s14658c1f6");
    check_field_offset(lv, s14658c1f7, ABISELECT(104,80), "S14658C1.s14658c1f7");
    check_field_offset(lv, s14658c1f8, ABISELECT(144,100), "S14658C1.s14658c1f8");
    check_field_offset(lv, s14658c1f9, ABISELECT(160,116), "S14658C1.s14658c1f9");
    check_field_offset(lv, s14658c1f10, ABISELECT(224,148), "S14658C1.s14658c1f10");
    check_field_offset(lv, s14658c1f11, ABISELECT(272,196), "S14658C1.s14658c1f11");
    check_field_offset(lv, s14658c1f12, ABISELECT(280,200), "S14658C1.s14658c1f12");
    check_field_offset(lv, s14658c1f13, ABISELECT(288,204), "S14658C1.s14658c1f13");
    check_field_offset(lv, s14658c1f14, ABISELECT(296,212), "S14658C1.s14658c1f14");
    check_field_offset(lv, s14658c1f15, ABISELECT(312,228), "S14658C1.s14658c1f15");
    check_field_offset(lv, s14658c1f16, ABISELECT(316,232), "S14658C1.s14658c1f16");
    check_field_offset(lv, s14658c1f17, ABISELECT(320,236), "S14658C1.s14658c1f17");
    check_field_offset(lv, s14658c1f18, ABISELECT(324,240), "S14658C1.s14658c1f18");
    check_field_offset(lv, s14658c1f19, ABISELECT(328,244), "S14658C1.s14658c1f19");
    check_field_offset(lv, s14658c1f20, ABISELECT(332,248), "S14658C1.s14658c1f20");
    check_field_offset(lv, s14658c1f21, ABISELECT(360,272), "S14658C1.s14658c1f21");
    check_field_offset(lv, s14658c1f22, ABISELECT(392,288), "S14658C1.s14658c1f22");
    check_field_offset(lv, s14658c1f23, ABISELECT(464,360), "S14658C1.s14658c1f23");
    check_field_offset(lv, s14658c1f24, ABISELECT(472,364), "S14658C1.s14658c1f24");
    check_field_offset(lv, s14658c1f25, ABISELECT(480,368), "S14658C1.s14658c1f25");
    check_field_offset(lv, s14658c1f26, ABISELECT(560,408), "S14658C1.s14658c1f26");
  }
}
static Arrange_To_Call_Me vS14658C1(Test_S14658C1, "S14658C1", ABISELECT(568,412));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C2  : virtual S19859C6 {
  ~S21172C2(); // tgen
  S21172C2(); // tgen
};
//SIG(-1 S21172C2) C1{ VBC2{ vd m Fs}}


S21172C2 ::~S21172C2(){ note_dtor("S21172C2", this);} // tgen
S21172C2 ::S21172C2(){ note_ctor("S21172C2", this);} // tgen

static void Test_S21172C2()
{
  extern Class_Descriptor cd_S21172C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21172C2, buf);
    S21172C2 *dp, &lv = *(dp=new (buf) S21172C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21172C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C2)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21172C2");
    test_class_info(&lv, &cd_S21172C2);
    dp->~S21172C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C2(Test_S21172C2, "S21172C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21172C2C1Ev();
extern void _ZN8S21172C2D1Ev();
Name_Map name_map_S21172C2[] = {
  NSPAIR(_ZN8S21172C2C1Ev),
  NSPAIR(_ZN8S21172C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S21172C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C2[];
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C2D1Ev,_ZThn4_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C2D0Ev,_ZThn4_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C2[];
static  VTT_ENTRY vtt_S21172C2[] = {
  {&(_ZTV8S21172C2[3]),  3,10},
  {&(_ZTV8S21172C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
static VTBL_ENTRY alt_thunk_names150[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C2D0Ev,_ZThn4_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C2D1Ev,_ZThn4_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C2 = {  "S21172C2", // class name
  bases_S21172C2, 1,
  &(vtc_S21172C2[0]), // expected_vtbl_contents
  &(vtt_S21172C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21172C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21172C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names150,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C5  : virtual S19859C6 {
  virtual  ~S21172C5(); // _ZN8S21172C5D2Ev
  S21172C5(); // tgen
};
//SIG(-1 S21172C5) C1{ VBC2{ vd m Fs} vd}


 S21172C5 ::~S21172C5(){ note_dtor("S21172C5", this);}
S21172C5 ::S21172C5(){ note_ctor("S21172C5", this);} // tgen

static void Test_S21172C5()
{
  extern Class_Descriptor cd_S21172C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21172C5, buf);
    S21172C5 *dp, &lv = *(dp=new (buf) S21172C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21172C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C5)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21172C5");
    test_class_info(&lv, &cd_S21172C5);
    dp->~S21172C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C5(Test_S21172C5, "S21172C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21172C5C1Ev();
extern void _ZN8S21172C5D2Ev();
Name_Map name_map_S21172C5[] = {
  NSPAIR(_ZN8S21172C5C1Ev),
  NSPAIR(_ZN8S21172C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S21172C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C5[];
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C5D1Ev,_ZThn4_N8S21172C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C5D0Ev,_ZThn4_N8S21172C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C5[];
static  VTT_ENTRY vtt_S21172C5[] = {
  {&(_ZTV8S21172C5[3]),  3,10},
  {&(_ZTV8S21172C5[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
static VTBL_ENTRY alt_thunk_names151[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C5D0Ev,_ZThn4_N8S21172C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C5D1Ev,_ZThn4_N8S21172C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C5 = {  "S21172C5", // class name
  bases_S21172C5, 1,
  &(vtc_S21172C5[0]), // expected_vtbl_contents
  &(vtt_S21172C5[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21172C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21172C5),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names151,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C6  : virtual S19859C6 , virtual S21172C5 , S21172C2 {
  int s21172c6f0;
  virtual  ~S21172C6(); // _ZN8S21172C6D2Ev
  S21172C6(); // tgen
};
//SIG(-1 S21172C6) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S21172C6 ::~S21172C6(){ note_dtor("S21172C6", this);}
S21172C6 ::S21172C6(){ note_ctor("S21172C6", this);} // tgen

static void Test_S21172C6()
{
  extern Class_Descriptor cd_S21172C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21172C6, buf);
    S21172C6 *dp, &lv = *(dp=new (buf) S21172C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21172C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C6)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S21172C6");
    check_base_class_offset(lv, (S19859C6*)(S21172C5*), ABISELECT(16,8), "S21172C6");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*), ABISELECT(16,8), "S21172C6");
    check_base_class_offset(lv, (S21172C5*), ABISELECT(32,16), "S21172C6");
    check_base_class_offset(lv, (S21172C2*), 0, "S21172C6");
    check_field_offset(lv, s21172c6f0, ABISELECT(8,4), "S21172C6.s21172c6f0");
    test_class_info(&lv, &cd_S21172C6);
    dp->~S21172C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C6(Test_S21172C6, "S21172C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21172C6C1Ev();
extern void _ZN8S21172C6D2Ev();
Name_Map name_map_S21172C6[] = {
  NSPAIR(_ZN8S21172C6C1Ev),
  NSPAIR(_ZN8S21172C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
static Base_Class bases_S21172C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21172C5,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21172C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C6[];
extern void _ZN8S21172C6D1Ev();
extern void _ZN8S21172C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn8_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn8_N8S21172C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C6[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&_ZN8S21172C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C6[];
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C2__8S21172C6[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C2D1Ev,_ZThn8_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C2D0Ev,_ZThn8_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C2__8S21172C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C5__8S21172C6[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
static  VTT_ENTRY vtt_S21172C6[] = {
  {&(_ZTV8S21172C6[4]),  4,17},
  {&(_tg__ZTV8S21172C2__8S21172C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C2__8S21172C6[3]),  3,5},
  {&(_ZTV8S21172C6[9]),  9,17},
  {&(_ZTV8S21172C6[15]),  15,17},
  {&(_tg__ZTV8S21172C5__8S21172C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C5__8S21172C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21172C6[];
extern  VTBL_ENTRY _ZTV8S21172C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C6[];
static VTBL_ENTRY alt_thunk_names152[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C2D0Ev,_ZThn8_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C2D1Ev,_ZThn8_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn8_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn8_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C6 = {  "S21172C6", // class name
  bases_S21172C6, 3,
  &(vtc_S21172C6[0]), // expected_vtbl_contents
  &(vtt_S21172C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21172C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21172C6),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C6),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names152,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C4  : S19859C6 , virtual S21172C5 , S21172C6 , virtual S21172C2 {
  int s21172c4f0;
  virtual  ~S21172C4(); // _ZN8S21172C4D2Ev
  S21172C4(); // tgen
};
//SIG(-1 S21172C4) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2 VBC3 BC5{ VBC2} vd Fi} VBC5 vd Fi}


 S21172C4 ::~S21172C4(){ note_dtor("S21172C4", this);}
S21172C4 ::S21172C4(){ note_ctor("S21172C4", this);} // tgen

static void Test_S21172C4()
{
  extern Class_Descriptor cd_S21172C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S21172C4, buf);
    S21172C4 *dp, &lv = *(dp=new (buf) S21172C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S21172C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C4)");
    /*is_ambiguous_... S21172C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S21172C4");
    check_base_class_offset(lv, (S19859C6*)(S21172C5*), ABISELECT(40,24), "S21172C4");
    check_base_class_offset(lv, (S19859C6*)(S21172C6*), ABISELECT(40,24), "S21172C4");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C6*), ABISELECT(40,24), "S21172C4");
    /*is_ambiguous_... S21172C4::S21172C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C2*), ABISELECT(40,24), "S21172C4");
    check_base_class_offset(lv, (S21172C5*), ABISELECT(32,20), "S21172C4");
    check_base_class_offset(lv, (S21172C5*)(S21172C6*), ABISELECT(32,20), "S21172C4");
    check_base_class_offset(lv, (S21172C2*)(S21172C6*), ABISELECT(16,8), "S21172C4");
    check_base_class_offset(lv, (S21172C6*), ABISELECT(16,8), "S21172C4");
    /*is_ambiguous_... S21172C4::S21172C2 */ AMB_check_base_class_offset(lv, (S21172C2*), ABISELECT(56,32), "S21172C4");
    check_field_offset(lv, s21172c4f0, ABISELECT(28,16), "S21172C4.s21172c4f0");
    test_class_info(&lv, &cd_S21172C4);
    dp->~S21172C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C4(Test_S21172C4, "S21172C4", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S21172C4C1Ev();
extern void _ZN8S21172C4D2Ev();
Name_Map name_map_S21172C4[] = {
  NSPAIR(_ZN8S21172C4C1Ev),
  NSPAIR(_ZN8S21172C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C6;
extern VTBL_ENTRY _ZTI8S21172C6[];
extern  VTBL_ENTRY _ZTV8S21172C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C6[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
static Base_Class bases_S21172C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21172C5,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21172C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21172C6,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21172C2,    ABISELECT(56,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C4[];
extern void _ZN8S21172C4D1Ev();
extern void _ZN8S21172C4D0Ev();
extern void ABISELECT(_ZThn16_N8S21172C4D1Ev,_ZThn8_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C4D0Ev,_ZThn8_N8S21172C4D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C4D1Ev,_ZThn20_N8S21172C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C4D0Ev,_ZThn20_N8S21172C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C4D1Ev,_ZTv0_n12_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S21172C4D1Ev,_ZThn24_N8S21172C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C4D0Ev,_ZTv0_n12_N8S21172C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S21172C4D0Ev,_ZThn24_N8S21172C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S21172C4D1Ev,_ZThn32_N8S21172C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S21172C4D0Ev,_ZThn32_N8S21172C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C4[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&_ZN8S21172C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C4D0Ev,
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21172C4D1Ev,_ZThn8_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21172C4D0Ev,_ZThn8_N8S21172C4D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C4D1Ev,_ZTv0_n12_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C4D0Ev,_ZTv0_n12_N8S21172C4D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C4[];
extern void _ZN8S21172C6D1Ev();
extern void _ZN8S21172C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C6__8S21172C4[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&_ZN8S21172C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C6D0Ev,
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C6__8S21172C4[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn16_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn16_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C6__8S21172C4[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C6__8S21172C4[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn12_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn12_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C6__8S21172C4[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev),
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C5D1Ev,_ZThn4_N8S21172C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C5D0Ev,_ZThn4_N8S21172C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C5__8S21172C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C2__A1__8S21172C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C2__A1__8S21172C4[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
static  VTT_ENTRY vtt_S21172C4[] = {
  {&(_ZTV8S21172C4[5]),  5,30},
  {&(_tg__ZTV8S21172C6__8S21172C4[4]),  4,6},
  {&(_tg__ZTV8S21172C28S21172C6__8S21172C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C6__8S21172C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C6__8S21172C4[3]),  3,5},
  {&(_tg__ZTV8S21172C5__8S21172C6__8S21172C4[4]),  4,6},
  {&(_ZTV8S21172C4[17]),  17,30},
  {&(_ZTV8S21172C4[22]),  22,30},
  {&(_ZTV8S21172C4[11]),  11,30},
  {&(_ZTV8S21172C4[28]),  28,30},
  {&(_tg__ZTV8S21172C5__8S21172C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C5__8S21172C4[3]),  3,5},
  {&(_tg__ZTV8S21172C2__A1__8S21172C4[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C2__A1__8S21172C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21172C4[];
extern  VTBL_ENTRY _ZTV8S21172C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C4[];
static VTBL_ENTRY alt_thunk_names153[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C5D0Ev,_ZThn4_N8S21172C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C5D1Ev,_ZThn4_N8S21172C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn12_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn12_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn16_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn16_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C4D0Ev,_ZTv0_n12_N8S21172C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C4D0Ev,_ZThn24_N8S21172C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C4D1Ev,_ZTv0_n12_N8S21172C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C4D1Ev,_ZThn24_N8S21172C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C4D0Ev,_ZThn32_N8S21172C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C4D0Ev,_ZThn20_N8S21172C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C4D1Ev,_ZThn32_N8S21172C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C4D1Ev,_ZThn20_N8S21172C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C4 = {  "S21172C4", // class name
  bases_S21172C4, 6,
  &(vtc_S21172C4[0]), // expected_vtbl_contents
  &(vtt_S21172C4[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S21172C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21172C4),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C4),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names153,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C8  : S21172C5 , S19859C6 , S21172C2 , S21172C6 {
  virtual  ~S21172C8(); // _ZN8S21172C8D2Ev
  S21172C8(); // tgen
};
//SIG(-1 S21172C8) C1{ BC2{ VBC3{ vd m Fs} vd} BC3 BC4{ VBC3} BC5{ VBC3 VBC2 BC4 vd Fi} vd}


 S21172C8 ::~S21172C8(){ note_dtor("S21172C8", this);}
S21172C8 ::S21172C8(){ note_ctor("S21172C8", this);} // tgen

static void Test_S21172C8()
{
  extern Class_Descriptor cd_S21172C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S21172C8, buf);
    S21172C8 *dp, &lv = *(dp=new (buf) S21172C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S21172C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C8)");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C5*), ABISELECT(48,24), "S21172C8");
    /*is_ambiguous_... S21172C8::S21172C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C2*), ABISELECT(48,24), "S21172C8");
    check_base_class_offset(lv, (S19859C6*)(S21172C6*), ABISELECT(48,24), "S21172C8");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C5*), ABISELECT(48,24), "S21172C8");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C6*), ABISELECT(48,24), "S21172C8");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S21172C5*), 0, "S21172C8");
    /*is_ambiguous_... S21172C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S21172C8");
    /*is_ambiguous_... S21172C8::S21172C2 */ AMB_check_base_class_offset(lv, (S21172C2*), ABISELECT(24,12), "S21172C8");
    check_base_class_offset(lv, (S21172C5*)(S21172C6*), ABISELECT(64,32), "S21172C8");
    check_base_class_offset(lv, (S21172C2*)(S21172C6*), ABISELECT(32,16), "S21172C8");
    check_base_class_offset(lv, (S21172C6*), ABISELECT(32,16), "S21172C8");
    test_class_info(&lv, &cd_S21172C8);
    dp->~S21172C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C8(Test_S21172C8, "S21172C8", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S21172C8C1Ev();
extern void _ZN8S21172C8D2Ev();
Name_Map name_map_S21172C8[] = {
  NSPAIR(_ZN8S21172C8C1Ev),
  NSPAIR(_ZN8S21172C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C6;
extern VTBL_ENTRY _ZTI8S21172C6[];
extern  VTBL_ENTRY _ZTV8S21172C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C6[];
static Base_Class bases_S21172C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21172C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21172C2,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21172C5,    ABISELECT(64,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21172C2,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21172C6,    ABISELECT(32,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C8[];
extern void _ZN8S21172C8D1Ev();
extern void _ZN8S21172C8D0Ev();
extern void ABISELECT(_ZThn8_N8S21172C8D1Ev,_ZThn4_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C8D0Ev,_ZThn4_N8S21172C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C8D1Ev,_ZThn12_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C8D0Ev,_ZThn12_N8S21172C8D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C8D1Ev,_ZThn16_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C8D0Ev,_ZThn16_N8S21172C8D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S21172C8D1Ev,_ZThn24_N8S21172C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S21172C8D0Ev,_ZThn24_N8S21172C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21172C8D1Ev,_ZThn32_N8S21172C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21172C8D0Ev,_ZThn32_N8S21172C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C8[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&_ZN8S21172C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C8D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S21172C8D1Ev,_ZThn4_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S21172C8D0Ev,_ZThn4_N8S21172C8D0Ev),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S21172C8D1Ev,_ZThn12_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S21172C8D0Ev,_ZThn12_N8S21172C8D0Ev),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S21172C8D1Ev,_ZThn16_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S21172C8D0Ev,_ZThn16_N8S21172C8D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C8[];
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C5__A__8S21172C8[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S21172C5D1Ev,_ZThn24_N8S21172C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S21172C5D0Ev,_ZThn24_N8S21172C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C5__A__8S21172C8[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C2__8S21172C8[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn12_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn12_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C2__8S21172C8[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void _ZN8S21172C6D1Ev();
extern void _ZN8S21172C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C6__8S21172C8[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&_ZN8S21172C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C6D0Ev,
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C6__A1__8S21172C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C2D1Ev,_ZThn8_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C2D0Ev,_ZThn8_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C6__A1__8S21172C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn8_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn8_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C6__8S21172C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C6__8S21172C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev),
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C5__A1__8S21172C8[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C5__A1__8S21172C8[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
static  VTT_ENTRY vtt_S21172C8[] = {
  {&(_ZTV8S21172C8[4]),  4,32},
  {&(_tg__ZTV8S21172C5__A__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C5__A__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S21172C2__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C2__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S21172C6__8S21172C8[4]),  4,6},
  {&(_tg__ZTV8S21172C28S21172C6__A1__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C6__A1__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C6__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S21172C5__8S21172C6__8S21172C8[4]),  4,6},
  {&(_ZTV8S21172C8[24]),  24,32},
  {&(_ZTV8S21172C8[13]),  13,32},
  {&(_ZTV8S21172C8[19]),  19,32},
  {&(_ZTV8S21172C8[30]),  30,32},
  {&(_tg__ZTV8S21172C5__A1__8S21172C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C5__A1__8S21172C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21172C8[];
extern  VTBL_ENTRY _ZTV8S21172C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C8[];
static VTBL_ENTRY alt_thunk_names154[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn8_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn8_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C2D0Ev,_ZThn8_N8S21172C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn12_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C2D1Ev,_ZThn8_N8S21172C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn12_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C5D0Ev,_ZThn24_N8S21172C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C5D1Ev,_ZThn24_N8S21172C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21172C8D0Ev,_ZThn32_N8S21172C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21172C8D1Ev,_ZThn32_N8S21172C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C8D0Ev,_ZThn24_N8S21172C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C8D1Ev,_ZThn24_N8S21172C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C8 = {  "S21172C8", // class name
  bases_S21172C8, 7,
  &(vtc_S21172C8[0]), // expected_vtbl_contents
  &(vtt_S21172C8[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S21172C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21172C8),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C8),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names154,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C9  : virtual S21172C2 {
  virtual  ~S21172C9(); // _ZN8S21172C9D2Ev
  S21172C9(); // tgen
};
//SIG(-1 S21172C9) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S21172C9 ::~S21172C9(){ note_dtor("S21172C9", this);}
S21172C9 ::S21172C9(){ note_ctor("S21172C9", this);} // tgen

static void Test_S21172C9()
{
  extern Class_Descriptor cd_S21172C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21172C9, buf);
    S21172C9 *dp, &lv = *(dp=new (buf) S21172C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21172C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C9)");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*), ABISELECT(8,4), "S21172C9");
    check_base_class_offset(lv, (S21172C2*), 0, "S21172C9");
    test_class_info(&lv, &cd_S21172C9);
    dp->~S21172C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C9(Test_S21172C9, "S21172C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21172C9C1Ev();
extern void _ZN8S21172C9D2Ev();
Name_Map name_map_S21172C9[] = {
  NSPAIR(_ZN8S21172C9C1Ev),
  NSPAIR(_ZN8S21172C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
static Base_Class bases_S21172C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21172C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C9[];
extern void _ZN8S21172C9D1Ev();
extern void _ZN8S21172C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C9D1Ev,_ZThn4_N8S21172C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C9D0Ev,_ZThn4_N8S21172C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C9[0]),
  (VTBL_ENTRY)&_ZN8S21172C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C9D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C9[];
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C2__8S21172C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C2D1Ev,_ZThn4_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C2D0Ev,_ZThn4_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C2__8S21172C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
static  VTT_ENTRY vtt_S21172C9[] = {
  {&(_ZTV8S21172C9[5]),  5,12},
  {&(_ZTV8S21172C9[5]),  5,12},
  {&(_ZTV8S21172C9[10]),  10,12},
  {&(_tg__ZTV8S21172C2__8S21172C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C2__8S21172C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21172C9[];
extern  VTBL_ENTRY _ZTV8S21172C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C9[];
static VTBL_ENTRY alt_thunk_names155[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C2D0Ev,_ZThn4_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C2D1Ev,_ZThn4_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C9D0Ev,_ZThn4_N8S21172C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C9D1Ev,_ZThn4_N8S21172C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C9 = {  "S21172C9", // class name
  bases_S21172C9, 2,
  &(vtc_S21172C9[0]), // expected_vtbl_contents
  &(vtt_S21172C9[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21172C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21172C9),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C9),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names155,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C7  : virtual S21172C8 , S21172C9 , virtual S2265C38 {
  virtual  ~S21172C7(); // _ZN8S21172C7D2Ev
  S21172C7(); // tgen
};
//SIG(-1 S21172C7) C1{ VBC2{ BC3{ VBC4{ vd m Fs} vd} BC4 BC5{ VBC4} BC6{ VBC4 VBC3 BC5 vd Fi} vd} BC7{ VBC5 vd} VBC8{ m} vd}


 S21172C7 ::~S21172C7(){ note_dtor("S21172C7", this);}
S21172C7 ::S21172C7(){ note_ctor("S21172C7", this);} // tgen

static void Test_S21172C7()
{
  extern Class_Descriptor cd_S21172C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S21172C7, buf);
    S21172C7 *dp, &lv = *(dp=new (buf) S21172C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S21172C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C7)");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C5*)(S21172C8*), ABISELECT(56,28), "S21172C7");
    /*is_ambiguous_... S21172C8::S21172C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C8*), ABISELECT(56,28), "S21172C7");
    check_base_class_offset(lv, (S19859C6*)(S21172C6*)(S21172C8*), ABISELECT(56,28), "S21172C7");
    /*is_ambiguous_... S21172C7::S21172C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C5*), ABISELECT(56,28), "S21172C7");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C6*)(S21172C8*), ABISELECT(56,28), "S21172C7");
    /*is_ambiguous_... S21172C7::S21172C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C2*), ABISELECT(56,28), "S21172C7");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S21172C5*)(S21172C8*), ABISELECT(8,4), "S21172C7");
    /*is_ambiguous_... S21172C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C8*), ABISELECT(16,8), "S21172C7");
    /*is_ambiguous_... S21172C8::S21172C2 */ AMB_check_base_class_offset(lv, (S21172C2*)(S21172C8*), ABISELECT(32,16), "S21172C7");
    check_base_class_offset(lv, (S21172C5*)(S21172C6*)(S21172C8*), ABISELECT(72,36), "S21172C7");
    check_base_class_offset(lv, (S21172C2*)(S21172C6*)(S21172C8*), ABISELECT(40,20), "S21172C7");
    check_base_class_offset(lv, (S21172C6*)(S21172C8*), ABISELECT(40,20), "S21172C7");
    check_base_class_offset(lv, (S21172C8*), ABISELECT(8,4), "S21172C7");
    check_base_class_offset(lv, (S21172C2*)(S21172C9*), 0, "S21172C7");
    check_base_class_offset(lv, (S21172C9*), 0, "S21172C7");
    check_base_class_offset(lv, (S2265C38*), 0, "S21172C7");
    test_class_info(&lv, &cd_S21172C7);
    dp->~S21172C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C7(Test_S21172C7, "S21172C7", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S21172C7C1Ev();
extern void _ZN8S21172C7D2Ev();
Name_Map name_map_S21172C7[] = {
  NSPAIR(_ZN8S21172C7C1Ev),
  NSPAIR(_ZN8S21172C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C6;
extern VTBL_ENTRY _ZTI8S21172C6[];
extern  VTBL_ENTRY _ZTV8S21172C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C6[];
extern Class_Descriptor cd_S21172C8;
extern VTBL_ENTRY _ZTI8S21172C8[];
extern  VTBL_ENTRY _ZTV8S21172C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C8[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C9;
extern VTBL_ENTRY _ZTI8S21172C9[];
extern  VTBL_ENTRY _ZTV8S21172C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S21172C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(56,28), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21172C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21172C2,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21172C5,    ABISELECT(72,36), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21172C2,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21172C6,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21172C8,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21172C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S21172C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C7[];
extern void ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev)();
extern void _ZN8S21172C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev)();
extern void _ZN8S21172C7D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21172C7D1Ev,_ZTv0_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C7D1Ev,_ZThn4_N8S21172C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21172C7D0Ev,_ZTv0_n20_N8S21172C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C7D0Ev,_ZThn4_N8S21172C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S21172C7D1Ev,_ZTvn4_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S21172C7D0Ev,_ZTvn4_n20_N8S21172C7D0Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S21172C7D1Ev,_ZTvn12_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S21172C7D0Ev,_ZTvn12_n20_N8S21172C7D0Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S21172C7D1Ev,_ZTvn16_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S21172C7D0Ev,_ZTvn16_n20_N8S21172C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C7D1Ev,_ZTv0_n12_N8S21172C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S21172C7D1Ev,_ZThn28_N8S21172C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C7D0Ev,_ZTv0_n12_N8S21172C7D0Ev)();
extern void ABISELECT(_ZThn56_N8S21172C7D0Ev,_ZThn28_N8S21172C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev)();
extern void ABISELECT(_ZThn72_N8S21172C7D1Ev,_ZThn36_N8S21172C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev)();
extern void ABISELECT(_ZThn72_N8S21172C7D0Ev,_ZThn36_N8S21172C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21172C7[] = {
  0,
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21172C7D1Ev,_ZTv0_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21172C7D0Ev,_ZTv0_n20_N8S21172C7D0Ev),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S21172C7D1Ev,_ZTvn4_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S21172C7D0Ev,_ZTvn4_n20_N8S21172C7D0Ev),
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S21172C7D1Ev,_ZTvn12_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S21172C7D0Ev,_ZTvn12_n20_N8S21172C7D0Ev),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S21172C7D1Ev,_ZTvn16_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S21172C7D0Ev,_ZTvn16_n20_N8S21172C7D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C7D1Ev,_ZTv0_n12_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C7D0Ev,_ZTv0_n12_N8S21172C7D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C7[];
extern void ABISELECT(_ZTv0_n32_N8S21172C9D1Ev,_ZTv0_n16_N8S21172C9D1Ev)();
extern void _ZN8S21172C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C9D0Ev,_ZTv0_n16_N8S21172C9D0Ev)();
extern void _ZN8S21172C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C9__8S21172C7[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C9D1Ev,_ZTv0_n16_N8S21172C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C9D0Ev,_ZTv0_n16_N8S21172C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S21172C9D1Ev,_ZThn28_N8S21172C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S21172C9D0Ev,_ZThn28_N8S21172C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C9__8S21172C7[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21172C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev),
};
extern void _ZN8S21172C8D1Ev();
extern void _ZN8S21172C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C8__8S21172C7[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&_ZN8S21172C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C8D0Ev,
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C58S21172C8__8S21172C7[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S21172C5D1Ev,_ZThn24_N8S21172C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S21172C5D0Ev,_ZThn24_N8S21172C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C58S21172C8__8S21172C7[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C8__8S21172C7[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn12_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn12_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C8__8S21172C7[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void _ZN8S21172C6D1Ev();
extern void _ZN8S21172C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C68S21172C8__8S21172C7[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&_ZN8S21172C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C6D0Ev,
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C68S21172C8__A1__8S21172C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C2D1Ev,_ZThn8_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C2D0Ev,_ZThn8_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C68S21172C8__A1__8S21172C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn8_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn8_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C68S21172C8__8S21172C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C68S21172C8__8S21172C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn48_N8S21172C8D1Ev,_ZThn24_N8S21172C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev)();
extern void ABISELECT(_ZThn48_N8S21172C8D0Ev,_ZThn24_N8S21172C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C8__8S21172C7[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S21172C8D1Ev,_ZThn12_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C8D0Ev,_ZThn12_N8S21172C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C2__8S21172C8__8S21172C7[] = {
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S21172C8D1Ev,_ZThn12_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S21172C8D0Ev,_ZThn12_N8S21172C8D0Ev),
};
extern void ABISELECT(_ZThn32_N8S21172C8D1Ev,_ZThn16_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C8D0Ev,_ZThn16_N8S21172C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C6__8S21172C8__8S21172C7[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S21172C8D1Ev,_ZThn16_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S21172C8D0Ev,_ZThn16_N8S21172C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21172C8D1Ev,_ZThn32_N8S21172C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21172C8D0Ev,_ZThn32_N8S21172C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__A1__8S21172C8__8S21172C7[] = {
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev),
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C5__A1__8S21172C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C5__A1__8S21172C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C2__A2__8S21172C7[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S21172C2D1Ev,_ZThn28_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S21172C2D0Ev,_ZThn28_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C2__A2__8S21172C7[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
static  VTT_ENTRY vtt_S21172C7[] = {
  {&(_ZTV8S21172C7[8]),  8,43},
  {&(_tg__ZTV8S21172C9__8S21172C7[5]),  5,7},
  {&(_tg__ZTV8S21172C9__8S21172C7[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21172C9__8S21172C7[3]),  3,5},
  {&(_ZTV8S21172C7[15]),  15,43},
  {&(_ZTV8S21172C7[35]),  35,43},
  {&(_ZTV8S21172C7[19]),  19,43},
  {&(_ZTV8S21172C7[24]),  24,43},
  {&(_ZTV8S21172C7[30]),  30,43},
  {&(_ZTV8S21172C7[41]),  41,43},
  {&(_ZTV8S21172C7[8]),  8,43},
  {&(_tg__ZTV8S21172C8__8S21172C7[4]),  4,6},
  {&(_tg__ZTV8S21172C58S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C58S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S21172C28S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S21172C68S21172C8__8S21172C7[4]),  4,6},
  {&(_tg__ZTV8S21172C28S21172C68S21172C8__A1__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C68S21172C8__A1__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C68S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S21172C5__8S21172C68S21172C8__8S21172C7[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S21172C2__8S21172C8__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S21172C6__8S21172C8__8S21172C7[4]),  4,6},
  {&(_tg__ZTV8S21172C5__A1__8S21172C8__8S21172C7[4]),  4,6},
  {&(_tg__ZTV8S21172C5__A1__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C5__A1__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S21172C2__A2__8S21172C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C2__A2__8S21172C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21172C7[];
extern  VTBL_ENTRY _ZTV8S21172C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C7[];
static VTBL_ENTRY alt_thunk_names156[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21172C8D0Ev,_ZThn32_N8S21172C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21172C8D1Ev,_ZThn32_N8S21172C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C8D0Ev,_ZThn24_N8S21172C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C8D1Ev,_ZThn24_N8S21172C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D0Ev,_ZThn8_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C6D1Ev,_ZThn8_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C2D0Ev,_ZThn28_N8S21172C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C2D0Ev,_ZThn8_N8S21172C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn12_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C2D1Ev,_ZThn28_N8S21172C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21172C2D1Ev,_ZThn8_N8S21172C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn12_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C5D0Ev,_ZThn24_N8S21172C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21172C5D1Ev,_ZThn24_N8S21172C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C9D0Ev,_ZThn28_N8S21172C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C9D1Ev,_ZThn28_N8S21172C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C9D0Ev,_ZTv0_n16_N8S21172C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21172C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C9D1Ev,_ZTv0_n16_N8S21172C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21172C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C7D0Ev,_ZTv0_n12_N8S21172C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C7D0Ev,_ZThn28_N8S21172C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C7D1Ev,_ZTv0_n12_N8S21172C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C7D1Ev,_ZThn28_N8S21172C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21172C7D0Ev,_ZTv0_n20_N8S21172C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C7D0Ev,_ZThn4_N8S21172C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21172C7D1Ev,_ZTv0_n20_N8S21172C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C7D1Ev,_ZThn4_N8S21172C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21172C7D0Ev,_ZThn36_N8S21172C7D0Ev),
  (VTBL_ENTRY)_ZN8S21172C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S21172C7D1Ev,_ZThn36_N8S21172C7D1Ev),
  (VTBL_ENTRY)_ZN8S21172C7D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C7 = {  "S21172C7", // class name
  bases_S21172C7, 11,
  &(vtc_S21172C7[0]), // expected_vtbl_contents
  &(vtt_S21172C7[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S21172C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21172C7),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C7),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names156,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21172C1  : virtual S21172C2 , S21172C4 , S21172C7 {
  virtual  ~S21172C1(); // _ZN8S21172C1D2Ev
  S21172C1(); // tgen
};
//SIG(1 S21172C1) C1{ VBC2{ VBC3{ vd m Fs}} BC4{ BC3 VBC5{ VBC3 vd} BC6{ VBC3 VBC5 BC2 vd Fi} VBC2 vd Fi} BC7{ VBC8{ BC5 BC3 BC2 BC6 vd} BC9{ VBC2 vd} VBC10{ m} vd} vd}


 S21172C1 ::~S21172C1(){ note_dtor("S21172C1", this);}
S21172C1 ::S21172C1(){ note_ctor("S21172C1", this);} // tgen

static void Test_S21172C1()
{
  extern Class_Descriptor cd_S21172C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S21172C1, buf);
    S21172C1 *dp, &lv = *(dp=new (buf) S21172C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S21172C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21172C1)");
    /*is_ambiguous_... S21172C1::S21172C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C2*), ABISELECT(40,24), "S21172C1");
    /*is_ambiguous_... S21172C1::S21172C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C5*), ABISELECT(40,24), "S21172C1");
    check_base_class_offset(lv, (S19859C6*)(S21172C6*)(S21172C4*), ABISELECT(40,24), "S21172C1");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C6*)(S21172C4*), ABISELECT(40,24), "S21172C1");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C5*)(S21172C8*), ABISELECT(40,24), "S21172C1");
    /*is_ambiguous_... S21172C8::S21172C2 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C8*), ABISELECT(40,24), "S21172C1");
    check_base_class_offset(lv, (S19859C6*)(S21172C6*)(S21172C8*), ABISELECT(40,24), "S21172C1");
    check_base_class_offset(lv, (S19859C6*)(S21172C2*)(S21172C6*)(S21172C8*), ABISELECT(40,24), "S21172C1");
    /*is_ambiguous_... S21172C1::S21172C2 */ AMB_check_base_class_offset(lv, (S21172C2*), ABISELECT(32,20), "S21172C1");
    /*is_ambiguous_... S21172C4::S21172C2 */ AMB_check_base_class_offset(lv, (S21172C2*)(S21172C4*), ABISELECT(32,20), "S21172C1");
    check_base_class_offset(lv, (S21172C2*)(S21172C9*)(S21172C7*), ABISELECT(32,20), "S21172C1");
    /*is_ambiguous_... S21172C4::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C4*), 0, "S21172C1");
    check_base_class_offset(lv, (S21172C5*)(S21172C4*), ABISELECT(56,32), "S21172C1");
    check_base_class_offset(lv, (S21172C5*)(S21172C6*)(S21172C4*), ABISELECT(56,32), "S21172C1");
    check_base_class_offset(lv, (S21172C5*)(S21172C6*)(S21172C8*), ABISELECT(56,32), "S21172C1");
    check_base_class_offset(lv, (S21172C2*)(S21172C6*)(S21172C4*), ABISELECT(16,8), "S21172C1");
    check_base_class_offset(lv, (S21172C6*)(S21172C4*), ABISELECT(16,8), "S21172C1");
    check_base_class_offset(lv, (S21172C4*), 0, "S21172C1");
    /*is_ambiguous_... S21172C8::S21172C5 */ AMB_check_base_class_offset(lv, (S21172C5*)(S21172C8*), ABISELECT(64,36), "S21172C1");
    /*is_ambiguous_... S21172C8::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S21172C8*), ABISELECT(72,40), "S21172C1");
    /*is_ambiguous_... S21172C8::S21172C2 */ AMB_check_base_class_offset(lv, (S21172C2*)(S21172C8*), ABISELECT(88,48), "S21172C1");
    check_base_class_offset(lv, (S21172C2*)(S21172C6*)(S21172C8*), ABISELECT(96,52), "S21172C1");
    check_base_class_offset(lv, (S21172C6*)(S21172C8*), ABISELECT(96,52), "S21172C1");
    check_base_class_offset(lv, (S21172C8*)(S21172C7*), ABISELECT(64,36), "S21172C1");
    check_base_class_offset(lv, (S21172C9*)(S21172C7*), ABISELECT(32,20), "S21172C1");
    check_base_class_offset(lv, (S2265C38*)(S21172C7*), 0, "S21172C1");
    check_base_class_offset(lv, (S21172C7*), ABISELECT(32,20), "S21172C1");
    test_class_info(&lv, &cd_S21172C1);
    dp->~S21172C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21172C1(Test_S21172C1, "S21172C1", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S21172C1C1Ev();
extern void _ZN8S21172C1D2Ev();
Name_Map name_map_S21172C1[] = {
  NSPAIR(_ZN8S21172C1C1Ev),
  NSPAIR(_ZN8S21172C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C6;
extern VTBL_ENTRY _ZTI8S21172C6[];
extern  VTBL_ENTRY _ZTV8S21172C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C6[];
extern Class_Descriptor cd_S21172C4;
extern VTBL_ENTRY _ZTI8S21172C4[];
extern  VTBL_ENTRY _ZTV8S21172C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C4[];
extern Class_Descriptor cd_S21172C5;
extern VTBL_ENTRY _ZTI8S21172C5[];
extern  VTBL_ENTRY _ZTV8S21172C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C5[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C2;
extern VTBL_ENTRY _ZTI8S21172C2[];
extern  VTBL_ENTRY _ZTV8S21172C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C2[];
extern Class_Descriptor cd_S21172C6;
extern VTBL_ENTRY _ZTI8S21172C6[];
extern  VTBL_ENTRY _ZTV8S21172C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C6[];
extern Class_Descriptor cd_S21172C8;
extern VTBL_ENTRY _ZTI8S21172C8[];
extern  VTBL_ENTRY _ZTV8S21172C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C8[];
extern Class_Descriptor cd_S21172C9;
extern VTBL_ENTRY _ZTI8S21172C9[];
extern  VTBL_ENTRY _ZTV8S21172C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C9[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21172C7;
extern VTBL_ENTRY _ZTI8S21172C7[];
extern  VTBL_ENTRY _ZTV8S21172C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C7[];
static Base_Class bases_S21172C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(40,24), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21172C2,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21172C5,    ABISELECT(56,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S21172C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21172C6,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21172C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21172C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(72,40), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21172C2,    ABISELECT(88,48), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21172C2,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21172C6,    ABISELECT(96,52), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21172C8,    ABISELECT(64,36), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21172C9,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21172C7,    ABISELECT(32,20), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21172C1[];
extern void _ZN8S21172C1D1Ev();
extern void _ZN8S21172C1D0Ev();
extern void ABISELECT(_ZThn16_N8S21172C1D1Ev,_ZThn8_N8S21172C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C1D0Ev,_ZThn8_N8S21172C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21172C1D1Ev,_ZTv0_n16_N8S21172C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C1D1Ev,_ZThn20_N8S21172C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C1D0Ev,_ZTv0_n16_N8S21172C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C1D0Ev,_ZThn20_N8S21172C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C1D1Ev,_ZTv0_n12_N8S21172C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S21172C1D1Ev,_ZThn24_N8S21172C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C1D0Ev,_ZTv0_n12_N8S21172C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S21172C1D0Ev,_ZThn24_N8S21172C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C1D1Ev,_ZTv0_n16_N8S21172C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S21172C1D1Ev,_ZThn32_N8S21172C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C1D0Ev,_ZTv0_n16_N8S21172C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S21172C1D0Ev,_ZThn32_N8S21172C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21172C1D1Ev,_ZTv0_n20_N8S21172C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S21172C1D1Ev,_ZThn36_N8S21172C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21172C1D0Ev,_ZTv0_n20_N8S21172C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S21172C1D0Ev,_ZThn36_N8S21172C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S21172C1D1Ev,_ZTvn4_n20_N8S21172C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S21172C1D0Ev,_ZTvn4_n20_N8S21172C1D0Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S21172C1D1Ev,_ZTvn12_n20_N8S21172C1D1Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S21172C1D0Ev,_ZTvn12_n20_N8S21172C1D0Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S21172C1D1Ev,_ZTvn16_n20_N8S21172C1D1Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S21172C1D0Ev,_ZTvn16_n20_N8S21172C1D0Ev)();
static  VTBL_ENTRY vtc_S21172C1[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&_ZN8S21172C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C1D0Ev,
  ABISELECT(40,24),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21172C1D1Ev,_ZThn8_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21172C1D0Ev,_ZThn8_N8S21172C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C1D1Ev,_ZTv0_n16_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C1D0Ev,_ZTv0_n16_N8S21172C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C1D1Ev,_ZTv0_n12_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C1D0Ev,_ZTv0_n12_N8S21172C1D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C1D1Ev,_ZTv0_n16_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C1D0Ev,_ZTv0_n16_N8S21172C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21172C1D1Ev,_ZTv0_n20_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21172C1D0Ev,_ZTv0_n20_N8S21172C1D0Ev),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S21172C1D1Ev,_ZTvn4_n20_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S21172C1D0Ev,_ZTvn4_n20_N8S21172C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S21172C1D1Ev,_ZTvn12_n20_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S21172C1D0Ev,_ZTvn12_n20_N8S21172C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S21172C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S21172C1D1Ev,_ZTvn16_n20_N8S21172C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S21172C1D0Ev,_ZTvn16_n20_N8S21172C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21172C1[];
extern void _ZN8S21172C4D1Ev();
extern void _ZN8S21172C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C4__8S21172C1[] = {
  ABISELECT(32,20),
  ABISELECT(40,24),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&_ZN8S21172C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C4D0Ev,
};
extern void _ZN8S21172C6D1Ev();
extern void _ZN8S21172C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C68S21172C4__8S21172C1[] = {
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&_ZN8S21172C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C6D0Ev,
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C68S21172C4__A1__8S21172C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn16_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn16_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C68S21172C4__A1__8S21172C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C68S21172C4__8S21172C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev)();
extern void ABISELECT(_ZThn40_N8S21172C6D1Ev,_ZThn24_N8S21172C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev)();
extern void ABISELECT(_ZThn40_N8S21172C6D0Ev,_ZThn24_N8S21172C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C68S21172C4__8S21172C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn56_N8S21172C4D1Ev,_ZThn32_N8S21172C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev)();
extern void ABISELECT(_ZThn56_N8S21172C4D0Ev,_ZThn32_N8S21172C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C4__8S21172C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C4D1Ev,_ZTv0_n12_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S21172C4D1Ev,_ZThn24_N8S21172C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C4D0Ev,_ZTv0_n12_N8S21172C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S21172C4D0Ev,_ZThn24_N8S21172C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__8S21172C4__8S21172C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C4D1Ev,_ZTv0_n12_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C4D0Ev,_ZTv0_n12_N8S21172C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21172C4D1Ev,_ZThn8_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S21172C4D0Ev,_ZThn8_N8S21172C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C6__8S21172C4__8S21172C1[] = {
  ABISELECT(40,24),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21172C4D1Ev,_ZThn8_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21172C4D0Ev,_ZThn8_N8S21172C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C4D1Ev,_ZThn20_N8S21172C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C4D0Ev,_ZThn20_N8S21172C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C2__A1__8S21172C4__8S21172C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21172C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev)();
extern void _ZN8S21172C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev)();
extern void _ZN8S21172C7D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C7__8S21172C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(24,12),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C9D1Ev,_ZTv0_n16_N8S21172C9D1Ev)();
extern void _ZN8S21172C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C9D0Ev,_ZTv0_n16_N8S21172C9D0Ev)();
extern void _ZN8S21172C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C98S21172C7__8S21172C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C9D1Ev,_ZTv0_n16_N8S21172C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C9D0Ev,_ZTv0_n16_N8S21172C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C9D1Ev,_ZThn4_N8S21172C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C9D0Ev,_ZThn4_N8S21172C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C98S21172C7__8S21172C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21172C7D1Ev,_ZTv0_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C7D1Ev,_ZThn16_N8S21172C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21172C7D0Ev,_ZTv0_n20_N8S21172C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21172C7D0Ev,_ZThn16_N8S21172C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C8__8S21172C7__8S21172C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21172C7D1Ev,_ZTv0_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21172C7D0Ev,_ZTv0_n20_N8S21172C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C7D1Ev,_ZTv0_n12_N8S21172C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C7D1Ev,_ZThn4_N8S21172C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C7D0Ev,_ZTv0_n12_N8S21172C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C7D0Ev,_ZThn4_N8S21172C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C7__8S21172C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C7D1Ev,_ZTv0_n12_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C7D0Ev,_ZTv0_n12_N8S21172C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S21172C7D1Ev,_ZTvn4_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S21172C7D0Ev,_ZTvn4_n20_N8S21172C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C68S21172C8__A1__8S21172C7__8S21172C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S21172C7D1Ev,_ZTvn4_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S21172C7D0Ev,_ZTvn4_n20_N8S21172C7D0Ev),
};
extern void ABISELECT(_ZTvn24_n40_N8S21172C7D1Ev,_ZTvn12_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S21172C7D0Ev,_ZTvn12_n20_N8S21172C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C8__8S21172C7__8S21172C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S21172C7D1Ev,_ZTvn12_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S21172C7D0Ev,_ZTvn12_n20_N8S21172C7D0Ev),
};
extern void ABISELECT(_ZTvn32_n40_N8S21172C7D1Ev,_ZTvn16_n20_N8S21172C7D1Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S21172C7D0Ev,_ZTvn16_n20_N8S21172C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C68S21172C8__8S21172C7__8S21172C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S21172C7D1Ev,_ZTvn16_n20_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S21172C7D0Ev,_ZTvn16_n20_N8S21172C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C7D1Ev,_ZThn12_N8S21172C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev)();
extern void ABISELECT(_ZThn24_N8S21172C7D0Ev,_ZThn12_N8S21172C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21172C5__A1__8S21172C7__8S21172C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev),
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C2__8S21172C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21172C2D1Ev,_ZThn4_N8S21172C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21172C2D0Ev,_ZThn4_N8S21172C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C2__8S21172C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C5__8S21172C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern void _ZN8S21172C8D1Ev();
extern void _ZN8S21172C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C8__8S21172C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&_ZN8S21172C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C8D0Ev,
};
extern void _ZN8S21172C5D1Ev();
extern void _ZN8S21172C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C58S21172C8__A1__8S21172C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&_ZN8S21172C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C58S21172C8__A1__8S21172C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21172C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D1Ev,_ZTv0_n12_N8S21172C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C5D0Ev,_ZTv0_n12_N8S21172C5D0Ev),
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C8__A2__8S21172C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C8__A2__8S21172C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void _ZN8S21172C6D1Ev();
extern void _ZN8S21172C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C68S21172C8__A1__8S21172C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&_ZN8S21172C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C6D0Ev,
};
extern void _ZN8S21172C2D1Ev();
extern void _ZN8S21172C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21172C28S21172C68S21172C8__A3__8S21172C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&_ZN8S21172C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21172C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C28S21172C68S21172C8__A3__8S21172C1[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S21172C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C68S21172C8__A1__8S21172C1[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C5__8S21172C68S21172C8__A1__8S21172C1[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S21172C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S21172C8__8S21172C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C8D1Ev,_ZTv0_n12_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21172C8D0Ev,_ZTv0_n12_N8S21172C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S21172C8D1Ev,_ZThn12_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S21172C8D0Ev,_ZThn12_N8S21172C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C2__8S21172C8__8S21172C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S21172C8D1Ev,_ZThn12_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S21172C8D0Ev,_ZThn12_N8S21172C8D0Ev),
};
extern void ABISELECT(_ZThn32_N8S21172C8D1Ev,_ZThn16_N8S21172C8D1Ev)();
extern void ABISELECT(_ZThn32_N8S21172C8D0Ev,_ZThn16_N8S21172C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C6__8S21172C8__8S21172C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S21172C8D1Ev,_ZThn16_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S21172C8D0Ev,_ZThn16_N8S21172C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21172C5__A1__8S21172C8__8S21172C1[] = {
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S21172C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C8D1Ev,_ZTv0_n16_N8S21172C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21172C8D0Ev,_ZTv0_n16_N8S21172C8D0Ev),
};
static  VTT_ENTRY vtt_S21172C1[] = {
  {&(_ZTV8S21172C1[7]),  7,58},
  {&(_tg__ZTV8S21172C4__8S21172C1[5]),  5,7},
  {&(_tg__ZTV8S21172C68S21172C4__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C28S21172C68S21172C4__A1__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C68S21172C4__A1__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C68S21172C4__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C5__8S21172C68S21172C4__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C5__8S21172C4__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__8S21172C4__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C6__8S21172C4__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C2__A1__8S21172C4__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C7__8S21172C1[8]),  8,10},
  {&(_tg__ZTV8S21172C98S21172C7__8S21172C1[5]),  5,7},
  {&(_tg__ZTV8S21172C98S21172C7__8S21172C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21172C98S21172C7__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C8__8S21172C7__8S21172C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S21172C7__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C68S21172C8__A1__8S21172C7__8S21172C1[2]),  2,4},
  {&(_tg__ZTV8S21172C28S21172C8__8S21172C7__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C68S21172C8__8S21172C7__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C5__A1__8S21172C7__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C7__8S21172C1[8]),  8,10},
  {&(_ZTV8S21172C1[23]),  23,58},
  {&(_ZTV8S21172C1[28]),  28,58},
  {&(_ZTV8S21172C1[34]),  34,58},
  {&(_ZTV8S21172C1[13]),  13,58},
  {&(_ZTV8S21172C1[23]),  23,58},
  {&(_ZTV8S21172C1[41]),  41,58},
  {&(_ZTV8S21172C1[45]),  45,58},
  {&(_ZTV8S21172C1[50]),  50,58},
  {&(_ZTV8S21172C1[56]),  56,58},
  {&(_tg__ZTV8S21172C2__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C2__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C5__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C5__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C8__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C58S21172C8__A1__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C58S21172C8__A1__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C28S21172C8__A2__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C8__A2__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C68S21172C8__A1__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C28S21172C68S21172C8__A3__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C28S21172C68S21172C8__A3__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S21172C68S21172C8__A1__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C5__8S21172C68S21172C8__A1__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S21172C8__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C2__8S21172C8__8S21172C1[3]),  3,5},
  {&(_tg__ZTV8S21172C6__8S21172C8__8S21172C1[4]),  4,6},
  {&(_tg__ZTV8S21172C5__A1__8S21172C8__8S21172C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21172C1[];
extern  VTBL_ENTRY _ZTV8S21172C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21172C1[];
static VTBL_ENTRY alt_thunk_names157[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C7D0Ev,_ZTv0_n12_N8S21172C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C7D0Ev,_ZThn4_N8S21172C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C7D1Ev,_ZTv0_n12_N8S21172C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C7D1Ev,_ZThn4_N8S21172C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21172C7D0Ev,_ZTv0_n20_N8S21172C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C7D0Ev,_ZThn16_N8S21172C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21172C7D1Ev,_ZTv0_n20_N8S21172C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C7D1Ev,_ZThn16_N8S21172C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C9D0Ev,_ZTv0_n12_N8S21172C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C9D0Ev,_ZThn4_N8S21172C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C9D1Ev,_ZTv0_n12_N8S21172C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C9D1Ev,_ZThn4_N8S21172C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C9D0Ev,_ZTv0_n16_N8S21172C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S21172C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C9D1Ev,_ZTv0_n16_N8S21172C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S21172C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C7D0Ev,_ZTv0_n16_N8S21172C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C7D0Ev,_ZThn12_N8S21172C7D0Ev),
  (VTBL_ENTRY)_ZN8S21172C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C7D1Ev,_ZTv0_n16_N8S21172C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C7D1Ev,_ZThn12_N8S21172C7D1Ev),
  (VTBL_ENTRY)_ZN8S21172C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C4D0Ev,_ZTv0_n12_N8S21172C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C4D0Ev,_ZThn24_N8S21172C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C4D1Ev,_ZTv0_n12_N8S21172C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C4D1Ev,_ZThn24_N8S21172C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C4D0Ev,_ZTv0_n16_N8S21172C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C4D0Ev,_ZThn20_N8S21172C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C4D0Ev,_ZThn32_N8S21172C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C4D1Ev,_ZTv0_n16_N8S21172C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C4D1Ev,_ZThn20_N8S21172C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C4D1Ev,_ZThn32_N8S21172C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D0Ev,_ZTv0_n16_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C6D0Ev,_ZThn24_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C6D1Ev,_ZTv0_n16_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C6D1Ev,_ZThn24_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D0Ev,_ZTv0_n12_N8S21172C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C6D0Ev,_ZThn16_N8S21172C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C6D1Ev,_ZTv0_n12_N8S21172C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C6D1Ev,_ZThn16_N8S21172C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D0Ev,_ZTv0_n12_N8S21172C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C2D0Ev,_ZThn4_N8S21172C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D0Ev,_ZThn16_N8S21172C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C2D1Ev,_ZTv0_n12_N8S21172C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21172C2D1Ev,_ZThn4_N8S21172C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21172C2D1Ev,_ZThn16_N8S21172C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21172C1D0Ev,_ZTv0_n20_N8S21172C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21172C1D0Ev,_ZThn36_N8S21172C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21172C1D1Ev,_ZTv0_n20_N8S21172C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21172C1D1Ev,_ZThn36_N8S21172C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C1D0Ev,_ZTv0_n12_N8S21172C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C1D0Ev,_ZThn24_N8S21172C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21172C1D1Ev,_ZTv0_n12_N8S21172C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21172C1D1Ev,_ZThn24_N8S21172C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C1D0Ev,_ZTv0_n16_N8S21172C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C1D0Ev,_ZThn32_N8S21172C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C1D0Ev,_ZThn20_N8S21172C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21172C1D1Ev,_ZTv0_n16_N8S21172C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21172C1D1Ev,_ZThn32_N8S21172C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21172C1D1Ev,_ZThn20_N8S21172C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21172C1 = {  "S21172C1", // class name
  bases_S21172C1, 16,
  &(vtc_S21172C1[0]), // expected_vtbl_contents
  &(vtt_S21172C1[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S21172C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21172C1),58, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21172C1),49, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names157,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6456C2_nt  {
  virtual void  v11(); // _ZN10S6456C2_nt3v11Ev
  virtual void  v12(); // _ZN10S6456C2_nt3v12Ev
  virtual void  v13(); // _ZN10S6456C2_nt3v13Ev
  virtual void  v14(); // _ZN10S6456C2_nt3v14Ev
  virtual void  v15(); // _ZN10S6456C2_nt3v15Ev
  virtual void  v16(); // _ZN10S6456C2_nt3v16Ev
  virtual void  v17(); // _ZN10S6456C2_nt3v17Ev
  virtual void  v18(); // _ZN10S6456C2_nt3v18Ev
  virtual void  v19(); // _ZN10S6456C2_nt3v19Ev
  virtual void  v20(); // _ZN10S6456C2_nt3v20Ev
  ~S6456C2_nt(); // tgen
  S6456C2_nt(); // tgen
};
//SIG(-1 S6456C2_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S6456C2_nt ::v11(){vfunc_called(this, "_ZN10S6456C2_nt3v11Ev");}
void  S6456C2_nt ::v12(){vfunc_called(this, "_ZN10S6456C2_nt3v12Ev");}
void  S6456C2_nt ::v13(){vfunc_called(this, "_ZN10S6456C2_nt3v13Ev");}
void  S6456C2_nt ::v14(){vfunc_called(this, "_ZN10S6456C2_nt3v14Ev");}
void  S6456C2_nt ::v15(){vfunc_called(this, "_ZN10S6456C2_nt3v15Ev");}
void  S6456C2_nt ::v16(){vfunc_called(this, "_ZN10S6456C2_nt3v16Ev");}
void  S6456C2_nt ::v17(){vfunc_called(this, "_ZN10S6456C2_nt3v17Ev");}
void  S6456C2_nt ::v18(){vfunc_called(this, "_ZN10S6456C2_nt3v18Ev");}
void  S6456C2_nt ::v19(){vfunc_called(this, "_ZN10S6456C2_nt3v19Ev");}
void  S6456C2_nt ::v20(){vfunc_called(this, "_ZN10S6456C2_nt3v20Ev");}
S6456C2_nt ::~S6456C2_nt(){ note_dtor("S6456C2_nt", this);} // tgen
S6456C2_nt ::S6456C2_nt(){ note_ctor("S6456C2_nt", this);} // tgen

//skip512 S6456C2_nt

#else // __cplusplus

extern void _ZN10S6456C2_ntC1Ev();
extern void _ZN10S6456C2_ntD1Ev();
Name_Map name_map_S6456C2_nt[] = {
  NSPAIR(_ZN10S6456C2_ntC1Ev),
  NSPAIR(_ZN10S6456C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6456C2_nt[];
extern void _ZN10S6456C2_nt3v11Ev();
extern void _ZN10S6456C2_nt3v12Ev();
extern void _ZN10S6456C2_nt3v13Ev();
extern void _ZN10S6456C2_nt3v14Ev();
extern void _ZN10S6456C2_nt3v15Ev();
extern void _ZN10S6456C2_nt3v16Ev();
extern void _ZN10S6456C2_nt3v17Ev();
extern void _ZN10S6456C2_nt3v18Ev();
extern void _ZN10S6456C2_nt3v19Ev();
extern void _ZN10S6456C2_nt3v20Ev();
static  VTBL_ENTRY vtc_S6456C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6456C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S6456C2_nt[];
VTBL_ENTRY *P__ZTI10S6456C2_nt = _ZTI10S6456C2_nt; 
extern  VTBL_ENTRY _ZTV10S6456C2_nt[];
Class_Descriptor cd_S6456C2_nt = {  "S6456C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6456C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6456C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6456C2_nt),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6456C1  : S6456C2_nt {
  int s6456c1f0;
  long s6456c1f1[3];
  int s6456c1f2;
  ::S7161C9 s6456c1f3;
  ::S5217C60_nt s6456c1f4[256];
  virtual  ~S6456C1(); // _ZN7S6456C1D1Ev
  virtual void  v1(); // _ZN7S6456C12v1Ev
  virtual void  v2(); // _ZN7S6456C12v2Ev
  virtual void  v3(); // _ZN7S6456C12v3Ev
  virtual void  v4(); // _ZN7S6456C12v4Ev
  virtual void  v5(); // _ZN7S6456C12v5Ev
  virtual void  v6(); // _ZN7S6456C12v6Ev
  virtual void  v7(); // _ZN7S6456C12v7Ev
  virtual void  v8(); // _ZN7S6456C12v8Ev
  virtual void  v9(); // _ZN7S6456C12v9Ev
  virtual void  v10(); // _ZN7S6456C13v10Ev
  S6456C1(); // tgen
};
//SIG(1 S6456C1) C1{ BC2{ v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi Fl[3] Fi FC3{ BC4{ m Fp Fi[2]}} FC5{ m Fp}[256]}


 S6456C1 ::~S6456C1(){ note_dtor("S6456C1", this);}
void  S6456C1 ::v1(){vfunc_called(this, "_ZN7S6456C12v1Ev");}
void  S6456C1 ::v2(){vfunc_called(this, "_ZN7S6456C12v2Ev");}
void  S6456C1 ::v3(){vfunc_called(this, "_ZN7S6456C12v3Ev");}
void  S6456C1 ::v4(){vfunc_called(this, "_ZN7S6456C12v4Ev");}
void  S6456C1 ::v5(){vfunc_called(this, "_ZN7S6456C12v5Ev");}
void  S6456C1 ::v6(){vfunc_called(this, "_ZN7S6456C12v6Ev");}
void  S6456C1 ::v7(){vfunc_called(this, "_ZN7S6456C12v7Ev");}
void  S6456C1 ::v8(){vfunc_called(this, "_ZN7S6456C12v8Ev");}
void  S6456C1 ::v9(){vfunc_called(this, "_ZN7S6456C12v9Ev");}
void  S6456C1 ::v10(){vfunc_called(this, "_ZN7S6456C13v10Ev");}
S6456C1 ::S6456C1(){ note_ctor("S6456C1", this);} // tgen

static void Test_S6456C1()
{
  extern Class_Descriptor cd_S6456C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(265,266)];
    init_test(&cd_S6456C1, buf);
    S6456C1 *dp, &lv = *(dp=new (buf) S6456C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2112,1060), "sizeof(S6456C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6456C1)");
    check_base_class_offset(lv, (S6456C2_nt*), 0, "S6456C1");
    check_field_offset(lv, s6456c1f0, ABISELECT(8,4), "S6456C1.s6456c1f0");
    check_field_offset(lv, s6456c1f1, ABISELECT(16,8), "S6456C1.s6456c1f1");
    check_field_offset(lv, s6456c1f2, ABISELECT(40,20), "S6456C1.s6456c1f2");
    check_field_offset(lv, s6456c1f3, ABISELECT(48,24), "S6456C1.s6456c1f3");
    check_field_offset(lv, s6456c1f4, ABISELECT(64,36), "S6456C1.s6456c1f4");
    test_class_info(&lv, &cd_S6456C1);
    dp->~S6456C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6456C1(Test_S6456C1, "S6456C1", ABISELECT(2112,1060));

#else // __cplusplus

extern void _ZN7S6456C1C1Ev();
extern void _ZN7S6456C1D1Ev();
Name_Map name_map_S6456C1[] = {
  NSPAIR(_ZN7S6456C1C1Ev),
  NSPAIR(_ZN7S6456C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6456C2_nt;
extern VTBL_ENTRY _ZTI10S6456C2_nt[];
extern  VTBL_ENTRY _ZTV10S6456C2_nt[];
static Base_Class bases_S6456C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6456C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6456C1[];
extern void _ZN10S6456C2_nt3v11Ev();
extern void _ZN10S6456C2_nt3v12Ev();
extern void _ZN10S6456C2_nt3v13Ev();
extern void _ZN10S6456C2_nt3v14Ev();
extern void _ZN10S6456C2_nt3v15Ev();
extern void _ZN10S6456C2_nt3v16Ev();
extern void _ZN10S6456C2_nt3v17Ev();
extern void _ZN10S6456C2_nt3v18Ev();
extern void _ZN10S6456C2_nt3v19Ev();
extern void _ZN10S6456C2_nt3v20Ev();
extern void _ZN7S6456C1D1Ev();
extern void _ZN7S6456C1D0Ev();
extern void _ZN7S6456C12v1Ev();
extern void _ZN7S6456C12v2Ev();
extern void _ZN7S6456C12v3Ev();
extern void _ZN7S6456C12v4Ev();
extern void _ZN7S6456C12v5Ev();
extern void _ZN7S6456C12v6Ev();
extern void _ZN7S6456C12v7Ev();
extern void _ZN7S6456C12v8Ev();
extern void _ZN7S6456C12v9Ev();
extern void _ZN7S6456C13v10Ev();
static  VTBL_ENTRY vtc_S6456C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6456C1[0]),
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S6456C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN7S6456C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6456C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6456C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6456C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S6456C1[];
extern  VTBL_ENTRY _ZTV7S6456C1[];
Class_Descriptor cd_S6456C1 = {  "S6456C1", // class name
  bases_S6456C1, 1,
  &(vtc_S6456C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2112,1060), // object size
  NSPAIRA(_ZTI7S6456C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6456C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18714C4_nt  {
  virtual void  v11(); // _ZN11S18714C4_nt3v11Ev
  virtual void  v12(); // _ZN11S18714C4_nt3v12Ev
  virtual void  v13(); // _ZN11S18714C4_nt3v13Ev
  virtual void  v14(); // _ZN11S18714C4_nt3v14Ev
  ~S18714C4_nt(); // tgen
  S18714C4_nt(); // tgen
};
//SIG(-1 S18714C4_nt) C1{ v1 v2 v3 v4}


void  S18714C4_nt ::v11(){vfunc_called(this, "_ZN11S18714C4_nt3v11Ev");}
void  S18714C4_nt ::v12(){vfunc_called(this, "_ZN11S18714C4_nt3v12Ev");}
void  S18714C4_nt ::v13(){vfunc_called(this, "_ZN11S18714C4_nt3v13Ev");}
void  S18714C4_nt ::v14(){vfunc_called(this, "_ZN11S18714C4_nt3v14Ev");}
S18714C4_nt ::~S18714C4_nt(){ note_dtor("S18714C4_nt", this);} // tgen
S18714C4_nt ::S18714C4_nt(){ note_ctor("S18714C4_nt", this);} // tgen

//skip512 S18714C4_nt

#else // __cplusplus

extern void _ZN11S18714C4_ntC1Ev();
extern void _ZN11S18714C4_ntD1Ev();
Name_Map name_map_S18714C4_nt[] = {
  NSPAIR(_ZN11S18714C4_ntC1Ev),
  NSPAIR(_ZN11S18714C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18714C4_nt[];
extern void _ZN11S18714C4_nt3v11Ev();
extern void _ZN11S18714C4_nt3v12Ev();
extern void _ZN11S18714C4_nt3v13Ev();
extern void _ZN11S18714C4_nt3v14Ev();
static  VTBL_ENTRY vtc_S18714C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18714C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI11S18714C4_nt[];
VTBL_ENTRY *P__ZTI11S18714C4_nt = _ZTI11S18714C4_nt; 
extern  VTBL_ENTRY _ZTV11S18714C4_nt[];
Class_Descriptor cd_S18714C4_nt = {  "S18714C4_nt", // class name
  0,0,//no base classes
  &(vtc_S18714C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S18714C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18714C4_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18714C5_nt  {
  virtual void  v15(); // _ZN11S18714C5_nt3v15Ev
  virtual void  v16(); // _ZN11S18714C5_nt3v16Ev
  virtual void  v17(); // _ZN11S18714C5_nt3v17Ev
  ~S18714C5_nt(); // tgen
  S18714C5_nt(); // tgen
};
//SIG(-1 S18714C5_nt) C1{ v1 v2 v3}


void  S18714C5_nt ::v15(){vfunc_called(this, "_ZN11S18714C5_nt3v15Ev");}
void  S18714C5_nt ::v16(){vfunc_called(this, "_ZN11S18714C5_nt3v16Ev");}
void  S18714C5_nt ::v17(){vfunc_called(this, "_ZN11S18714C5_nt3v17Ev");}
S18714C5_nt ::~S18714C5_nt(){ note_dtor("S18714C5_nt", this);} // tgen
S18714C5_nt ::S18714C5_nt(){ note_ctor("S18714C5_nt", this);} // tgen

//skip512 S18714C5_nt

#else // __cplusplus

extern void _ZN11S18714C5_ntC1Ev();
extern void _ZN11S18714C5_ntD1Ev();
Name_Map name_map_S18714C5_nt[] = {
  NSPAIR(_ZN11S18714C5_ntC1Ev),
  NSPAIR(_ZN11S18714C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18714C5_nt[];
extern void _ZN11S18714C5_nt3v15Ev();
extern void _ZN11S18714C5_nt3v16Ev();
extern void _ZN11S18714C5_nt3v17Ev();
static  VTBL_ENTRY vtc_S18714C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18714C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI11S18714C5_nt[];
VTBL_ENTRY *P__ZTI11S18714C5_nt = _ZTI11S18714C5_nt; 
extern  VTBL_ENTRY _ZTV11S18714C5_nt[];
Class_Descriptor cd_S18714C5_nt = {  "S18714C5_nt", // class name
  0,0,//no base classes
  &(vtc_S18714C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S18714C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18714C5_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18714C3  : S18714C4_nt , virtual S18714C5_nt {
  int s18714c3f0[2];
  long double s18714c3f1[2];
  virtual void  v18(); // _ZN8S18714C33v18Ev
  virtual void  v19(); // _ZN8S18714C33v19Ev
  virtual void  v20(); // _ZN8S18714C33v20Ev
  virtual void  v21(); // _ZN8S18714C33v21Ev
  ~S18714C3(); // tgen
  S18714C3(); // tgen
};
//SIG(-1 S18714C3) C1{ BC2{ v5 v6 v7 v8} VBC3{ v9 v10 v11} v1 v2 v3 v4 Fi[2] FD[2]}


void  S18714C3 ::v18(){vfunc_called(this, "_ZN8S18714C33v18Ev");}
void  S18714C3 ::v19(){vfunc_called(this, "_ZN8S18714C33v19Ev");}
void  S18714C3 ::v20(){vfunc_called(this, "_ZN8S18714C33v20Ev");}
void  S18714C3 ::v21(){vfunc_called(this, "_ZN8S18714C33v21Ev");}
S18714C3 ::~S18714C3(){ note_dtor("S18714C3", this);} // tgen
S18714C3 ::S18714C3(){ note_ctor("S18714C3", this);} // tgen

static void Test_S18714C3()
{
  extern Class_Descriptor cd_S18714C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S18714C3, buf);
    S18714C3 *dp, &lv = *(dp=new (buf) S18714C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18714C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18714C3)");
    check_base_class_offset(lv, (S18714C4_nt*), 0, "S18714C3");
    check_base_class_offset(lv, (S18714C5_nt*), ABISELECT(48,36), "S18714C3");
    check_field_offset(lv, s18714c3f0, ABISELECT(8,4), "S18714C3.s18714c3f0");
    check_field_offset(lv, s18714c3f1, ABISELECT(16,12), "S18714C3.s18714c3f1");
    test_class_info(&lv, &cd_S18714C3);
    dp->~S18714C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18714C3(Test_S18714C3, "S18714C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S18714C3C1Ev();
extern void _ZN8S18714C3D1Ev();
Name_Map name_map_S18714C3[] = {
  NSPAIR(_ZN8S18714C3C1Ev),
  NSPAIR(_ZN8S18714C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18714C4_nt;
extern VTBL_ENTRY _ZTI11S18714C4_nt[];
extern  VTBL_ENTRY _ZTV11S18714C4_nt[];
extern Class_Descriptor cd_S18714C5_nt;
extern VTBL_ENTRY _ZTI11S18714C5_nt[];
extern  VTBL_ENTRY _ZTV11S18714C5_nt[];
static Base_Class bases_S18714C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18714C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18714C5_nt,    ABISELECT(48,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18714C3[];
extern void _ZN11S18714C4_nt3v11Ev();
extern void _ZN11S18714C4_nt3v12Ev();
extern void _ZN11S18714C4_nt3v13Ev();
extern void _ZN11S18714C4_nt3v14Ev();
extern void _ZN8S18714C33v18Ev();
extern void _ZN8S18714C33v19Ev();
extern void _ZN8S18714C33v20Ev();
extern void _ZN8S18714C33v21Ev();
extern void _ZN11S18714C5_nt3v15Ev();
extern void _ZN11S18714C5_nt3v16Ev();
extern void _ZN11S18714C5_nt3v17Ev();
static  VTBL_ENTRY vtc_S18714C3[] = {
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18714C3[0]),
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v18Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v19Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v20Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v21Ev,
  0,
  0,
  0,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S18714C3[0]),
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v17Ev,
};
extern VTBL_ENTRY _ZTV8S18714C3[];
static  VTT_ENTRY vtt_S18714C3[] = {
  {&(_ZTV8S18714C3[3]),  3,19},
  {&(_ZTV8S18714C3[16]),  16,19},
};
extern VTBL_ENTRY _ZTI8S18714C3[];
extern  VTBL_ENTRY _ZTV8S18714C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18714C3[];
Class_Descriptor cd_S18714C3 = {  "S18714C3", // class name
  bases_S18714C3, 2,
  &(vtc_S18714C3[0]), // expected_vtbl_contents
  &(vtt_S18714C3[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S18714C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18714C3),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18714C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18714C6_nt  {
  virtual void  v22(); // _ZN11S18714C6_nt3v22Ev
  virtual void  v23(); // _ZN11S18714C6_nt3v23Ev
  ~S18714C6_nt(); // tgen
  S18714C6_nt(); // tgen
};
//SIG(-1 S18714C6_nt) C1{ v1 v2}


void  S18714C6_nt ::v22(){vfunc_called(this, "_ZN11S18714C6_nt3v22Ev");}
void  S18714C6_nt ::v23(){vfunc_called(this, "_ZN11S18714C6_nt3v23Ev");}
S18714C6_nt ::~S18714C6_nt(){ note_dtor("S18714C6_nt", this);} // tgen
S18714C6_nt ::S18714C6_nt(){ note_ctor("S18714C6_nt", this);} // tgen

//skip512 S18714C6_nt

#else // __cplusplus

extern void _ZN11S18714C6_ntC1Ev();
extern void _ZN11S18714C6_ntD1Ev();
Name_Map name_map_S18714C6_nt[] = {
  NSPAIR(_ZN11S18714C6_ntC1Ev),
  NSPAIR(_ZN11S18714C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18714C6_nt[];
extern void _ZN11S18714C6_nt3v22Ev();
extern void _ZN11S18714C6_nt3v23Ev();
static  VTBL_ENTRY vtc_S18714C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18714C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S18714C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S18714C6_nt3v23Ev,
};
extern VTBL_ENTRY _ZTI11S18714C6_nt[];
VTBL_ENTRY *P__ZTI11S18714C6_nt = _ZTI11S18714C6_nt; 
extern  VTBL_ENTRY _ZTV11S18714C6_nt[];
Class_Descriptor cd_S18714C6_nt = {  "S18714C6_nt", // class name
  0,0,//no base classes
  &(vtc_S18714C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S18714C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18714C6_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18714C2  : virtual S18714C3 , S18714C6_nt {
  long s18714c2f0;
  virtual void  v6(); // _ZN8S18714C22v6Ev
  virtual void  v7(); // _ZN8S18714C22v7Ev
  virtual void  v8(); // _ZN8S18714C22v8Ev
  virtual void  v9(); // _ZN8S18714C22v9Ev
  virtual void  v10(); // _ZN8S18714C23v10Ev
  ~S18714C2(); // tgen
  S18714C2(); // tgen
};
//SIG(-1 S18714C2) C1{ VBC2{ BC3{ v6 v7 v8 v9} VBC4{ v10 v11 v12} v13 v14 v15 v16 Fi[2] FD[2]} BC5{ v17 v18} v1 v2 v3 v4 v5 Fl}


void  S18714C2 ::v6(){vfunc_called(this, "_ZN8S18714C22v6Ev");}
void  S18714C2 ::v7(){vfunc_called(this, "_ZN8S18714C22v7Ev");}
void  S18714C2 ::v8(){vfunc_called(this, "_ZN8S18714C22v8Ev");}
void  S18714C2 ::v9(){vfunc_called(this, "_ZN8S18714C22v9Ev");}
void  S18714C2 ::v10(){vfunc_called(this, "_ZN8S18714C23v10Ev");}
S18714C2 ::~S18714C2(){ note_dtor("S18714C2", this);} // tgen
S18714C2 ::S18714C2(){ note_ctor("S18714C2", this);} // tgen

static void Test_S18714C2()
{
  extern Class_Descriptor cd_S18714C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S18714C2, buf);
    S18714C2 *dp, &lv = *(dp=new (buf) S18714C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S18714C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18714C2)");
    check_base_class_offset(lv, (S18714C4_nt*)(S18714C3*), ABISELECT(16,8), "S18714C2");
    check_base_class_offset(lv, (S18714C5_nt*)(S18714C3*), ABISELECT(64,44), "S18714C2");
    check_base_class_offset(lv, (S18714C3*), ABISELECT(16,8), "S18714C2");
    check_base_class_offset(lv, (S18714C6_nt*), 0, "S18714C2");
    check_field_offset(lv, s18714c2f0, ABISELECT(8,4), "S18714C2.s18714c2f0");
    test_class_info(&lv, &cd_S18714C2);
    dp->~S18714C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18714C2(Test_S18714C2, "S18714C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S18714C2C1Ev();
extern void _ZN8S18714C2D1Ev();
Name_Map name_map_S18714C2[] = {
  NSPAIR(_ZN8S18714C2C1Ev),
  NSPAIR(_ZN8S18714C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18714C4_nt;
extern VTBL_ENTRY _ZTI11S18714C4_nt[];
extern  VTBL_ENTRY _ZTV11S18714C4_nt[];
extern Class_Descriptor cd_S18714C5_nt;
extern VTBL_ENTRY _ZTI11S18714C5_nt[];
extern  VTBL_ENTRY _ZTV11S18714C5_nt[];
extern Class_Descriptor cd_S18714C3;
extern VTBL_ENTRY _ZTI8S18714C3[];
extern  VTBL_ENTRY _ZTV8S18714C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18714C3[];
extern Class_Descriptor cd_S18714C6_nt;
extern VTBL_ENTRY _ZTI11S18714C6_nt[];
extern  VTBL_ENTRY _ZTV11S18714C6_nt[];
static Base_Class bases_S18714C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18714C4_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18714C5_nt,    ABISELECT(64,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S18714C3,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18714C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18714C2[];
extern void _ZN11S18714C6_nt3v22Ev();
extern void _ZN11S18714C6_nt3v23Ev();
extern void _ZN8S18714C22v6Ev();
extern void _ZN8S18714C22v7Ev();
extern void _ZN8S18714C22v8Ev();
extern void _ZN8S18714C22v9Ev();
extern void _ZN8S18714C23v10Ev();
extern void _ZN11S18714C4_nt3v11Ev();
extern void _ZN11S18714C4_nt3v12Ev();
extern void _ZN11S18714C4_nt3v13Ev();
extern void _ZN11S18714C4_nt3v14Ev();
extern void _ZN8S18714C33v18Ev();
extern void _ZN8S18714C33v19Ev();
extern void _ZN8S18714C33v20Ev();
extern void _ZN8S18714C33v21Ev();
extern void _ZN11S18714C5_nt3v15Ev();
extern void _ZN11S18714C5_nt3v16Ev();
extern void _ZN11S18714C5_nt3v17Ev();
static  VTBL_ENTRY vtc_S18714C2[] = {
  ABISELECT(64,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18714C2[0]),
  (VTBL_ENTRY)&_ZN11S18714C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S18714C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN8S18714C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18714C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18714C22v8Ev,
  (VTBL_ENTRY)&_ZN8S18714C22v9Ev,
  (VTBL_ENTRY)&_ZN8S18714C23v10Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18714C2[0]),
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v18Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v19Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v20Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v21Ev,
  0,
  0,
  0,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S18714C2[0]),
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v17Ev,
};
extern VTBL_ENTRY _ZTV8S18714C2[];
extern void _ZN11S18714C4_nt3v11Ev();
extern void _ZN11S18714C4_nt3v12Ev();
extern void _ZN11S18714C4_nt3v13Ev();
extern void _ZN11S18714C4_nt3v14Ev();
extern void _ZN8S18714C33v18Ev();
extern void _ZN8S18714C33v19Ev();
extern void _ZN8S18714C33v20Ev();
extern void _ZN8S18714C33v21Ev();
static  VTBL_ENTRY _tg__ZTV8S18714C3__8S18714C2[] = {
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18714C3[0]),
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S18714C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v18Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v19Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v20Ev,
  (VTBL_ENTRY)&_ZN8S18714C33v21Ev,
};
extern void _ZN11S18714C5_nt3v15Ev();
extern void _ZN11S18714C5_nt3v16Ev();
extern void _ZN11S18714C5_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV11S18714C5_nt__8S18714C3__8S18714C2[] = {
  0,
  0,
  0,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S18714C3[0]),
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S18714C5_nt3v17Ev,
};
static  VTT_ENTRY vtt_S18714C2[] = {
  {&(_ZTV8S18714C2[4]),  4,38},
  {&(_ZTV8S18714C2[22]),  22,38},
  {&(_ZTV8S18714C2[35]),  35,38},
  {&(_tg__ZTV8S18714C3__8S18714C2[3]),  3,11},
  {&(_tg__ZTV11S18714C5_nt__8S18714C3__8S18714C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S18714C2[];
extern  VTBL_ENTRY _ZTV8S18714C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18714C2[];
Class_Descriptor cd_S18714C2 = {  "S18714C2", // class name
  bases_S18714C2, 4,
  &(vtc_S18714C2[0]), // expected_vtbl_contents
  &(vtt_S18714C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S18714C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18714C2),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18714C2),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18714C1  {
  ::S18714C2 s18714c1f0;
  void *s18714c1f1;
  virtual void  v1(); // _ZN8S18714C12v1Ev
  virtual void  v2(); // _ZN8S18714C12v2Ev
  virtual void  v3(); // _ZN8S18714C12v3Ev
  virtual void  v4(); // _ZN8S18714C12v4Ev
  virtual void  v5(); // _ZN8S18714C12v5Ev
  ~S18714C1(); // tgen
  S18714C1(); // tgen
};
//SIG(1 S18714C1) C1{ v1 v2 v3 v4 v5 FC2{ VBC3{ BC4{ v11 v12 v13 v14} VBC5{ v15 v16 v17} v18 v19 v20 v21 Fi[2] FD[2]} BC6{ v22 v23} v6 v7 v8 v9 v10 Fl} Fp}


void  S18714C1 ::v1(){vfunc_called(this, "_ZN8S18714C12v1Ev");}
void  S18714C1 ::v2(){vfunc_called(this, "_ZN8S18714C12v2Ev");}
void  S18714C1 ::v3(){vfunc_called(this, "_ZN8S18714C12v3Ev");}
void  S18714C1 ::v4(){vfunc_called(this, "_ZN8S18714C12v4Ev");}
void  S18714C1 ::v5(){vfunc_called(this, "_ZN8S18714C12v5Ev");}
S18714C1 ::~S18714C1(){ note_dtor("S18714C1", this);} // tgen
S18714C1 ::S18714C1(){ note_ctor("S18714C1", this);} // tgen

static void Test_S18714C1()
{
  extern Class_Descriptor cd_S18714C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S18714C1, buf);
    S18714C1 *dp, &lv = *(dp=new (buf) S18714C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18714C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18714C1)");
    check_field_offset(lv, s18714c1f0, ABISELECT(16,4), "S18714C1.s18714c1f0");
    check_field_offset(lv, s18714c1f1, ABISELECT(96,52), "S18714C1.s18714c1f1");
    test_class_info(&lv, &cd_S18714C1);
    dp->~S18714C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18714C1(Test_S18714C1, "S18714C1", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18714C1C1Ev();
extern void _ZN8S18714C1D1Ev();
Name_Map name_map_S18714C1[] = {
  NSPAIR(_ZN8S18714C1C1Ev),
  NSPAIR(_ZN8S18714C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18714C1[];
extern void _ZN8S18714C12v1Ev();
extern void _ZN8S18714C12v2Ev();
extern void _ZN8S18714C12v3Ev();
extern void _ZN8S18714C12v4Ev();
extern void _ZN8S18714C12v5Ev();
static  VTBL_ENTRY vtc_S18714C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18714C1[0]),
  (VTBL_ENTRY)&_ZN8S18714C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18714C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18714C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18714C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18714C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18714C1[];
extern  VTBL_ENTRY _ZTV8S18714C1[];
Class_Descriptor cd_S18714C1 = {  "S18714C1", // class name
  0,0,//no base classes
  &(vtc_S18714C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18714C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18714C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3343C3  {
  virtual void  v6(); // _ZN7S3343C32v6Ev
  virtual void  v7(); // _ZN7S3343C32v7Ev
  virtual void  v8(); // _ZN7S3343C32v8Ev
  virtual void  v9(); // _ZN7S3343C32v9Ev
  virtual void  v10(); // _ZN7S3343C33v10Ev
  virtual void  v11(); // _ZN7S3343C33v11Ev
  virtual void  v12(); // _ZN7S3343C33v12Ev
  virtual void  v13(); // _ZN7S3343C33v13Ev
  virtual void  v14(); // _ZN7S3343C33v14Ev
  virtual void  v15(); // _ZN7S3343C33v15Ev
  ~S3343C3(); // tgen
  S3343C3(); // tgen
};
//SIG(-1 S3343C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S3343C3 ::v6(){vfunc_called(this, "_ZN7S3343C32v6Ev");}
void  S3343C3 ::v7(){vfunc_called(this, "_ZN7S3343C32v7Ev");}
void  S3343C3 ::v8(){vfunc_called(this, "_ZN7S3343C32v8Ev");}
void  S3343C3 ::v9(){vfunc_called(this, "_ZN7S3343C32v9Ev");}
void  S3343C3 ::v10(){vfunc_called(this, "_ZN7S3343C33v10Ev");}
void  S3343C3 ::v11(){vfunc_called(this, "_ZN7S3343C33v11Ev");}
void  S3343C3 ::v12(){vfunc_called(this, "_ZN7S3343C33v12Ev");}
void  S3343C3 ::v13(){vfunc_called(this, "_ZN7S3343C33v13Ev");}
void  S3343C3 ::v14(){vfunc_called(this, "_ZN7S3343C33v14Ev");}
void  S3343C3 ::v15(){vfunc_called(this, "_ZN7S3343C33v15Ev");}
S3343C3 ::~S3343C3(){ note_dtor("S3343C3", this);} // tgen
S3343C3 ::S3343C3(){ note_ctor("S3343C3", this);} // tgen

static void Test_S3343C3()
{
  extern Class_Descriptor cd_S3343C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3343C3, buf);
    S3343C3 *dp, &lv = *(dp=new (buf) S3343C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3343C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3343C3)");
    test_class_info(&lv, &cd_S3343C3);
    dp->~S3343C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3343C3(Test_S3343C3, "S3343C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3343C3C1Ev();
extern void _ZN7S3343C3D1Ev();
Name_Map name_map_S3343C3[] = {
  NSPAIR(_ZN7S3343C3C1Ev),
  NSPAIR(_ZN7S3343C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3343C3[];
extern void _ZN7S3343C32v6Ev();
extern void _ZN7S3343C32v7Ev();
extern void _ZN7S3343C32v8Ev();
extern void _ZN7S3343C32v9Ev();
extern void _ZN7S3343C33v10Ev();
extern void _ZN7S3343C33v11Ev();
extern void _ZN7S3343C33v12Ev();
extern void _ZN7S3343C33v13Ev();
extern void _ZN7S3343C33v14Ev();
extern void _ZN7S3343C33v15Ev();
static  VTBL_ENTRY vtc_S3343C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3343C3[0]),
  (VTBL_ENTRY)&_ZN7S3343C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v15Ev,
};
extern VTBL_ENTRY _ZTI7S3343C3[];
extern  VTBL_ENTRY _ZTV7S3343C3[];
Class_Descriptor cd_S3343C3 = {  "S3343C3", // class name
  0,0,//no base classes
  &(vtc_S3343C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3343C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3343C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3343C2  : S3343C3 {
  void *s3343c2f0;
  long s3343c2f1[2];
  void *s3343c2f2;
  virtual  ~S3343C2(); // _ZN7S3343C2D1Ev
  virtual void  v16(); // _ZN7S3343C23v16Ev
  virtual void  v17(); // _ZN7S3343C23v17Ev
  virtual void  v18(); // _ZN7S3343C23v18Ev
  virtual void  v19(); // _ZN7S3343C23v19Ev
  virtual void  v20(); // _ZN7S3343C23v20Ev
  virtual void  v21(); // _ZN7S3343C23v21Ev
  virtual void  v22(); // _ZN7S3343C23v22Ev
  virtual void  v23(); // _ZN7S3343C23v23Ev
  virtual void  v24(); // _ZN7S3343C23v24Ev
  virtual void  v25(); // _ZN7S3343C23v25Ev
  S3343C2(); // tgen
};
//SIG(-1 S3343C2) C1{ BC2{ v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fl[2] Fp}


 S3343C2 ::~S3343C2(){ note_dtor("S3343C2", this);}
void  S3343C2 ::v16(){vfunc_called(this, "_ZN7S3343C23v16Ev");}
void  S3343C2 ::v17(){vfunc_called(this, "_ZN7S3343C23v17Ev");}
void  S3343C2 ::v18(){vfunc_called(this, "_ZN7S3343C23v18Ev");}
void  S3343C2 ::v19(){vfunc_called(this, "_ZN7S3343C23v19Ev");}
void  S3343C2 ::v20(){vfunc_called(this, "_ZN7S3343C23v20Ev");}
void  S3343C2 ::v21(){vfunc_called(this, "_ZN7S3343C23v21Ev");}
void  S3343C2 ::v22(){vfunc_called(this, "_ZN7S3343C23v22Ev");}
void  S3343C2 ::v23(){vfunc_called(this, "_ZN7S3343C23v23Ev");}
void  S3343C2 ::v24(){vfunc_called(this, "_ZN7S3343C23v24Ev");}
void  S3343C2 ::v25(){vfunc_called(this, "_ZN7S3343C23v25Ev");}
S3343C2 ::S3343C2(){ note_ctor("S3343C2", this);} // tgen

static void Test_S3343C2()
{
  extern Class_Descriptor cd_S3343C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3343C2, buf);
    S3343C2 *dp, &lv = *(dp=new (buf) S3343C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3343C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3343C2)");
    check_base_class_offset(lv, (S3343C3*), 0, "S3343C2");
    check_field_offset(lv, s3343c2f0, ABISELECT(8,4), "S3343C2.s3343c2f0");
    check_field_offset(lv, s3343c2f1, ABISELECT(16,8), "S3343C2.s3343c2f1");
    check_field_offset(lv, s3343c2f2, ABISELECT(32,16), "S3343C2.s3343c2f2");
    test_class_info(&lv, &cd_S3343C2);
    dp->~S3343C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3343C2(Test_S3343C2, "S3343C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3343C2C1Ev();
extern void _ZN7S3343C2D1Ev();
Name_Map name_map_S3343C2[] = {
  NSPAIR(_ZN7S3343C2C1Ev),
  NSPAIR(_ZN7S3343C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3343C3;
extern VTBL_ENTRY _ZTI7S3343C3[];
extern  VTBL_ENTRY _ZTV7S3343C3[];
static Base_Class bases_S3343C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3343C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3343C2[];
extern void _ZN7S3343C32v6Ev();
extern void _ZN7S3343C32v7Ev();
extern void _ZN7S3343C32v8Ev();
extern void _ZN7S3343C32v9Ev();
extern void _ZN7S3343C33v10Ev();
extern void _ZN7S3343C33v11Ev();
extern void _ZN7S3343C33v12Ev();
extern void _ZN7S3343C33v13Ev();
extern void _ZN7S3343C33v14Ev();
extern void _ZN7S3343C33v15Ev();
extern void _ZN7S3343C2D1Ev();
extern void _ZN7S3343C2D0Ev();
extern void _ZN7S3343C23v16Ev();
extern void _ZN7S3343C23v17Ev();
extern void _ZN7S3343C23v18Ev();
extern void _ZN7S3343C23v19Ev();
extern void _ZN7S3343C23v20Ev();
extern void _ZN7S3343C23v21Ev();
extern void _ZN7S3343C23v22Ev();
extern void _ZN7S3343C23v23Ev();
extern void _ZN7S3343C23v24Ev();
extern void _ZN7S3343C23v25Ev();
static  VTBL_ENTRY vtc_S3343C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3343C2[0]),
  (VTBL_ENTRY)&_ZN7S3343C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3343C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3343C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S3343C2[];
extern  VTBL_ENTRY _ZTV7S3343C2[];
Class_Descriptor cd_S3343C2 = {  "S3343C2", // class name
  bases_S3343C2, 1,
  &(vtc_S3343C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3343C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3343C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3343C1  : S3343C2 {
  int s3343c1f0[2];
  virtual  ~S3343C1(); // _ZN7S3343C1D1Ev
  virtual void  v1(); // _ZN7S3343C12v1Ev
  virtual void  v2(); // _ZN7S3343C12v2Ev
  virtual void  v3(); // _ZN7S3343C12v3Ev
  virtual void  v4(); // _ZN7S3343C12v4Ev
  virtual void  v5(); // _ZN7S3343C12v5Ev
  S3343C1(); // tgen
};
//SIG(1 S3343C1) C1{ BC2{ BC3{ v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fp Fl[2] Fp} vd v1 v2 v3 v4 v5 Fi[2]}


 S3343C1 ::~S3343C1(){ note_dtor("S3343C1", this);}
void  S3343C1 ::v1(){vfunc_called(this, "_ZN7S3343C12v1Ev");}
void  S3343C1 ::v2(){vfunc_called(this, "_ZN7S3343C12v2Ev");}
void  S3343C1 ::v3(){vfunc_called(this, "_ZN7S3343C12v3Ev");}
void  S3343C1 ::v4(){vfunc_called(this, "_ZN7S3343C12v4Ev");}
void  S3343C1 ::v5(){vfunc_called(this, "_ZN7S3343C12v5Ev");}
S3343C1 ::S3343C1(){ note_ctor("S3343C1", this);} // tgen

static void Test_S3343C1()
{
  extern Class_Descriptor cd_S3343C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3343C1, buf);
    S3343C1 *dp, &lv = *(dp=new (buf) S3343C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3343C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3343C1)");
    check_base_class_offset(lv, (S3343C3*)(S3343C2*), 0, "S3343C1");
    check_base_class_offset(lv, (S3343C2*), 0, "S3343C1");
    check_field_offset(lv, s3343c1f0, ABISELECT(40,20), "S3343C1.s3343c1f0");
    test_class_info(&lv, &cd_S3343C1);
    dp->~S3343C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3343C1(Test_S3343C1, "S3343C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3343C1C1Ev();
extern void _ZN7S3343C1D1Ev();
Name_Map name_map_S3343C1[] = {
  NSPAIR(_ZN7S3343C1C1Ev),
  NSPAIR(_ZN7S3343C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3343C3;
extern VTBL_ENTRY _ZTI7S3343C3[];
extern  VTBL_ENTRY _ZTV7S3343C3[];
extern Class_Descriptor cd_S3343C2;
extern VTBL_ENTRY _ZTI7S3343C2[];
extern  VTBL_ENTRY _ZTV7S3343C2[];
static Base_Class bases_S3343C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3343C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3343C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3343C1[];
extern void _ZN7S3343C32v6Ev();
extern void _ZN7S3343C32v7Ev();
extern void _ZN7S3343C32v8Ev();
extern void _ZN7S3343C32v9Ev();
extern void _ZN7S3343C33v10Ev();
extern void _ZN7S3343C33v11Ev();
extern void _ZN7S3343C33v12Ev();
extern void _ZN7S3343C33v13Ev();
extern void _ZN7S3343C33v14Ev();
extern void _ZN7S3343C33v15Ev();
extern void _ZN7S3343C1D1Ev();
extern void _ZN7S3343C1D0Ev();
extern void _ZN7S3343C23v16Ev();
extern void _ZN7S3343C23v17Ev();
extern void _ZN7S3343C23v18Ev();
extern void _ZN7S3343C23v19Ev();
extern void _ZN7S3343C23v20Ev();
extern void _ZN7S3343C23v21Ev();
extern void _ZN7S3343C23v22Ev();
extern void _ZN7S3343C23v23Ev();
extern void _ZN7S3343C23v24Ev();
extern void _ZN7S3343C23v25Ev();
extern void _ZN7S3343C12v1Ev();
extern void _ZN7S3343C12v2Ev();
extern void _ZN7S3343C12v3Ev();
extern void _ZN7S3343C12v4Ev();
extern void _ZN7S3343C12v5Ev();
static  VTBL_ENTRY vtc_S3343C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3343C1[0]),
  (VTBL_ENTRY)&_ZN7S3343C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3343C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3343C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3343C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3343C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3343C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3343C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3343C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3343C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3343C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3343C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3343C1[];
extern  VTBL_ENTRY _ZTV7S3343C1[];
Class_Descriptor cd_S3343C1 = {  "S3343C1", // class name
  bases_S3343C1, 2,
  &(vtc_S3343C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3343C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3343C1),29, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18567C3_nt  {
  int s18567c3f0;
  virtual void  v5(); // _ZN11S18567C3_nt2v5Ev
  virtual void  v6(); // _ZN11S18567C3_nt2v6Ev
  virtual void  v7(); // _ZN11S18567C3_nt2v7Ev
  virtual void  v8(); // _ZN11S18567C3_nt2v8Ev
  virtual void  v9(); // _ZN11S18567C3_nt2v9Ev
  ~S18567C3_nt(); // tgen
  S18567C3_nt(); // tgen
};
//SIG(-1 S18567C3_nt) C1{ v1 v2 v3 v4 v5 Fi}


void  S18567C3_nt ::v5(){vfunc_called(this, "_ZN11S18567C3_nt2v5Ev");}
void  S18567C3_nt ::v6(){vfunc_called(this, "_ZN11S18567C3_nt2v6Ev");}
void  S18567C3_nt ::v7(){vfunc_called(this, "_ZN11S18567C3_nt2v7Ev");}
void  S18567C3_nt ::v8(){vfunc_called(this, "_ZN11S18567C3_nt2v8Ev");}
void  S18567C3_nt ::v9(){vfunc_called(this, "_ZN11S18567C3_nt2v9Ev");}
S18567C3_nt ::~S18567C3_nt(){ note_dtor("S18567C3_nt", this);} // tgen
S18567C3_nt ::S18567C3_nt(){ note_ctor("S18567C3_nt", this);} // tgen

//skip512 S18567C3_nt

#else // __cplusplus

extern void _ZN11S18567C3_ntC1Ev();
extern void _ZN11S18567C3_ntD1Ev();
Name_Map name_map_S18567C3_nt[] = {
  NSPAIR(_ZN11S18567C3_ntC1Ev),
  NSPAIR(_ZN11S18567C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S18567C3_nt[];
extern void _ZN11S18567C3_nt2v5Ev();
extern void _ZN11S18567C3_nt2v6Ev();
extern void _ZN11S18567C3_nt2v7Ev();
extern void _ZN11S18567C3_nt2v8Ev();
extern void _ZN11S18567C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S18567C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S18567C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI11S18567C3_nt[];
VTBL_ENTRY *P__ZTI11S18567C3_nt = _ZTI11S18567C3_nt; 
extern  VTBL_ENTRY _ZTV11S18567C3_nt[];
Class_Descriptor cd_S18567C3_nt = {  "S18567C3_nt", // class name
  0,0,//no base classes
  &(vtc_S18567C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S18567C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S18567C3_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18567C2  : virtual S18567C3_nt {
  virtual void  v3(); // _ZN8S18567C22v3Ev
  virtual void  v4(); // _ZN8S18567C22v4Ev
  ~S18567C2(); // tgen
  S18567C2(); // tgen
};
//SIG(-1 S18567C2) C1{ VBC2{ v3 v4 v5 v6 v7 Fi} v1 v2}


void  S18567C2 ::v3(){vfunc_called(this, "_ZN8S18567C22v3Ev");}
void  S18567C2 ::v4(){vfunc_called(this, "_ZN8S18567C22v4Ev");}
S18567C2 ::~S18567C2(){ note_dtor("S18567C2", this);} // tgen
S18567C2 ::S18567C2(){ note_ctor("S18567C2", this);} // tgen

static void Test_S18567C2()
{
  extern Class_Descriptor cd_S18567C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18567C2, buf);
    S18567C2 *dp, &lv = *(dp=new (buf) S18567C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18567C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18567C2)");
    check_base_class_offset(lv, (S18567C3_nt*), ABISELECT(8,4), "S18567C2");
    test_class_info(&lv, &cd_S18567C2);
    dp->~S18567C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18567C2(Test_S18567C2, "S18567C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18567C2C1Ev();
extern void _ZN8S18567C2D1Ev();
Name_Map name_map_S18567C2[] = {
  NSPAIR(_ZN8S18567C2C1Ev),
  NSPAIR(_ZN8S18567C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18567C3_nt;
extern VTBL_ENTRY _ZTI11S18567C3_nt[];
extern  VTBL_ENTRY _ZTV11S18567C3_nt[];
static Base_Class bases_S18567C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18567C3_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18567C2[];
extern void _ZN8S18567C22v3Ev();
extern void _ZN8S18567C22v4Ev();
extern void _ZN11S18567C3_nt2v5Ev();
extern void _ZN11S18567C3_nt2v6Ev();
extern void _ZN11S18567C3_nt2v7Ev();
extern void _ZN11S18567C3_nt2v8Ev();
extern void _ZN11S18567C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S18567C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18567C2[0]),
  (VTBL_ENTRY)&_ZN8S18567C22v3Ev,
  (VTBL_ENTRY)&_ZN8S18567C22v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S18567C2[0]),
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S18567C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTV8S18567C2[];
static  VTT_ENTRY vtt_S18567C2[] = {
  {&(_ZTV8S18567C2[3]),  3,17},
  {&(_ZTV8S18567C2[12]),  12,17},
};
extern VTBL_ENTRY _ZTI8S18567C2[];
extern  VTBL_ENTRY _ZTV8S18567C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18567C2[];
Class_Descriptor cd_S18567C2 = {  "S18567C2", // class name
  bases_S18567C2, 1,
  &(vtc_S18567C2[0]), // expected_vtbl_contents
  &(vtt_S18567C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18567C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18567C2),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18567C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18567C1  {
  long double s18567c1f0;
  long s18567c1f1[7];
  ::S18567C2 s18567c1f2;
  void *s18567c1f3;
  ::S18714C3 s18567c1f4;
  virtual void  v1(); // _ZN8S18567C12v1Ev
  virtual void  v2(); // _ZN8S18567C12v2Ev
  ~S18567C1(); // tgen
  S18567C1(); // tgen
};
//SIG(1 S18567C1) C1{ v1 v2 FD Fl[7] FC2{ VBC3{ v5 v6 v7 v8 v9 Fi} v3 v4} Fp FC4{ BC5{ v14 v15 v16 v17} VBC6{ v18 v19 v20} v10 v11 v12 v13 Fi[2] FD[2]}}


void  S18567C1 ::v1(){vfunc_called(this, "_ZN8S18567C12v1Ev");}
void  S18567C1 ::v2(){vfunc_called(this, "_ZN8S18567C12v2Ev");}
S18567C1 ::~S18567C1(){ note_dtor("S18567C1", this);} // tgen
S18567C1 ::S18567C1(){ note_ctor("S18567C1", this);} // tgen

static void Test_S18567C1()
{
  extern Class_Descriptor cd_S18567C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,26)];
    init_test(&cd_S18567C1, buf);
    S18567C1 *dp, &lv = *(dp=new (buf) S18567C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,100), "sizeof(S18567C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18567C1)");
    check_field_offset(lv, s18567c1f0, ABISELECT(16,4), "S18567C1.s18567c1f0");
    check_field_offset(lv, s18567c1f1, ABISELECT(32,16), "S18567C1.s18567c1f1");
    check_field_offset(lv, s18567c1f2, ABISELECT(88,44), "S18567C1.s18567c1f2");
    check_field_offset(lv, s18567c1f3, ABISELECT(112,56), "S18567C1.s18567c1f3");
    check_field_offset(lv, s18567c1f4, ABISELECT(128,60), "S18567C1.s18567c1f4");
    test_class_info(&lv, &cd_S18567C1);
    dp->~S18567C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18567C1(Test_S18567C1, "S18567C1", ABISELECT(192,100));

#else // __cplusplus

extern void _ZN8S18567C1C1Ev();
extern void _ZN8S18567C1D1Ev();
Name_Map name_map_S18567C1[] = {
  NSPAIR(_ZN8S18567C1C1Ev),
  NSPAIR(_ZN8S18567C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18567C1[];
extern void _ZN8S18567C12v1Ev();
extern void _ZN8S18567C12v2Ev();
static  VTBL_ENTRY vtc_S18567C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18567C1[0]),
  (VTBL_ENTRY)&_ZN8S18567C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18567C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18567C1[];
extern  VTBL_ENTRY _ZTV8S18567C1[];
Class_Descriptor cd_S18567C1 = {  "S18567C1", // class name
  0,0,//no base classes
  &(vtc_S18567C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,100), // object size
  NSPAIRA(_ZTI8S18567C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18567C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C5_nt  : virtual S2265C28 {
  ~S20713C5_nt(); // tgen
  S20713C5_nt(); // tgen
};
//SIG(-1 S20713C5_nt) C1{ VBC2{ m}}


S20713C5_nt ::~S20713C5_nt(){ note_dtor("S20713C5_nt", this);} // tgen
S20713C5_nt ::S20713C5_nt(){ note_ctor("S20713C5_nt", this);} // tgen

//skip512 S20713C5_nt

#else // __cplusplus

extern void _ZN11S20713C5_ntC1Ev();
extern void _ZN11S20713C5_ntD1Ev();
Name_Map name_map_S20713C5_nt[] = {
  NSPAIR(_ZN11S20713C5_ntC1Ev),
  NSPAIR(_ZN11S20713C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20713C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
static  VTBL_ENTRY vtc_S20713C5_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20713C5_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20713C5_nt[];
static  VTT_ENTRY vtt_S20713C5_nt[] = {
  {&(_ZTV11S20713C5_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
VTBL_ENTRY *P__ZTI11S20713C5_nt = _ZTI11S20713C5_nt; 
extern  VTBL_ENTRY _ZTV11S20713C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20713C5_nt[];
Class_Descriptor cd_S20713C5_nt = {  "S20713C5_nt", // class name
  bases_S20713C5_nt, 1,
  &(vtc_S20713C5_nt[0]), // expected_vtbl_contents
  &(vtt_S20713C5_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20713C5_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S20713C5_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20713C5_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C4  : virtual S20713C5_nt , virtual S1933C4_nt {
  virtual  ~S20713C4(); // _ZN8S20713C4D2Ev
  S20713C4(); // tgen
};
//SIG(-1 S20713C4) C1{ VBC2{ VBC3{ m}} VBC4{ vd m} vd}


 S20713C4 ::~S20713C4(){ note_dtor("S20713C4", this);}
S20713C4 ::S20713C4(){ note_ctor("S20713C4", this);} // tgen

static void Test_S20713C4()
{
  extern Class_Descriptor cd_S20713C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20713C4, buf);
    S20713C4 *dp, &lv = *(dp=new (buf) S20713C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20713C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20713C4)");
    check_base_class_offset(lv, (S2265C28*)(S20713C5_nt*), 0, "S20713C4");
    check_base_class_offset(lv, (S20713C5_nt*), 0, "S20713C4");
    check_base_class_offset(lv, (S1933C4_nt*), ABISELECT(8,4), "S20713C4");
    test_class_info(&lv, &cd_S20713C4);
    dp->~S20713C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20713C4(Test_S20713C4, "S20713C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20713C4C1Ev();
extern void _ZN8S20713C4D2Ev();
Name_Map name_map_S20713C4[] = {
  NSPAIR(_ZN8S20713C4C1Ev),
  NSPAIR(_ZN8S20713C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C5_nt;
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
extern  VTBL_ENTRY _ZTV11S20713C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20713C5_nt[];
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S20713C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20713C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1933C4_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20713C4[];
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20713C4D1Ev,_ZThn4_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn8_N8S20713C4D0Ev,_ZThn4_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20713C4[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20713C4[];
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__8S20713C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20713C5_nt[0]),
};
static  VTT_ENTRY vtt_S20713C4[] = {
  {&(_ZTV8S20713C4[5]),  5,12},
  {&(_ZTV8S20713C4[5]),  5,12},
  {&(_ZTV8S20713C4[10]),  10,12},
  {&(_tg__ZTV11S20713C5_nt__8S20713C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
static VTBL_ENTRY alt_thunk_names158[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20713C4D0Ev,_ZThn4_N8S20713C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20713C4D1Ev,_ZThn4_N8S20713C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20713C4 = {  "S20713C4", // class name
  bases_S20713C4, 3,
  &(vtc_S20713C4[0]), // expected_vtbl_contents
  &(vtt_S20713C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20713C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20713C4),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20713C4),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names158,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C9_nt  : S2265C28 {
};
//SIG(-1 S20713C9_nt) C1{ BC2{ m}}



//skip512 S20713C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S20713C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20713C9_nt[];
VTBL_ENTRY *P__ZTI11S20713C9_nt = _ZTI11S20713C9_nt; 
Class_Descriptor cd_S20713C9_nt = {  "S20713C9_nt", // class name
  bases_S20713C9_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S20713C9_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C8  : S20713C9_nt {
};
//SIG(-1 S20713C8) C1{ BC2{ BC3{ m}}}



static void Test_S20713C8()
{
  extern Class_Descriptor cd_S20713C8;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S20713C8, buf);
    S20713C8 &lv = *(new (buf) S20713C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S20713C8)");
    check2(__alignof__(lv), 1, "__alignof__(S20713C8)");
    check_base_class_offset(lv, (S2265C28*)(S20713C9_nt*), 0, "S20713C8");
    check_base_class_offset(lv, (S20713C9_nt*), 0, "S20713C8");
    test_class_info(&lv, &cd_S20713C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20713C8(Test_S20713C8, "S20713C8", 1);

#else // __cplusplus

extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C9_nt;
extern VTBL_ENTRY _ZTI11S20713C9_nt[];
static Base_Class bases_S20713C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20713C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20713C8[];
Class_Descriptor cd_S20713C8 = {  "S20713C8", // class name
  bases_S20713C8, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S20713C8),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C2  : virtual S2265C38 , S20713C4 , virtual S20713C8 , virtual S2265C24 {
  ::S20713C5_nt s20713c2f0;
  virtual  ~S20713C2(); // _ZN8S20713C2D2Ev
  S20713C2(); // tgen
};
//SIG(-1 S20713C2) C1{ VBC2{ m} BC3{ VBC4{ VBC5{ m}} VBC6{ vd m} vd} VBC7{ BC8{ BC5}} VBC9{ m} vd FC4}


 S20713C2 ::~S20713C2(){ note_dtor("S20713C2", this);}
S20713C2 ::S20713C2(){ note_ctor("S20713C2", this);} // tgen

static void Test_S20713C2()
{
  extern Class_Descriptor cd_S20713C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20713C2, buf);
    S20713C2 *dp, &lv = *(dp=new (buf) S20713C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20713C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20713C2)");
    check_base_class_offset(lv, (S2265C38*), 0, "S20713C2");
    check_base_class_offset(lv, (S2265C28*)(S20713C5_nt*), 0, "S20713C2");
    check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*), 0, "S20713C2");
    check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*), ABISELECT(16,8), "S20713C2");
    check_base_class_offset(lv, (S20713C4*), 0, "S20713C2");
    check_base_class_offset(lv, (S2265C28*)(S20713C9_nt*)(S20713C8*), ABISELECT(24,12), "S20713C2");
    check_base_class_offset(lv, (S20713C9_nt*)(S20713C8*), ABISELECT(24,12), "S20713C2");
    check_base_class_offset(lv, (S20713C8*), ABISELECT(24,12), "S20713C2");
    check_base_class_offset(lv, (S2265C24*), 0, "S20713C2");
    check_field_offset(lv, s20713c2f0, ABISELECT(8,4), "S20713C2.s20713c2f0");
    test_class_info(&lv, &cd_S20713C2);
    dp->~S20713C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20713C2(Test_S20713C2, "S20713C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20713C2C1Ev();
extern void _ZN8S20713C2D2Ev();
Name_Map name_map_S20713C2[] = {
  NSPAIR(_ZN8S20713C2C1Ev),
  NSPAIR(_ZN8S20713C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C5_nt;
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
extern  VTBL_ENTRY _ZTV11S20713C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20713C5_nt[];
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C9_nt;
extern VTBL_ENTRY _ZTI11S20713C9_nt[];
extern Class_Descriptor cd_S20713C8;
extern VTBL_ENTRY _ZTI8S20713C8[];
extern Class_Descriptor cd_S2265C24;
extern VTBL_ENTRY _ZTI8S2265C24[];
static Base_Class bases_S20713C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20713C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1933C4_nt,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20713C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20713C9_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20713C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20713C2[];
extern void _ZN8S20713C2D1Ev();
extern void _ZN8S20713C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20713C2D1Ev,_ZTv0_n12_N8S20713C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20713C2D1Ev,_ZThn8_N8S20713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C2D0Ev,_ZTv0_n12_N8S20713C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20713C2D0Ev,_ZThn8_N8S20713C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20713C2[] = {
  0,
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C2[0]),
  (VTBL_ENTRY)&_ZN8S20713C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20713C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C2D1Ev,_ZTv0_n12_N8S20713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C2D0Ev,_ZTv0_n12_N8S20713C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20713C2[];
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C4__8S20713C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20713C4D1Ev,_ZThn8_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20713C4D0Ev,_ZThn8_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C4__8S20713C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__8S20713C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20713C5_nt[0]),
};
static  VTT_ENTRY vtt_S20713C2[] = {
  {&(_ZTV8S20713C2[8]),  8,15},
  {&(_tg__ZTV8S20713C4__8S20713C2[5]),  5,7},
  {&(_tg__ZTV8S20713C4__8S20713C2[5]),  5,7},
  {&(_tg__ZTV10S1933C4_nt__8S20713C4__8S20713C2[3]),  3,5},
  {&(_ZTV8S20713C2[8]),  8,15},
  {&(_ZTV8S20713C2[13]),  13,15},
  {&(_tg__ZTV11S20713C5_nt__8S20713C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20713C2[];
extern  VTBL_ENTRY _ZTV8S20713C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C2[];
static VTBL_ENTRY alt_thunk_names159[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C4D0Ev,_ZThn8_N8S20713C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C4D1Ev,_ZThn8_N8S20713C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C2D0Ev,_ZTv0_n12_N8S20713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C2D0Ev,_ZThn8_N8S20713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C2D1Ev,_ZTv0_n12_N8S20713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C2D1Ev,_ZThn8_N8S20713C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20713C2 = {  "S20713C2", // class name
  bases_S20713C2, 9,
  &(vtc_S20713C2[0]), // expected_vtbl_contents
  &(vtt_S20713C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20713C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20713C2),15, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20713C2),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names159,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C13  : S20713C4 {
  ~S20713C13(); // tgen
  S20713C13(); // tgen
};
//SIG(-1 S20713C13) C1{ BC2{ VBC3{ VBC4{ m}} VBC5{ vd m} vd}}


S20713C13 ::~S20713C13(){ note_dtor("S20713C13", this);} // tgen
S20713C13 ::S20713C13(){ note_ctor("S20713C13", this);} // tgen

static void Test_S20713C13()
{
  extern Class_Descriptor cd_S20713C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20713C13, buf);
    S20713C13 *dp, &lv = *(dp=new (buf) S20713C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20713C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20713C13)");
    check_base_class_offset(lv, (S2265C28*)(S20713C5_nt*), 0, "S20713C13");
    check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*), 0, "S20713C13");
    check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*), ABISELECT(8,4), "S20713C13");
    check_base_class_offset(lv, (S20713C4*), 0, "S20713C13");
    test_class_info(&lv, &cd_S20713C13);
    dp->~S20713C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20713C13(Test_S20713C13, "S20713C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20713C13C1Ev();
extern void _ZN9S20713C13D1Ev();
Name_Map name_map_S20713C13[] = {
  NSPAIR(_ZN9S20713C13C1Ev),
  NSPAIR(_ZN9S20713C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C5_nt;
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
extern  VTBL_ENTRY _ZTV11S20713C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20713C5_nt[];
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
static Base_Class bases_S20713C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20713C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1933C4_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20713C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20713C13[];
extern void _ZN9S20713C13D1Ev();
extern void _ZN9S20713C13D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S20713C13D1Ev,_ZThn4_N9S20713C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S20713C13D0Ev,_ZThn4_N9S20713C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20713C13[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
  (VTBL_ENTRY)&_ZN9S20713C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20713C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20713C13[];
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C4__9S20713C13[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20713C4D1Ev,_ZThn4_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn8_N8S20713C4D0Ev,_ZThn4_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C4__9S20713C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__9S20713C13[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20713C5_nt[0]),
};
static  VTT_ENTRY vtt_S20713C13[] = {
  {&(_ZTV9S20713C13[5]),  5,12},
  {&(_tg__ZTV8S20713C4__9S20713C13[5]),  5,7},
  {&(_tg__ZTV8S20713C4__9S20713C13[5]),  5,7},
  {&(_tg__ZTV10S1933C4_nt__8S20713C4__9S20713C13[3]),  3,5},
  {&(_ZTV9S20713C13[5]),  5,12},
  {&(_ZTV9S20713C13[10]),  10,12},
  {&(_tg__ZTV11S20713C5_nt__9S20713C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20713C13[];
extern  VTBL_ENTRY _ZTV9S20713C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20713C13[];
static VTBL_ENTRY alt_thunk_names160[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20713C4D0Ev,_ZThn4_N8S20713C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20713C4D1Ev,_ZThn4_N8S20713C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20713C13D0Ev,_ZThn4_N9S20713C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20713C13D1Ev,_ZThn4_N9S20713C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20713C13 = {  "S20713C13", // class name
  bases_S20713C13, 4,
  &(vtc_S20713C13[0]), // expected_vtbl_contents
  &(vtt_S20713C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20713C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20713C13),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20713C13),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names160,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C11  : virtual S1933C4_nt , S20713C4 , S2265C21 , virtual S20713C8 , S20713C13 {
  int s20713c11f0;
  ~S20713C11(); // tgen
  S20713C11(); // tgen
};
//SIG(-1 S20713C11) C1{ VBC2{ vd m} BC3{ VBC4{ VBC5{ m}} VBC2 vd} BC6{ m} VBC7{ BC8{ BC5}} BC9{ BC3} Fi}


S20713C11 ::~S20713C11(){ note_dtor("S20713C11", this);} // tgen
S20713C11 ::S20713C11(){ note_ctor("S20713C11", this);} // tgen

static void Test_S20713C11()
{
  extern Class_Descriptor cd_S20713C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20713C11, buf);
    S20713C11 *dp, &lv = *(dp=new (buf) S20713C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20713C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20713C11)");
    check_base_class_offset(lv, (S1933C4_nt*), ABISELECT(24,12), "S20713C11");
    /*is_ambiguous_... S20713C11::S20713C4 */ AMB_check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*), ABISELECT(24,12), "S20713C11");
    check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*)(S20713C13*), ABISELECT(24,12), "S20713C11");
    check_base_class_offset(lv, (S2265C28*)(S20713C5_nt*), 0, "S20713C11");
    /*is_ambiguous_... S20713C11::S20713C4 */ AMB_check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*), 0, "S20713C11");
    check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*)(S20713C13*), 0, "S20713C11");
    /*is_ambiguous_... S20713C11::S20713C4 */ AMB_check_base_class_offset(lv, (S20713C4*), 0, "S20713C11");
    check_base_class_offset(lv, (S2265C21*), 0, "S20713C11");
    check_base_class_offset(lv, (S2265C28*)(S20713C9_nt*)(S20713C8*), ABISELECT(32,16), "S20713C11");
    check_base_class_offset(lv, (S20713C9_nt*)(S20713C8*), ABISELECT(32,16), "S20713C11");
    check_base_class_offset(lv, (S20713C8*), ABISELECT(32,16), "S20713C11");
    check_base_class_offset(lv, (S20713C4*)(S20713C13*), ABISELECT(8,4), "S20713C11");
    check_base_class_offset(lv, (S20713C13*), ABISELECT(8,4), "S20713C11");
    check_field_offset(lv, s20713c11f0, ABISELECT(16,8), "S20713C11.s20713c11f0");
    test_class_info(&lv, &cd_S20713C11);
    dp->~S20713C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20713C11(Test_S20713C11, "S20713C11", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20713C11C1Ev();
extern void _ZN9S20713C11D1Ev();
Name_Map name_map_S20713C11[] = {
  NSPAIR(_ZN9S20713C11C1Ev),
  NSPAIR(_ZN9S20713C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C5_nt;
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
extern  VTBL_ENTRY _ZTV11S20713C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20713C5_nt[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
extern Class_Descriptor cd_S2265C21;
extern VTBL_ENTRY _ZTI8S2265C21[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C9_nt;
extern VTBL_ENTRY _ZTI11S20713C9_nt[];
extern Class_Descriptor cd_S20713C8;
extern VTBL_ENTRY _ZTI8S20713C8[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
extern Class_Descriptor cd_S20713C13;
extern VTBL_ENTRY _ZTI9S20713C13[];
extern  VTBL_ENTRY _ZTV9S20713C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20713C13[];
static Base_Class bases_S20713C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20713C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20713C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20713C9_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20713C8,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20713C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20713C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20713C11[];
extern void _ZN9S20713C11D1Ev();
extern void _ZN9S20713C11D0Ev();
extern void ABISELECT(_ZThn8_N9S20713C11D1Ev,_ZThn4_N9S20713C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20713C11D0Ev,_ZThn4_N9S20713C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20713C11D1Ev,_ZTv0_n12_N9S20713C11D1Ev)();
extern void ABISELECT(_ZThn24_N9S20713C11D1Ev,_ZThn12_N9S20713C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20713C11D0Ev,_ZTv0_n12_N9S20713C11D0Ev)();
extern void ABISELECT(_ZThn24_N9S20713C11D0Ev,_ZThn12_N9S20713C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20713C11[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
  (VTBL_ENTRY)&_ZN9S20713C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20713C11D0Ev,
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S20713C11D1Ev,_ZThn4_N9S20713C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S20713C11D0Ev,_ZThn4_N9S20713C11D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C11D1Ev,_ZTv0_n12_N9S20713C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C11D0Ev,_ZTv0_n12_N9S20713C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S20713C11[];
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C4__9S20713C11[] = {
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S20713C4D1Ev,_ZThn12_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S20713C4D0Ev,_ZThn12_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C4__9S20713C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
extern void _ZN9S20713C13D1Ev();
extern void _ZN9S20713C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20713C13__9S20713C11[] = {
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
  (VTBL_ENTRY)&_ZN9S20713C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20713C13D0Ev,
};
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C49S20713C13__A1__9S20713C11[] = {
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__8S20713C49S20713C13__A1__9S20713C11[] = {
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20713C4D1Ev,_ZThn8_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20713C4D0Ev,_ZThn8_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C49S20713C13__A1__9S20713C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__9S20713C13__9S20713C11[] = {
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S20713C13D1Ev,_ZThn8_N9S20713C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev)();
extern void ABISELECT(_ZThn16_N9S20713C13D0Ev,_ZThn8_N9S20713C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__9S20713C13__9S20713C11[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__9S20713C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20713C5_nt[0]),
};
static  VTT_ENTRY vtt_S20713C11[] = {
  {&(_ZTV9S20713C11[6]),  6,20},
  {&(_tg__ZTV8S20713C4__9S20713C11[5]),  5,7},
  {&(_tg__ZTV8S20713C4__9S20713C11[5]),  5,7},
  {&(_tg__ZTV10S1933C4_nt__8S20713C4__9S20713C11[3]),  3,5},
  {&(_tg__ZTV9S20713C13__9S20713C11[5]),  5,7},
  {&(_tg__ZTV8S20713C49S20713C13__A1__9S20713C11[5]),  5,7},
  {&(_tg__ZTV11S20713C5_nt__8S20713C49S20713C13__A1__9S20713C11[3]),  3,3},
  {&(_tg__ZTV10S1933C4_nt__8S20713C49S20713C13__A1__9S20713C11[3]),  3,5},
  {&(_tg__ZTV11S20713C5_nt__9S20713C13__9S20713C11[3]),  3,3},
  {&(_tg__ZTV10S1933C4_nt__9S20713C13__9S20713C11[3]),  3,5},
  {&(_ZTV9S20713C11[18]),  18,20},
  {&(_ZTV9S20713C11[6]),  6,20},
  {&(_ZTV9S20713C11[13]),  13,20},
  {&(_tg__ZTV11S20713C5_nt__9S20713C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20713C11[];
extern  VTBL_ENTRY _ZTV9S20713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20713C11[];
static VTBL_ENTRY alt_thunk_names161[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20713C13D0Ev,_ZThn8_N9S20713C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20713C13D1Ev,_ZThn8_N9S20713C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C4D0Ev,_ZThn8_N8S20713C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20713C4D0Ev,_ZThn12_N8S20713C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C4D1Ev,_ZThn8_N8S20713C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20713C4D1Ev,_ZThn12_N8S20713C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C11D0Ev,_ZTv0_n12_N9S20713C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20713C11D0Ev,_ZThn12_N9S20713C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C11D1Ev,_ZTv0_n12_N9S20713C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20713C11D1Ev,_ZThn12_N9S20713C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20713C11 = {  "S20713C11", // class name
  bases_S20713C11, 10,
  &(vtc_S20713C11[0]), // expected_vtbl_contents
  &(vtt_S20713C11[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20713C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20713C11),20, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20713C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names161,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20713C1  : virtual S20713C2 , S20713C11 {
  char s20713c1f0:8;
  virtual  ~S20713C1(); // _ZN8S20713C1D2Ev
  S20713C1(); // tgen
};
//SIG(1 S20713C1) C1{ VBC2{ VBC3{ m} BC4{ VBC5{ VBC6{ m}} VBC7{ vd m} vd} VBC8{ BC9{ BC6}} VBC10{ m} vd FC5} BC11{ VBC7 BC4 BC12{ m} VBC8 BC13{ BC4} Fi} vd Fc:8}


 S20713C1 ::~S20713C1(){ note_dtor("S20713C1", this);}
S20713C1 ::S20713C1(){ note_ctor("S20713C1", this);} // tgen

static void Test_S20713C1()
{
  extern Class_Descriptor cd_S20713C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20713C1, buf);
    S20713C1 *dp, &lv = *(dp=new (buf) S20713C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20713C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20713C1)");
    check_base_class_offset(lv, (S2265C38*)(S20713C2*), 0, "S20713C1");
    check_base_class_offset(lv, (S2265C28*)(S20713C5_nt*), 0, "S20713C1");
    check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*)(S20713C2*), ABISELECT(24,16), "S20713C1");
    /*is_ambiguous_... S20713C11::S20713C4 */ AMB_check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*)(S20713C11*), ABISELECT(24,16), "S20713C1");
    check_base_class_offset(lv, (S20713C5_nt*)(S20713C4*)(S20713C13*)(S20713C11*), ABISELECT(24,16), "S20713C1");
    check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*)(S20713C2*), ABISELECT(40,24), "S20713C1");
    check_base_class_offset(lv, (S1933C4_nt*)(S20713C11*), ABISELECT(40,24), "S20713C1");
    /*is_ambiguous_... S20713C11::S20713C4 */ AMB_check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*)(S20713C11*), ABISELECT(40,24), "S20713C1");
    check_base_class_offset(lv, (S1933C4_nt*)(S20713C4*)(S20713C13*)(S20713C11*), ABISELECT(40,24), "S20713C1");
    check_base_class_offset(lv, (S20713C4*)(S20713C2*), ABISELECT(24,16), "S20713C1");
    check_base_class_offset(lv, (S2265C28*)(S20713C9_nt*)(S20713C8*), ABISELECT(48,28), "S20713C1");
    check_base_class_offset(lv, (S20713C9_nt*)(S20713C8*), ABISELECT(48,28), "S20713C1");
    check_base_class_offset(lv, (S20713C8*)(S20713C2*), ABISELECT(48,28), "S20713C1");
    check_base_class_offset(lv, (S20713C8*)(S20713C11*), ABISELECT(48,28), "S20713C1");
    check_base_class_offset(lv, (S2265C24*)(S20713C2*), 0, "S20713C1");
    check_base_class_offset(lv, (S20713C2*), ABISELECT(24,16), "S20713C1");
    /*is_ambiguous_... S20713C11::S20713C4 */ AMB_check_base_class_offset(lv, (S20713C4*)(S20713C11*), 0, "S20713C1");
    check_base_class_offset(lv, (S2265C21*)(S20713C11*), 0, "S20713C1");
    check_base_class_offset(lv, (S20713C4*)(S20713C13*)(S20713C11*), ABISELECT(8,4), "S20713C1");
    check_base_class_offset(lv, (S20713C13*)(S20713C11*), ABISELECT(8,4), "S20713C1");
    check_base_class_offset(lv, (S20713C11*), 0, "S20713C1");
    set_bf_and_test(lv, s20713c1f0, ABISELECT(20,12), 0, 8, 1, "S20713C1");
    set_bf_and_test(lv, s20713c1f0, ABISELECT(20,12), 0, 8, hide_sll(1LL<<7), "S20713C1");
    test_class_info(&lv, &cd_S20713C1);
    dp->~S20713C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20713C1(Test_S20713C1, "S20713C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20713C1C1Ev();
extern void _ZN8S20713C1D2Ev();
Name_Map name_map_S20713C1[] = {
  NSPAIR(_ZN8S20713C1C1Ev),
  NSPAIR(_ZN8S20713C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C5_nt;
extern VTBL_ENTRY _ZTI11S20713C5_nt[];
extern  VTBL_ENTRY _ZTV11S20713C5_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20713C5_nt[];
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S20713C9_nt;
extern VTBL_ENTRY _ZTI11S20713C9_nt[];
extern Class_Descriptor cd_S20713C8;
extern VTBL_ENTRY _ZTI8S20713C8[];
extern Class_Descriptor cd_S2265C24;
extern VTBL_ENTRY _ZTI8S2265C24[];
extern Class_Descriptor cd_S20713C2;
extern VTBL_ENTRY _ZTI8S20713C2[];
extern  VTBL_ENTRY _ZTV8S20713C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C2[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
extern Class_Descriptor cd_S2265C21;
extern VTBL_ENTRY _ZTI8S2265C21[];
extern Class_Descriptor cd_S20713C4;
extern VTBL_ENTRY _ZTI8S20713C4[];
extern  VTBL_ENTRY _ZTV8S20713C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C4[];
extern Class_Descriptor cd_S20713C13;
extern VTBL_ENTRY _ZTI9S20713C13[];
extern  VTBL_ENTRY _ZTV9S20713C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20713C13[];
extern Class_Descriptor cd_S20713C11;
extern VTBL_ENTRY _ZTI9S20713C11[];
extern  VTBL_ENTRY _ZTV9S20713C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20713C11[];
static Base_Class bases_S20713C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20713C5_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S1933C4_nt,    ABISELECT(40,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20713C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2265C28,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20713C9_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20713C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2265C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20713C2,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20713C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2265C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20713C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20713C13,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20713C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20713C1[];
extern void _ZN8S20713C1D1Ev();
extern void _ZN8S20713C1D0Ev();
extern void ABISELECT(_ZThn8_N8S20713C1D1Ev,_ZThn4_N8S20713C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20713C1D0Ev,_ZThn4_N8S20713C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S20713C1D1Ev,_ZTv0_n36_N8S20713C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S20713C1D1Ev,_ZThn16_N8S20713C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20713C1D0Ev,_ZTv0_n36_N8S20713C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S20713C1D0Ev,_ZThn16_N8S20713C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C1D1Ev,_ZTv0_n12_N8S20713C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20713C1D1Ev,_ZThn24_N8S20713C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C1D0Ev,_ZTv0_n12_N8S20713C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20713C1D0Ev,_ZThn24_N8S20713C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20713C1[] = {
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C1[0]),
  (VTBL_ENTRY)&_ZN8S20713C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C1D0Ev,
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20713C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20713C1D1Ev,_ZThn4_N8S20713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20713C1D0Ev,_ZThn4_N8S20713C1D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(16,8),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20713C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20713C1D1Ev,_ZTv0_n36_N8S20713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20713C1D0Ev,_ZTv0_n36_N8S20713C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20713C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C1D1Ev,_ZTv0_n12_N8S20713C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C1D0Ev,_ZTv0_n12_N8S20713C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20713C1[];
extern void _ZN9S20713C11D1Ev();
extern void _ZN9S20713C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20713C11__8S20713C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
  (VTBL_ENTRY)&_ZN9S20713C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20713C11D0Ev,
};
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C49S20713C11__A1__8S20713C1[] = {
  ABISELECT(40,24),
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__8S20713C49S20713C11__A1__8S20713C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S20713C4D1Ev,_ZThn24_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S20713C4D0Ev,_ZThn24_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C49S20713C11__A1__8S20713C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
extern void _ZN9S20713C13D1Ev();
extern void _ZN9S20713C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20713C139S20713C11__8S20713C1[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
  (VTBL_ENTRY)&_ZN9S20713C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20713C13D0Ev,
};
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C49S20713C139S20713C11__A2__8S20713C1[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__8S20713C49S20713C139S20713C11__A2__8S20713C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20713C4D1Ev,_ZThn20_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20713C4D0Ev,_ZThn20_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C49S20713C139S20713C11__A2__8S20713C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__9S20713C139S20713C11__8S20713C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S20713C13D1Ev,_ZThn20_N9S20713C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S20713C13D0Ev,_ZThn20_N9S20713C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__9S20713C139S20713C11__8S20713C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20713C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20713C11D1Ev,_ZTv0_n12_N9S20713C11D1Ev)();
extern void ABISELECT(_ZThn40_N9S20713C11D1Ev,_ZThn24_N9S20713C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20713C11D0Ev,_ZTv0_n12_N9S20713C11D0Ev)();
extern void ABISELECT(_ZThn40_N9S20713C11D0Ev,_ZThn24_N9S20713C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__9S20713C11__8S20713C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C11D1Ev,_ZTv0_n12_N9S20713C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20713C11D0Ev,_ZTv0_n12_N9S20713C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__9S20713C11__8S20713C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
};
extern void ABISELECT(_ZThn8_N9S20713C11D1Ev,_ZThn4_N9S20713C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20713C11D0Ev,_ZThn4_N9S20713C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20713C13__9S20713C11__8S20713C1[] = {
  ABISELECT(32,20),
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20713C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S20713C11D1Ev,_ZThn4_N9S20713C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S20713C11D0Ev,_ZThn4_N9S20713C11D0Ev),
};
extern void _ZN8S20713C2D1Ev();
extern void _ZN8S20713C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C2__8S20713C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(24,12),
  ABISELECT(-24,-16),
  ABISELECT(16,8),
  0,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C2[0]),
  (VTBL_ENTRY)&_ZN8S20713C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C2D0Ev,
};
extern void _ZN8S20713C4D1Ev();
extern void _ZN8S20713C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20713C48S20713C2__8S20713C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&_ZN8S20713C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20713C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S20713C4D1Ev,_ZThn8_N8S20713C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S20713C4D0Ev,_ZThn8_N8S20713C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C48S20713C2__8S20713C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20713C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20713C2D1Ev,_ZTv0_n12_N8S20713C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20713C2D1Ev,_ZThn8_N8S20713C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20713C2D0Ev,_ZTv0_n12_N8S20713C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20713C2D0Ev,_ZThn8_N8S20713C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S20713C2__8S20713C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20713C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C2D1Ev,_ZTv0_n12_N8S20713C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20713C2D0Ev,_ZTv0_n12_N8S20713C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20713C5_nt__8S20713C1[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20713C5_nt[0]),
};
static  VTT_ENTRY vtt_S20713C1[] = {
  {&(_ZTV8S20713C1[9]),  9,34},
  {&(_tg__ZTV9S20713C11__8S20713C1[6]),  6,8},
  {&(_tg__ZTV8S20713C49S20713C11__A1__8S20713C1[5]),  5,7},
  {&(_tg__ZTV11S20713C5_nt__8S20713C49S20713C11__A1__8S20713C1[3]),  3,3},
  {&(_tg__ZTV10S1933C4_nt__8S20713C49S20713C11__A1__8S20713C1[3]),  3,5},
  {&(_tg__ZTV9S20713C139S20713C11__8S20713C1[5]),  5,7},
  {&(_tg__ZTV8S20713C49S20713C139S20713C11__A2__8S20713C1[5]),  5,7},
  {&(_tg__ZTV11S20713C5_nt__8S20713C49S20713C139S20713C11__A2__8S20713C1[3]),  3,3},
  {&(_tg__ZTV10S1933C4_nt__8S20713C49S20713C139S20713C11__A2__8S20713C1[3]),  3,5},
  {&(_tg__ZTV11S20713C5_nt__9S20713C139S20713C11__8S20713C1[3]),  3,3},
  {&(_tg__ZTV10S1933C4_nt__9S20713C139S20713C11__8S20713C1[3]),  3,5},
  {&(_tg__ZTV10S1933C4_nt__9S20713C11__8S20713C1[3]),  3,5},
  {&(_tg__ZTV11S20713C5_nt__9S20713C11__8S20713C1[3]),  3,3},
  {&(_tg__ZTV9S20713C13__9S20713C11__8S20713C1[5]),  5,7},
  {&(_ZTV8S20713C1[27]),  27,34},
  {&(_ZTV8S20713C1[27]),  27,34},
  {&(_ZTV8S20713C1[32]),  32,34},
  {&(_ZTV8S20713C1[16]),  16,34},
  {&(_tg__ZTV8S20713C2__8S20713C1[8]),  8,10},
  {&(_tg__ZTV8S20713C48S20713C2__8S20713C1[5]),  5,7},
  {&(_tg__ZTV8S20713C48S20713C2__8S20713C1[5]),  5,7},
  {&(_tg__ZTV10S1933C4_nt__8S20713C48S20713C2__8S20713C1[3]),  3,5},
  {&(_tg__ZTV8S20713C2__8S20713C1[8]),  8,10},
  {&(_tg__ZTV10S1933C4_nt__8S20713C2__8S20713C1[3]),  3,5},
  {&(_tg__ZTV11S20713C5_nt__8S20713C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20713C1[];
extern  VTBL_ENTRY _ZTV8S20713C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20713C1[];
static VTBL_ENTRY alt_thunk_names162[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C2D0Ev,_ZTv0_n12_N8S20713C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C2D0Ev,_ZThn8_N8S20713C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C2D1Ev,_ZTv0_n12_N8S20713C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C2D1Ev,_ZThn8_N8S20713C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C11D0Ev,_ZTv0_n12_N9S20713C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20713C11D0Ev,_ZThn24_N9S20713C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C11D1Ev,_ZTv0_n12_N9S20713C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20713C11D1Ev,_ZThn24_N9S20713C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C13D0Ev,_ZTv0_n12_N9S20713C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20713C13D0Ev,_ZThn20_N9S20713C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20713C13D1Ev,_ZTv0_n12_N9S20713C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20713C13D1Ev,_ZThn20_N9S20713C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D0Ev,_ZTv0_n12_N8S20713C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C4D0Ev,_ZThn8_N8S20713C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20713C4D0Ev,_ZThn20_N8S20713C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20713C4D0Ev,_ZThn24_N8S20713C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C4D1Ev,_ZTv0_n12_N8S20713C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20713C4D1Ev,_ZThn8_N8S20713C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20713C4D1Ev,_ZThn20_N8S20713C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20713C4D1Ev,_ZThn24_N8S20713C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C1D0Ev,_ZTv0_n12_N8S20713C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20713C1D0Ev,_ZThn24_N8S20713C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20713C1D1Ev,_ZTv0_n12_N8S20713C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20713C1D1Ev,_ZThn24_N8S20713C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20713C1D0Ev,_ZTv0_n36_N8S20713C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20713C1D0Ev,_ZThn16_N8S20713C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20713C1D1Ev,_ZTv0_n36_N8S20713C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20713C1D1Ev,_ZThn16_N8S20713C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20713C1 = {  "S20713C1", // class name
  bases_S20713C1, 15,
  &(vtc_S20713C1[0]), // expected_vtbl_contents
  &(vtt_S20713C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20713C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20713C1),34, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20713C1),25, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names162,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C4  : virtual S19859C6 {
  ~S3568C4(); // tgen
  S3568C4(); // tgen
};
//SIG(-1 S3568C4) C1{ VBC2{ vd m Fs}}


S3568C4 ::~S3568C4(){ note_dtor("S3568C4", this);} // tgen
S3568C4 ::S3568C4(){ note_ctor("S3568C4", this);} // tgen

static void Test_S3568C4()
{
  extern Class_Descriptor cd_S3568C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3568C4, buf);
    S3568C4 *dp, &lv = *(dp=new (buf) S3568C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3568C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C4)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S3568C4");
    test_class_info(&lv, &cd_S3568C4);
    dp->~S3568C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C4(Test_S3568C4, "S3568C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3568C4C1Ev();
extern void _ZN7S3568C4D1Ev();
Name_Map name_map_S3568C4[] = {
  NSPAIR(_ZN7S3568C4C1Ev),
  NSPAIR(_ZN7S3568C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S3568C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C4[];
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C4D1Ev,_ZThn4_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C4D0Ev,_ZThn4_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C4[];
static  VTT_ENTRY vtt_S3568C4[] = {
  {&(_ZTV7S3568C4[3]),  3,10},
  {&(_ZTV7S3568C4[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
static VTBL_ENTRY alt_thunk_names163[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C4D0Ev,_ZThn4_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C4D1Ev,_ZThn4_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C4 = {  "S3568C4", // class name
  bases_S3568C4, 1,
  &(vtc_S3568C4[0]), // expected_vtbl_contents
  &(vtt_S3568C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3568C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3568C4),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names163,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C3  : virtual S3568C4 {
  virtual  ~S3568C3(); // _ZN7S3568C3D2Ev
  S3568C3(); // tgen
};
//SIG(-1 S3568C3) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S3568C3 ::~S3568C3(){ note_dtor("S3568C3", this);}
S3568C3 ::S3568C3(){ note_ctor("S3568C3", this);} // tgen

static void Test_S3568C3()
{
  extern Class_Descriptor cd_S3568C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3568C3, buf);
    S3568C3 *dp, &lv = *(dp=new (buf) S3568C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3568C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C3)");
    check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(8,4), "S3568C3");
    check_base_class_offset(lv, (S3568C4*), 0, "S3568C3");
    test_class_info(&lv, &cd_S3568C3);
    dp->~S3568C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C3(Test_S3568C3, "S3568C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3568C3C1Ev();
extern void _ZN7S3568C3D2Ev();
Name_Map name_map_S3568C3[] = {
  NSPAIR(_ZN7S3568C3C1Ev),
  NSPAIR(_ZN7S3568C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
static Base_Class bases_S3568C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C3[];
extern void _ZN7S3568C3D1Ev();
extern void _ZN7S3568C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C3D1Ev,_ZThn4_N7S3568C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C3D0Ev,_ZThn4_N7S3568C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C3[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C3[0]),
  (VTBL_ENTRY)&_ZN7S3568C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C3D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C3[];
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__7S3568C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C4D1Ev,_ZThn4_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C4D0Ev,_ZThn4_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__7S3568C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
static  VTT_ENTRY vtt_S3568C3[] = {
  {&(_ZTV7S3568C3[5]),  5,12},
  {&(_ZTV7S3568C3[5]),  5,12},
  {&(_ZTV7S3568C3[10]),  10,12},
  {&(_tg__ZTV7S3568C4__7S3568C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__7S3568C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3568C3[];
extern  VTBL_ENTRY _ZTV7S3568C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C3[];
static VTBL_ENTRY alt_thunk_names164[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C4D0Ev,_ZThn4_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C4D1Ev,_ZThn4_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C3D0Ev,_ZThn4_N7S3568C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C3D1Ev,_ZThn4_N7S3568C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C3 = {  "S3568C3", // class name
  bases_S3568C3, 2,
  &(vtc_S3568C3[0]), // expected_vtbl_contents
  &(vtt_S3568C3[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3568C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3568C3),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names164,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C8  : virtual S19859C6 {
  virtual  ~S3568C8(); // _ZN7S3568C8D2Ev
  S3568C8(); // tgen
};
//SIG(-1 S3568C8) C1{ VBC2{ vd m Fs} vd}


 S3568C8 ::~S3568C8(){ note_dtor("S3568C8", this);}
S3568C8 ::S3568C8(){ note_ctor("S3568C8", this);} // tgen

static void Test_S3568C8()
{
  extern Class_Descriptor cd_S3568C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3568C8, buf);
    S3568C8 *dp, &lv = *(dp=new (buf) S3568C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3568C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C8)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S3568C8");
    test_class_info(&lv, &cd_S3568C8);
    dp->~S3568C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C8(Test_S3568C8, "S3568C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3568C8C1Ev();
extern void _ZN7S3568C8D2Ev();
Name_Map name_map_S3568C8[] = {
  NSPAIR(_ZN7S3568C8C1Ev),
  NSPAIR(_ZN7S3568C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S3568C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C8[];
extern void _ZN7S3568C8D1Ev();
extern void _ZN7S3568C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C8D1Ev,_ZThn4_N7S3568C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C8D0Ev,_ZThn4_N7S3568C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&_ZN7S3568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C8D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C8[];
static  VTT_ENTRY vtt_S3568C8[] = {
  {&(_ZTV7S3568C8[3]),  3,10},
  {&(_ZTV7S3568C8[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S3568C8[];
extern  VTBL_ENTRY _ZTV7S3568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C8[];
static VTBL_ENTRY alt_thunk_names165[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C8D0Ev,_ZThn4_N7S3568C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C8D1Ev,_ZThn4_N7S3568C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C8 = {  "S3568C8", // class name
  bases_S3568C8, 1,
  &(vtc_S3568C8[0]), // expected_vtbl_contents
  &(vtt_S3568C8[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3568C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3568C8),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names165,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C9  : virtual S19859C6 , virtual S3568C8 , S3568C4 {
  int s3568c9f0;
  virtual  ~S3568C9(); // _ZN7S3568C9D2Ev
  S3568C9(); // tgen
};
//SIG(-1 S3568C9) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S3568C9 ::~S3568C9(){ note_dtor("S3568C9", this);}
S3568C9 ::S3568C9(){ note_ctor("S3568C9", this);} // tgen

static void Test_S3568C9()
{
  extern Class_Descriptor cd_S3568C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3568C9, buf);
    S3568C9 *dp, &lv = *(dp=new (buf) S3568C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3568C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C9)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S3568C9");
    check_base_class_offset(lv, (S19859C6*)(S3568C8*), ABISELECT(16,8), "S3568C9");
    check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(16,8), "S3568C9");
    check_base_class_offset(lv, (S3568C8*), ABISELECT(32,16), "S3568C9");
    check_base_class_offset(lv, (S3568C4*), 0, "S3568C9");
    check_field_offset(lv, s3568c9f0, ABISELECT(8,4), "S3568C9.s3568c9f0");
    test_class_info(&lv, &cd_S3568C9);
    dp->~S3568C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C9(Test_S3568C9, "S3568C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3568C9C1Ev();
extern void _ZN7S3568C9D2Ev();
Name_Map name_map_S3568C9[] = {
  NSPAIR(_ZN7S3568C9C1Ev),
  NSPAIR(_ZN7S3568C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C8;
extern VTBL_ENTRY _ZTI7S3568C8[];
extern  VTBL_ENTRY _ZTV7S3568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C8[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
static Base_Class bases_S3568C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3568C8,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C9[];
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn8_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn8_N7S3568C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C9[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C9[];
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__7S3568C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C4D1Ev,_ZThn8_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S3568C4D0Ev,_ZThn8_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__7S3568C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void _ZN7S3568C8D1Ev();
extern void _ZN7S3568C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&_ZN7S3568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C8__7S3568C9[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev),
};
static  VTT_ENTRY vtt_S3568C9[] = {
  {&(_ZTV7S3568C9[4]),  4,17},
  {&(_tg__ZTV7S3568C4__7S3568C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__7S3568C9[3]),  3,5},
  {&(_ZTV7S3568C9[9]),  9,17},
  {&(_ZTV7S3568C9[15]),  15,17},
  {&(_tg__ZTV7S3568C8__7S3568C9[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C8__7S3568C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
static VTBL_ENTRY alt_thunk_names166[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C4D0Ev,_ZThn8_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C4D1Ev,_ZThn8_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn8_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn8_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C9 = {  "S3568C9", // class name
  bases_S3568C9, 3,
  &(vtc_S3568C9[0]), // expected_vtbl_contents
  &(vtt_S3568C9[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3568C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3568C9),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C9),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names166,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C7  : S19859C6 , virtual S3568C8 , S3568C9 , virtual S3568C4 {
  int s3568c7f0;
  virtual  ~S3568C7(); // _ZN7S3568C7D2Ev
  S3568C7(); // tgen
};
//SIG(-1 S3568C7) C1{ BC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2 VBC3 BC5{ VBC2} vd Fi} VBC5 vd Fi}


 S3568C7 ::~S3568C7(){ note_dtor("S3568C7", this);}
S3568C7 ::S3568C7(){ note_ctor("S3568C7", this);} // tgen

static void Test_S3568C7()
{
  extern Class_Descriptor cd_S3568C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S3568C7, buf);
    S3568C7 *dp, &lv = *(dp=new (buf) S3568C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S3568C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C7)");
    /*is_ambiguous_... S3568C7::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), 0, "S3568C7");
    check_base_class_offset(lv, (S19859C6*)(S3568C8*), ABISELECT(40,24), "S3568C7");
    check_base_class_offset(lv, (S19859C6*)(S3568C9*), ABISELECT(40,24), "S3568C7");
    check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*), ABISELECT(40,24), "S3568C7");
    /*is_ambiguous_... S3568C7::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(40,24), "S3568C7");
    check_base_class_offset(lv, (S3568C8*), ABISELECT(32,20), "S3568C7");
    check_base_class_offset(lv, (S3568C8*)(S3568C9*), ABISELECT(32,20), "S3568C7");
    check_base_class_offset(lv, (S3568C4*)(S3568C9*), ABISELECT(16,8), "S3568C7");
    check_base_class_offset(lv, (S3568C9*), ABISELECT(16,8), "S3568C7");
    /*is_ambiguous_... S3568C7::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*), ABISELECT(56,32), "S3568C7");
    check_field_offset(lv, s3568c7f0, ABISELECT(28,16), "S3568C7.s3568c7f0");
    test_class_info(&lv, &cd_S3568C7);
    dp->~S3568C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C7(Test_S3568C7, "S3568C7", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S3568C7C1Ev();
extern void _ZN7S3568C7D2Ev();
Name_Map name_map_S3568C7[] = {
  NSPAIR(_ZN7S3568C7C1Ev),
  NSPAIR(_ZN7S3568C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C8;
extern VTBL_ENTRY _ZTI7S3568C8[];
extern  VTBL_ENTRY _ZTV7S3568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C8[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
static Base_Class bases_S3568C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3568C8,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3568C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3568C4,    ABISELECT(56,32), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C7[];
extern void _ZN7S3568C7D1Ev();
extern void _ZN7S3568C7D0Ev();
extern void ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S3568C7D1Ev,_ZThn24_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S3568C7D0Ev,_ZThn24_N7S3568C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S3568C7D1Ev,_ZThn32_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S3568C7D0Ev,_ZThn32_N7S3568C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C7[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&_ZN7S3568C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C7D0Ev,
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C7[];
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C9__7S3568C7[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C9__7S3568C7[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C4D1Ev,_ZThn16_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C4D0Ev,_ZThn16_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C9__7S3568C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C9__7S3568C7[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C9__7S3568C7[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
extern void _ZN7S3568C8D1Ev();
extern void _ZN7S3568C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&_ZN7S3568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C8D1Ev,_ZThn4_N7S3568C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C8D0Ev,_ZThn4_N7S3568C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C8__7S3568C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev),
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__A1__7S3568C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
static  VTT_ENTRY vtt_S3568C7[] = {
  {&(_ZTV7S3568C7[5]),  5,30},
  {&(_tg__ZTV7S3568C9__7S3568C7[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C9__7S3568C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C9__7S3568C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C9__7S3568C7[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C9__7S3568C7[4]),  4,6},
  {&(_ZTV7S3568C7[17]),  17,30},
  {&(_ZTV7S3568C7[22]),  22,30},
  {&(_ZTV7S3568C7[11]),  11,30},
  {&(_ZTV7S3568C7[28]),  28,30},
  {&(_tg__ZTV7S3568C8__7S3568C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C8__7S3568C7[3]),  3,5},
  {&(_tg__ZTV7S3568C4__A1__7S3568C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__A1__7S3568C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3568C7[];
extern  VTBL_ENTRY _ZTV7S3568C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C7[];
static VTBL_ENTRY alt_thunk_names167[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C8D0Ev,_ZThn4_N7S3568C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C8D1Ev,_ZThn4_N7S3568C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C4D0Ev,_ZThn16_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C4D1Ev,_ZThn16_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C7D0Ev,_ZThn24_N7S3568C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C7D1Ev,_ZThn24_N7S3568C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C7D0Ev,_ZThn32_N7S3568C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C7D1Ev,_ZThn32_N7S3568C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C7 = {  "S3568C7", // class name
  bases_S3568C7, 6,
  &(vtc_S3568C7[0]), // expected_vtbl_contents
  &(vtt_S3568C7[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S3568C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3568C7),30, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C7),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names167,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C6  : virtual S3568C7 , S3568C4 {
  virtual  ~S3568C6(); // _ZN7S3568C6D2Ev
  S3568C6(); // tgen
};
//SIG(-1 S3568C6) C1{ VBC2{ BC3{ vd m Fs} VBC4{ VBC3 vd} BC5{ VBC3 VBC4 BC6{ VBC3} vd Fi} VBC6 vd Fi} BC6 vd}


 S3568C6 ::~S3568C6(){ note_dtor("S3568C6", this);}
S3568C6 ::S3568C6(){ note_ctor("S3568C6", this);} // tgen

static void Test_S3568C6()
{
  extern Class_Descriptor cd_S3568C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S3568C6, buf);
    S3568C6 *dp, &lv = *(dp=new (buf) S3568C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S3568C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C6)");
    /*is_ambiguous_... S3568C7::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C7*), ABISELECT(8,4), "S3568C6");
    check_base_class_offset(lv, (S19859C6*)(S3568C8*), ABISELECT(48,28), "S3568C6");
    check_base_class_offset(lv, (S19859C6*)(S3568C9*)(S3568C7*), ABISELECT(48,28), "S3568C6");
    check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*)(S3568C7*), ABISELECT(48,28), "S3568C6");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(48,28), "S3568C6");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(48,28), "S3568C6");
    check_base_class_offset(lv, (S3568C8*)(S3568C7*), ABISELECT(40,24), "S3568C6");
    check_base_class_offset(lv, (S3568C8*)(S3568C9*)(S3568C7*), ABISELECT(40,24), "S3568C6");
    check_base_class_offset(lv, (S3568C4*)(S3568C9*)(S3568C7*), ABISELECT(24,12), "S3568C6");
    check_base_class_offset(lv, (S3568C9*)(S3568C7*), ABISELECT(24,12), "S3568C6");
    /*is_ambiguous_... S3568C7::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C7*), ABISELECT(64,36), "S3568C6");
    check_base_class_offset(lv, (S3568C7*), ABISELECT(8,4), "S3568C6");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*), 0, "S3568C6");
    test_class_info(&lv, &cd_S3568C6);
    dp->~S3568C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C6(Test_S3568C6, "S3568C6", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN7S3568C6C1Ev();
extern void _ZN7S3568C6D2Ev();
Name_Map name_map_S3568C6[] = {
  NSPAIR(_ZN7S3568C6C1Ev),
  NSPAIR(_ZN7S3568C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C8;
extern VTBL_ENTRY _ZTI7S3568C8[];
extern  VTBL_ENTRY _ZTV7S3568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C8[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C7;
extern VTBL_ENTRY _ZTI7S3568C7[];
extern  VTBL_ENTRY _ZTV7S3568C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C7[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
static Base_Class bases_S3568C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(48,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3568C8,    ABISELECT(40,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3568C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3568C4,    ABISELECT(64,36), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3568C7,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C6[];
extern void _ZN7S3568C6D1Ev();
extern void _ZN7S3568C6D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C6D1Ev,_ZThn4_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C6D0Ev,_ZThn4_N7S3568C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S3568C6D1Ev,_ZTvn8_n24_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3568C6D0Ev,_ZTvn8_n24_N7S3568C6D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S3568C6D1Ev,_ZThn24_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S3568C6D0Ev,_ZThn24_N7S3568C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S3568C6D1Ev,_ZThn28_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S3568C6D0Ev,_ZThn28_N7S3568C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S3568C6D1Ev,_ZThn36_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S3568C6D0Ev,_ZThn36_N7S3568C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C6[] = {
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&_ZN7S3568C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C6D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev),
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C6D1Ev,_ZTvn8_n24_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C6D0Ev,_ZTvn8_n24_N7S3568C6D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(8,4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C6[];
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A__7S3568C6[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn48_N7S3568C4D1Ev,_ZThn28_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn48_N7S3568C4D0Ev,_ZThn28_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__A__7S3568C6[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void _ZN7S3568C7D1Ev();
extern void _ZN7S3568C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C7__7S3568C6[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&_ZN7S3568C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C7D0Ev,
};
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C97S3568C7__7S3568C6[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C97S3568C7__7S3568C6[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C4D1Ev,_ZThn16_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C4D0Ev,_ZThn16_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C97S3568C7__7S3568C6[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C97S3568C7__7S3568C6[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C97S3568C7__7S3568C6[] = {
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C7__7S3568C6[] = {
  ABISELECT(-32,-20),
  ABISELECT(8,4),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S3568C7D1Ev,_ZThn24_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S3568C7D0Ev,_ZThn24_N7S3568C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S3568C7__7S3568C6[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C9__7S3568C7__7S3568C6[] = {
  ABISELECT(16,12),
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S3568C7D1Ev,_ZThn32_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S3568C7D0Ev,_ZThn32_N7S3568C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C7__7S3568C6[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern void _ZN7S3568C8D1Ev();
extern void _ZN7S3568C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&_ZN7S3568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C8D1Ev,_ZThn4_N7S3568C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C8D0Ev,_ZThn4_N7S3568C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C8__7S3568C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev),
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__A1__7S3568C6[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
static  VTT_ENTRY vtt_S3568C6[] = {
  {&(_ZTV7S3568C6[6]),  6,39},
  {&(_tg__ZTV7S3568C4__A__7S3568C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__A__7S3568C6[3]),  3,5},
  {&(_ZTV7S3568C6[14]),  14,39},
  {&(_ZTV7S3568C6[26]),  26,39},
  {&(_ZTV7S3568C6[31]),  31,39},
  {&(_ZTV7S3568C6[20]),  20,39},
  {&(_ZTV7S3568C6[37]),  37,39},
  {&(_tg__ZTV7S3568C7__7S3568C6[5]),  5,7},
  {&(_tg__ZTV7S3568C97S3568C7__7S3568C6[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C97S3568C7__7S3568C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C97S3568C7__7S3568C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C97S3568C7__7S3568C6[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C97S3568C7__7S3568C6[4]),  4,6},
  {&(_tg__ZTV7S3568C8__7S3568C7__7S3568C6[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S3568C7__7S3568C6[3]),  3,5},
  {&(_tg__ZTV7S3568C9__7S3568C7__7S3568C6[4]),  4,6},
  {&(_tg__ZTV7S3568C4__A1__7S3568C7__7S3568C6[4]),  4,6},
  {&(_tg__ZTV7S3568C8__7S3568C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C8__7S3568C6[3]),  3,5},
  {&(_tg__ZTV7S3568C4__A1__7S3568C6[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__A1__7S3568C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S3568C6[];
extern  VTBL_ENTRY _ZTV7S3568C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C6[];
static VTBL_ENTRY alt_thunk_names168[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C8D0Ev,_ZThn4_N7S3568C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C8D1Ev,_ZThn4_N7S3568C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C7D0Ev,_ZThn24_N7S3568C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C7D1Ev,_ZThn24_N7S3568C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C7D0Ev,_ZThn32_N7S3568C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C7D1Ev,_ZThn32_N7S3568C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C4D0Ev,_ZThn16_N7S3568C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C4D0Ev,_ZThn28_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C4D1Ev,_ZThn16_N7S3568C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C4D1Ev,_ZThn28_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C6D0Ev,_ZThn28_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C6D1Ev,_ZThn28_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3568C6D0Ev,_ZThn36_N7S3568C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C6D0Ev,_ZThn24_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3568C6D1Ev,_ZThn36_N7S3568C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C6D1Ev,_ZThn24_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C6D0Ev,_ZThn4_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C6D1Ev,_ZThn4_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C6 = {  "S3568C6", // class name
  bases_S3568C6, 8,
  &(vtc_S3568C6[0]), // expected_vtbl_contents
  &(vtt_S3568C6[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI7S3568C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3568C6),39, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C6),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names168,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C2  : S3568C3 , virtual S3568C6 , virtual S3568C9 {
  ~S3568C2(); // tgen
  S3568C2(); // tgen
};
//SIG(-1 S3568C2) C1{ BC2{ VBC3{ VBC4{ vd m Fs}} vd} VBC5{ VBC6{ BC4 VBC7{ VBC4 vd} BC8{ VBC4 VBC7 BC3 vd Fi} VBC3 vd Fi} BC3 vd} VBC8}


S3568C2 ::~S3568C2(){ note_dtor("S3568C2", this);} // tgen
S3568C2 ::S3568C2(){ note_ctor("S3568C2", this);} // tgen

static void Test_S3568C2()
{
  extern Class_Descriptor cd_S3568C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S3568C2, buf);
    S3568C2 *dp, &lv = *(dp=new (buf) S3568C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S3568C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C2)");
    /*is_ambiguous_... S3568C2::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(8,4), "S3568C2");
    check_base_class_offset(lv, (S19859C6*)(S3568C8*), ABISELECT(8,4), "S3568C2");
    check_base_class_offset(lv, (S19859C6*)(S3568C9*)(S3568C7*), ABISELECT(8,4), "S3568C2");
    check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*)(S3568C7*), ABISELECT(8,4), "S3568C2");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C6*), ABISELECT(8,4), "S3568C2");
    /*is_ambiguous_... S3568C2::S3568C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C9*), ABISELECT(8,4), "S3568C2");
    /*is_ambiguous_... S3568C2::S3568C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*), ABISELECT(8,4), "S3568C2");
    check_base_class_offset(lv, (S3568C4*)(S3568C3*), 0, "S3568C2");
    /*is_ambiguous_... S3568C7::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C7*), 0, "S3568C2");
    check_base_class_offset(lv, (S3568C3*), 0, "S3568C2");
    /*is_ambiguous_... S3568C7::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C7*), ABISELECT(32,16), "S3568C2");
    check_base_class_offset(lv, (S3568C8*)(S3568C7*), ABISELECT(64,36), "S3568C2");
    check_base_class_offset(lv, (S3568C8*)(S3568C9*)(S3568C7*), ABISELECT(64,36), "S3568C2");
    /*is_ambiguous_... S3568C2::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C8*)(S3568C9*), ABISELECT(64,36), "S3568C2");
    check_base_class_offset(lv, (S3568C4*)(S3568C9*)(S3568C7*), ABISELECT(48,24), "S3568C2");
    check_base_class_offset(lv, (S3568C9*)(S3568C7*), ABISELECT(48,24), "S3568C2");
    check_base_class_offset(lv, (S3568C7*)(S3568C6*), ABISELECT(32,16), "S3568C2");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C6*), ABISELECT(24,12), "S3568C2");
    check_base_class_offset(lv, (S3568C6*), ABISELECT(24,12), "S3568C2");
    /*is_ambiguous_... S3568C2::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C9*), ABISELECT(72,40), "S3568C2");
    /*is_ambiguous_... S3568C2::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C9*), ABISELECT(72,40), "S3568C2");
    test_class_info(&lv, &cd_S3568C2);
    dp->~S3568C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C2(Test_S3568C2, "S3568C2", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S3568C2C1Ev();
extern void _ZN7S3568C2D1Ev();
Name_Map name_map_S3568C2[] = {
  NSPAIR(_ZN7S3568C2C1Ev),
  NSPAIR(_ZN7S3568C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C3;
extern VTBL_ENTRY _ZTI7S3568C3[];
extern  VTBL_ENTRY _ZTV7S3568C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C3[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C8;
extern VTBL_ENTRY _ZTI7S3568C8[];
extern  VTBL_ENTRY _ZTV7S3568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C8[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
extern Class_Descriptor cd_S3568C7;
extern VTBL_ENTRY _ZTI7S3568C7[];
extern  VTBL_ENTRY _ZTV7S3568C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C7[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C6;
extern VTBL_ENTRY _ZTI7S3568C6[];
extern  VTBL_ENTRY _ZTV7S3568C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C6[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
static Base_Class bases_S3568C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3568C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3568C8,    ABISELECT(64,36), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3568C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3568C7,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3568C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3568C6,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3568C4,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(72,40), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C2[];
extern void ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev)();
extern void _ZN7S3568C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev)();
extern void _ZN7S3568C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C2D1Ev,_ZTv0_n12_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C2D1Ev,_ZThn4_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C2D0Ev,_ZTv0_n12_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C2D0Ev,_ZThn4_N7S3568C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3568C2D1Ev,_ZTv0_n28_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C2D1Ev,_ZThn12_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3568C2D0Ev,_ZTv0_n28_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C2D0Ev,_ZThn12_N7S3568C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C2D1Ev,_ZTv0_n24_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C2D1Ev,_ZThn16_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C2D0Ev,_ZTv0_n24_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C2D0Ev,_ZThn16_N7S3568C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S3568C2D1Ev,_ZTvn8_n24_N7S3568C2D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3568C2D0Ev,_ZTvn8_n24_N7S3568C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S3568C2D1Ev,_ZThn36_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S3568C2D0Ev,_ZThn36_N7S3568C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3568C2D1Ev,_ZTv0_n20_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S3568C2D1Ev,_ZThn40_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3568C2D0Ev,_ZTv0_n20_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn72_N7S3568C2D0Ev,_ZThn40_N7S3568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C2[] = {
  ABISELECT(72,40),
  ABISELECT(64,36),
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C2D1Ev,_ZTv0_n12_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C2D0Ev,_ZTv0_n12_N7S3568C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3568C2D1Ev,_ZTv0_n28_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3568C2D0Ev,_ZTv0_n28_N7S3568C2D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C2D1Ev,_ZTv0_n24_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C2D0Ev,_ZTv0_n24_N7S3568C2D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C2D1Ev,_ZTvn8_n24_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C2D0Ev,_ZTvn8_n24_N7S3568C2D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3568C2D1Ev,_ZTv0_n20_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3568C2D0Ev,_ZTv0_n20_N7S3568C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C2[];
extern void ABISELECT(_ZTv0_n32_N7S3568C3D1Ev,_ZTv0_n16_N7S3568C3D1Ev)();
extern void _ZN7S3568C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C3D0Ev,_ZTv0_n16_N7S3568C3D0Ev)();
extern void _ZN7S3568C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C3__7S3568C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C3D1Ev,_ZTv0_n16_N7S3568C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C3D0Ev,_ZTv0_n16_N7S3568C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C3D1Ev,_ZThn4_N7S3568C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C3D0Ev,_ZThn4_N7S3568C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C3__7S3568C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev),
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__7S3568C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C4D1Ev,_ZThn4_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C4D0Ev,_ZThn4_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__7S3568C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void _ZN7S3568C6D1Ev();
extern void _ZN7S3568C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C6__7S3568C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&_ZN7S3568C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C6D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C6__A2__7S3568C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C6__A2__7S3568C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C6D1Ev,_ZThn4_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C6D0Ev,_ZThn4_N7S3568C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C7__7S3568C6__7S3568C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S3568C6D1Ev,_ZThn24_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S3568C6D0Ev,_ZThn24_N7S3568C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C6__7S3568C2[] = {
  ABISELECT(-40,-24),
  ABISELECT(-56,-32),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S3568C6__7S3568C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S3568C6D1Ev,_ZTvn8_n24_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3568C6D0Ev,_ZTvn8_n24_N7S3568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C97S3568C7__7S3568C6__7S3568C2[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C6D1Ev,_ZTvn8_n24_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C6D0Ev,_ZTvn8_n24_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C6__7S3568C2[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev),
};
extern void _ZN7S3568C7D1Ev();
extern void _ZN7S3568C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C7__7S3568C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&_ZN7S3568C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C7D0Ev,
};
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C97S3568C7__7S3568C2[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C97S3568C7__A1__7S3568C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C97S3568C7__A1__7S3568C2[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C97S3568C7__7S3568C2[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C97S3568C7__7S3568C2[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C7__7S3568C2[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S3568C7__7S3568C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C9__7S3568C7__7S3568C2[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C7__7S3568C2[] = {
  ABISELECT(32,16),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern void _ZN7S3568C8D1Ev();
extern void _ZN7S3568C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C2[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&_ZN7S3568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C8__7S3568C2[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev),
};
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C9__A1__7S3568C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C9__A3__7S3568C2[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C9__A3__7S3568C2[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C9__A1__7S3568C2[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C9__A1__7S3568C2[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
static  VTT_ENTRY vtt_S3568C2[] = {
  {&(_ZTV7S3568C2[9]),  9,52},
  {&(_tg__ZTV7S3568C3__7S3568C2[5]),  5,7},
  {&(_tg__ZTV7S3568C3__7S3568C2[5]),  5,7},
  {&(_tg__ZTV8S19859C6__7S3568C3__7S3568C2[3]),  3,5},
  {&(_ZTV7S3568C2[9]),  9,52},
  {&(_ZTV7S3568C2[14]),  14,52},
  {&(_ZTV7S3568C2[23]),  23,52},
  {&(_ZTV7S3568C2[31]),  31,52},
  {&(_ZTV7S3568C2[43]),  43,52},
  {&(_ZTV7S3568C2[37]),  37,52},
  {&(_ZTV7S3568C2[50]),  50,52},
  {&(_tg__ZTV7S3568C4__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C6__7S3568C2[6]),  6,8},
  {&(_tg__ZTV7S3568C47S3568C6__A2__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C6__A2__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C7__7S3568C6__7S3568C2[6]),  6,8},
  {&(_tg__ZTV7S3568C8__7S3568C6__7S3568C2[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S3568C6__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C97S3568C7__7S3568C6__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C4__A1__7S3568C6__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C7__7S3568C2[5]),  5,7},
  {&(_tg__ZTV7S3568C97S3568C7__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C97S3568C7__A1__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C97S3568C7__A1__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C97S3568C7__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C97S3568C7__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C8__7S3568C7__7S3568C2[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S3568C7__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C9__7S3568C7__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C4__A1__7S3568C7__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C8__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C8__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C9__A1__7S3568C2[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C9__A3__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C9__A3__7S3568C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C9__A1__7S3568C2[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C9__A1__7S3568C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3568C2[];
extern  VTBL_ENTRY _ZTV7S3568C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C2[];
static VTBL_ENTRY alt_thunk_names169[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C6D0Ev,_ZThn24_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C6D1Ev,_ZThn24_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C6D0Ev,_ZThn4_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C6D1Ev,_ZThn4_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C4D0Ev,_ZThn4_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C4D1Ev,_ZThn4_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C3D0Ev,_ZThn4_N7S3568C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C3D1Ev,_ZThn4_N7S3568C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C3D0Ev,_ZTv0_n16_N7S3568C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3568C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C3D1Ev,_ZTv0_n16_N7S3568C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3568C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3568C2D0Ev,_ZTv0_n20_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S3568C2D0Ev,_ZThn40_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3568C2D1Ev,_ZTv0_n20_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S3568C2D1Ev,_ZThn40_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C2D0Ev,_ZTv0_n24_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C2D0Ev,_ZThn16_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C2D1Ev,_ZTv0_n24_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C2D1Ev,_ZThn16_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3568C2D0Ev,_ZTv0_n28_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C2D0Ev,_ZThn12_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3568C2D1Ev,_ZTv0_n28_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C2D1Ev,_ZThn12_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C2D0Ev,_ZTv0_n12_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C2D0Ev,_ZThn4_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C2D1Ev,_ZTv0_n12_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C2D1Ev,_ZThn4_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3568C2D0Ev,_ZThn36_N7S3568C2D0Ev),
  (VTBL_ENTRY)_ZN7S3568C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S3568C2D1Ev,_ZThn36_N7S3568C2D1Ev),
  (VTBL_ENTRY)_ZN7S3568C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C2 = {  "S3568C2", // class name
  bases_S3568C2, 12,
  &(vtc_S3568C2[0]), // expected_vtbl_contents
  &(vtt_S3568C2[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S3568C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3568C2),52, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C2),38, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names169,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3568C1  : S3568C2 , S3568C9 {
  int s3568c1f0;
  char s3568c1f1;
  virtual  ~S3568C1(); // _ZN7S3568C1D2Ev
  S3568C1(); // tgen
};
//SIG(1 S3568C1) C1{ BC2{ BC3{ VBC4{ VBC5{ vd m Fs}} vd} VBC6{ VBC7{ BC5 VBC8{ VBC5 vd} BC9{ VBC5 VBC8 BC4 vd Fi} VBC4 vd Fi} BC4 vd} VBC9} BC9 vd Fi Fc}


 S3568C1 ::~S3568C1(){ note_dtor("S3568C1", this);}
S3568C1 ::S3568C1(){ note_ctor("S3568C1", this);} // tgen

static void Test_S3568C1()
{
  extern Class_Descriptor cd_S3568C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S3568C1, buf);
    S3568C1 *dp, &lv = *(dp=new (buf) S3568C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S3568C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3568C1)");
    /*is_ambiguous_... S3568C1::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*), ABISELECT(32,20), "S3568C1");
    check_base_class_offset(lv, (S19859C6*)(S3568C8*), ABISELECT(32,20), "S3568C1");
    check_base_class_offset(lv, (S19859C6*)(S3568C9*)(S3568C7*), ABISELECT(32,20), "S3568C1");
    check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*)(S3568C7*), ABISELECT(32,20), "S3568C1");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C6*), ABISELECT(32,20), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C9*), ABISELECT(32,20), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*), ABISELECT(32,20), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C9*), ABISELECT(32,20), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C4*)(S3568C9*), ABISELECT(32,20), "S3568C1");
    check_base_class_offset(lv, (S3568C4*)(S3568C3*)(S3568C2*), 0, "S3568C1");
    /*is_ambiguous_... S3568C7::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C7*), 0, "S3568C1");
    check_base_class_offset(lv, (S3568C3*)(S3568C2*), 0, "S3568C1");
    /*is_ambiguous_... S3568C7::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S3568C7*), ABISELECT(56,32), "S3568C1");
    check_base_class_offset(lv, (S3568C8*)(S3568C7*), ABISELECT(88,52), "S3568C1");
    check_base_class_offset(lv, (S3568C8*)(S3568C9*)(S3568C7*), ABISELECT(88,52), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C8*)(S3568C9*), ABISELECT(88,52), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C8*)(S3568C9*), ABISELECT(88,52), "S3568C1");
    check_base_class_offset(lv, (S3568C4*)(S3568C9*)(S3568C7*), ABISELECT(72,40), "S3568C1");
    check_base_class_offset(lv, (S3568C9*)(S3568C7*), ABISELECT(72,40), "S3568C1");
    check_base_class_offset(lv, (S3568C7*)(S3568C6*), ABISELECT(56,32), "S3568C1");
    /*is_ambiguous_... S3568C6::S3568C4 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C6*), ABISELECT(48,28), "S3568C1");
    check_base_class_offset(lv, (S3568C6*)(S3568C2*), ABISELECT(48,28), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C9*), ABISELECT(96,56), "S3568C1");
    /*is_ambiguous_... S3568C2::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C9*)(S3568C2*), ABISELECT(96,56), "S3568C1");
    check_base_class_offset(lv, (S3568C2*), 0, "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C4*)(S3568C9*), ABISELECT(8,4), "S3568C1");
    /*is_ambiguous_... S3568C1::S3568C9 */ AMB_check_base_class_offset(lv, (S3568C9*), ABISELECT(8,4), "S3568C1");
    check_field_offset(lv, s3568c1f0, ABISELECT(20,12), "S3568C1.s3568c1f0");
    check_field_offset(lv, s3568c1f1, ABISELECT(24,16), "S3568C1.s3568c1f1");
    test_class_info(&lv, &cd_S3568C1);
    dp->~S3568C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3568C1(Test_S3568C1, "S3568C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S3568C1C1Ev();
extern void _ZN7S3568C1D2Ev();
Name_Map name_map_S3568C1[] = {
  NSPAIR(_ZN7S3568C1C1Ev),
  NSPAIR(_ZN7S3568C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C3;
extern VTBL_ENTRY _ZTI7S3568C3[];
extern  VTBL_ENTRY _ZTV7S3568C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C3[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S3568C8;
extern VTBL_ENTRY _ZTI7S3568C8[];
extern  VTBL_ENTRY _ZTV7S3568C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C8[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
extern Class_Descriptor cd_S3568C7;
extern VTBL_ENTRY _ZTI7S3568C7[];
extern  VTBL_ENTRY _ZTV7S3568C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C7[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C6;
extern VTBL_ENTRY _ZTI7S3568C6[];
extern  VTBL_ENTRY _ZTV7S3568C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C6[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
extern Class_Descriptor cd_S3568C2;
extern VTBL_ENTRY _ZTI7S3568C2[];
extern  VTBL_ENTRY _ZTV7S3568C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C2[];
extern Class_Descriptor cd_S3568C4;
extern VTBL_ENTRY _ZTI7S3568C4[];
extern  VTBL_ENTRY _ZTV7S3568C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C4[];
extern Class_Descriptor cd_S3568C9;
extern VTBL_ENTRY _ZTI7S3568C9[];
extern  VTBL_ENTRY _ZTV7S3568C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C9[];
static Base_Class bases_S3568C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(32,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3568C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3568C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3568C8,    ABISELECT(88,52), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3568C4,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(72,40), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3568C7,    ABISELECT(56,32), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3568C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3568C6,    ABISELECT(48,28), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3568C4,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(96,56), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3568C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3568C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3568C9,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3568C1[];
extern void ABISELECT(_ZTv0_n32_N7S3568C1D1Ev,_ZTv0_n16_N7S3568C1D1Ev)();
extern void _ZN7S3568C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C1D0Ev,_ZTv0_n16_N7S3568C1D0Ev)();
extern void _ZN7S3568C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZThn8_N7S3568C1D1Ev,_ZThn4_N7S3568C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C1D0Ev,_ZThn4_N7S3568C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C1D1Ev,_ZTv0_n12_N7S3568C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C1D1Ev,_ZThn20_N7S3568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C1D0Ev,_ZTv0_n12_N7S3568C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C1D0Ev,_ZThn20_N7S3568C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3568C1D1Ev,_ZTv0_n28_N7S3568C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3568C1D1Ev,_ZThn28_N7S3568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3568C1D0Ev,_ZTv0_n28_N7S3568C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3568C1D0Ev,_ZThn28_N7S3568C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C1D1Ev,_ZTv0_n24_N7S3568C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S3568C1D1Ev,_ZThn32_N7S3568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C1D0Ev,_ZTv0_n24_N7S3568C1D0Ev)();
extern void ABISELECT(_ZThn56_N7S3568C1D0Ev,_ZThn32_N7S3568C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n48_N7S3568C1D1Ev,_ZTvn8_n24_N7S3568C1D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3568C1D0Ev,_ZTvn8_n24_N7S3568C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C1D1Ev,_ZTv0_n16_N7S3568C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S3568C1D1Ev,_ZThn52_N7S3568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C1D0Ev,_ZTv0_n16_N7S3568C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S3568C1D0Ev,_ZThn52_N7S3568C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3568C1D1Ev,_ZTv0_n20_N7S3568C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S3568C1D1Ev,_ZThn56_N7S3568C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3568C1D0Ev,_ZTv0_n20_N7S3568C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S3568C1D0Ev,_ZThn56_N7S3568C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3568C1[] = {
  ABISELECT(96,56),
  ABISELECT(88,52),
  ABISELECT(56,32),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C1D1Ev,_ZTv0_n16_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C1D0Ev,_ZTv0_n16_N7S3568C1D0Ev),
  ABISELECT(80,48),
  ABISELECT(24,16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3568C1D1Ev,_ZThn4_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3568C1D0Ev,_ZThn4_N7S3568C1D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C1D1Ev,_ZTv0_n12_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C1D0Ev,_ZTv0_n12_N7S3568C1D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3568C1D1Ev,_ZTv0_n28_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3568C1D0Ev,_ZTv0_n28_N7S3568C1D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C1D1Ev,_ZTv0_n24_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C1D0Ev,_ZTv0_n24_N7S3568C1D0Ev),
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C1D1Ev,_ZTvn8_n24_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C1D0Ev,_ZTvn8_n24_N7S3568C1D0Ev),
  ABISELECT(-88,-52),
  ABISELECT(-56,-32),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C1D1Ev,_ZTv0_n16_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C1D0Ev,_ZTv0_n16_N7S3568C1D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3568C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3568C1D1Ev,_ZTv0_n20_N7S3568C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3568C1D0Ev,_ZTv0_n20_N7S3568C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3568C1[];
extern void ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev)();
extern void _ZN7S3568C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev)();
extern void _ZN7S3568C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C2__7S3568C1[] = {
  ABISELECT(96,56),
  ABISELECT(88,52),
  ABISELECT(56,32),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C3D1Ev,_ZTv0_n16_N7S3568C3D1Ev)();
extern void _ZN7S3568C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C3D0Ev,_ZTv0_n16_N7S3568C3D0Ev)();
extern void _ZN7S3568C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C37S3568C2__7S3568C1[] = {
  0,
  0,
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C3D1Ev,_ZTv0_n16_N7S3568C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C3D0Ev,_ZTv0_n16_N7S3568C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C3D1Ev,_ZThn20_N7S3568C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C3D0Ev,_ZThn20_N7S3568C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C37S3568C2__7S3568C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C2D1Ev,_ZTv0_n12_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C2D1Ev,_ZThn20_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C2D0Ev,_ZTv0_n12_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C2D0Ev,_ZThn20_N7S3568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C2__7S3568C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C2D1Ev,_ZTv0_n12_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C2D0Ev,_ZTv0_n12_N7S3568C2D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S3568C2D1Ev,_ZTv0_n28_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3568C2D1Ev,_ZThn28_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3568C2D0Ev,_ZTv0_n28_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S3568C2D0Ev,_ZThn28_N7S3568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C6__7S3568C2__7S3568C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3568C2D1Ev,_ZTv0_n28_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3568C2D0Ev,_ZTv0_n28_N7S3568C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S3568C2D1Ev,_ZTv0_n24_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn56_N7S3568C2D1Ev,_ZThn32_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C2D0Ev,_ZTv0_n24_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn56_N7S3568C2D0Ev,_ZThn32_N7S3568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C7__7S3568C2__7S3568C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C2D1Ev,_ZTv0_n24_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C2D0Ev,_ZTv0_n24_N7S3568C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S3568C2D1Ev,_ZThn52_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S3568C2D0Ev,_ZThn52_N7S3568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C2__7S3568C1[] = {
  ABISELECT(-88,-52),
  ABISELECT(-56,-32),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S3568C2D1Ev,_ZTvn8_n24_N7S3568C2D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3568C2D0Ev,_ZTvn8_n24_N7S3568C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C97S3568C7__7S3568C2__7S3568C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C2D1Ev,_ZTvn8_n24_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C2D0Ev,_ZTvn8_n24_N7S3568C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3568C2D1Ev,_ZTv0_n20_N7S3568C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S3568C2D1Ev,_ZThn56_N7S3568C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3568C2D0Ev,_ZTv0_n20_N7S3568C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S3568C2D0Ev,_ZThn56_N7S3568C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C9__A1__7S3568C2__7S3568C1[] = {
  ABISELECT(-96,-56),
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI7S3568C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3568C2D1Ev,_ZTv0_n20_N7S3568C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3568C2D0Ev,_ZTv0_n20_N7S3568C2D0Ev),
};
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C9__A__7S3568C1[] = {
  ABISELECT(80,48),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C9__A4__7S3568C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C4D1Ev,_ZThn16_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C4D0Ev,_ZThn16_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C9__A4__7S3568C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn24_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn24_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C9__A__7S3568C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn80_N7S3568C9D1Ev,_ZThn48_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn80_N7S3568C9D0Ev,_ZThn48_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C9__A__7S3568C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-56,-32),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C4__7S3568C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C4D1Ev,_ZThn20_N7S3568C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C4D0Ev,_ZThn20_N7S3568C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C4__7S3568C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void _ZN7S3568C6D1Ev();
extern void _ZN7S3568C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C6__7S3568C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(40,24),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&_ZN7S3568C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C6D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C6__A2__7S3568C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C6__A2__7S3568C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S3568C6D1Ev,_ZThn4_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S3568C6D0Ev,_ZThn4_N7S3568C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C7__7S3568C6__7S3568C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S3568C6D1Ev,_ZThn24_N7S3568C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S3568C6D0Ev,_ZThn24_N7S3568C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C6__7S3568C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-56,-32),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S3568C6__7S3568C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C6D1Ev,_ZTv0_n12_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C6D0Ev,_ZTv0_n12_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTvn16_n48_N7S3568C6D1Ev,_ZTvn8_n24_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTvn16_n48_N7S3568C6D0Ev,_ZTvn8_n24_N7S3568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C97S3568C7__7S3568C6__7S3568C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C6D1Ev,_ZTvn8_n24_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n48_N7S3568C6D0Ev,_ZTvn8_n24_N7S3568C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C6__7S3568C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,20),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S3568C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev),
};
extern void _ZN7S3568C7D1Ev();
extern void _ZN7S3568C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C7__7S3568C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&_ZN7S3568C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C7D0Ev,
};
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C97S3568C7__7S3568C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C97S3568C7__A1__7S3568C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C97S3568C7__A1__7S3568C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C97S3568C7__7S3568C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C97S3568C7__7S3568C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-56,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C7__7S3568C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__A1__7S3568C7__7S3568C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D1Ev,_ZTv0_n12_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C7D0Ev,_ZTv0_n12_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C9__7S3568C7__7S3568C1[] = {
  ABISELECT(16,12),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D1Ev,_ZThn8_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3568C7D0Ev,_ZThn8_N7S3568C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C4__A1__7S3568C7__7S3568C1[] = {
  ABISELECT(56,32),
  ABISELECT(32,20),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S3568C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev),
};
extern void _ZN7S3568C8D1Ev();
extern void _ZN7S3568C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C1[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&_ZN7S3568C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C8__7S3568C1[] = {
  ABISELECT(56,32),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S3568C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D1Ev,_ZTv0_n12_N7S3568C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C8D0Ev,_ZTv0_n12_N7S3568C8D0Ev),
};
extern void _ZN7S3568C9D1Ev();
extern void _ZN7S3568C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C9__A1__7S3568C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&_ZN7S3568C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C9D0Ev,
};
extern void _ZN7S3568C4D1Ev();
extern void _ZN7S3568C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3568C47S3568C9__A3__7S3568C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&_ZN7S3568C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3568C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C47S3568C9__A3__7S3568C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S3568C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__7S3568C9__A1__7S3568C1[] = {
  ABISELECT(64,36),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3568C8__7S3568C9__A1__7S3568C1[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3568C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev),
};
static  VTT_ENTRY vtt_S3568C1[] = {
  {&(_ZTV7S3568C1[9]),  9,58},
  {&(_tg__ZTV7S3568C2__7S3568C1[9]),  9,11},
  {&(_tg__ZTV7S3568C37S3568C2__7S3568C1[5]),  5,7},
  {&(_tg__ZTV7S3568C37S3568C2__7S3568C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__7S3568C37S3568C2__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C2__7S3568C1[9]),  9,11},
  {&(_tg__ZTV8S19859C6__7S3568C2__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C6__7S3568C2__7S3568C1[7]),  7,9},
  {&(_tg__ZTV7S3568C7__7S3568C2__7S3568C1[6]),  6,8},
  {&(_tg__ZTV7S3568C8__7S3568C2__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C97S3568C7__7S3568C2__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C9__A1__7S3568C2__7S3568C1[5]),  5,7},
  {&(_tg__ZTV7S3568C9__A__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C9__A4__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C9__A4__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C9__A__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C9__A__7S3568C1[4]),  4,6},
  {&(_ZTV7S3568C1[9]),  9,58},
  {&(_ZTV7S3568C1[20]),  20,58},
  {&(_ZTV7S3568C1[29]),  29,58},
  {&(_ZTV7S3568C1[37]),  37,58},
  {&(_ZTV7S3568C1[49]),  49,58},
  {&(_ZTV7S3568C1[43]),  43,58},
  {&(_ZTV7S3568C1[56]),  56,58},
  {&(_ZTV7S3568C1[15]),  15,58},
  {&(_tg__ZTV7S3568C4__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C4__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C6__7S3568C1[6]),  6,8},
  {&(_tg__ZTV7S3568C47S3568C6__A2__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C6__A2__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C7__7S3568C6__7S3568C1[6]),  6,8},
  {&(_tg__ZTV7S3568C8__7S3568C6__7S3568C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S3568C6__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C97S3568C7__7S3568C6__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C4__A1__7S3568C6__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C7__7S3568C1[5]),  5,7},
  {&(_tg__ZTV7S3568C97S3568C7__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C97S3568C7__A1__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C97S3568C7__A1__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C97S3568C7__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C97S3568C7__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C8__7S3568C7__7S3568C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__A1__7S3568C7__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C9__7S3568C7__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C4__A1__7S3568C7__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C8__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C8__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C9__A1__7S3568C1[4]),  4,6},
  {&(_tg__ZTV7S3568C47S3568C9__A3__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C47S3568C9__A3__7S3568C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__7S3568C9__A1__7S3568C1[3]),  3,5},
  {&(_tg__ZTV7S3568C8__7S3568C9__A1__7S3568C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3568C1[];
extern  VTBL_ENTRY _ZTV7S3568C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3568C1[];
static VTBL_ENTRY alt_thunk_names170[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D0Ev,_ZTv0_n16_N7S3568C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D0Ev,_ZThn20_N7S3568C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C7D1Ev,_ZTv0_n16_N7S3568C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C7D1Ev,_ZThn20_N7S3568C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C6D0Ev,_ZTv0_n16_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C6D0Ev,_ZThn24_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C6D1Ev,_ZTv0_n16_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S3568C6D1Ev,_ZThn24_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C6D0Ev,_ZTv0_n24_N7S3568C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C6D0Ev,_ZThn4_N7S3568C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C6D1Ev,_ZTv0_n24_N7S3568C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3568C6D1Ev,_ZThn4_N7S3568C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D0Ev,_ZTv0_n16_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D0Ev,_ZThn12_N7S3568C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3568C9D0Ev,_ZThn48_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C9D1Ev,_ZTv0_n16_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3568C9D1Ev,_ZThn12_N7S3568C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3568C9D1Ev,_ZThn48_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D0Ev,_ZTv0_n12_N7S3568C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C9D0Ev,_ZThn16_N7S3568C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C9D1Ev,_ZTv0_n12_N7S3568C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C9D1Ev,_ZThn16_N7S3568C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D0Ev,_ZTv0_n12_N7S3568C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C4D0Ev,_ZThn20_N7S3568C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C4D0Ev,_ZThn16_N7S3568C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C4D1Ev,_ZTv0_n12_N7S3568C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C4D1Ev,_ZThn20_N7S3568C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S3568C4D1Ev,_ZThn16_N7S3568C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3568C2D0Ev,_ZTv0_n20_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3568C2D0Ev,_ZThn56_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3568C2D1Ev,_ZTv0_n20_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3568C2D1Ev,_ZThn56_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C2D0Ev,_ZTv0_n24_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C2D0Ev,_ZThn32_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C2D1Ev,_ZTv0_n24_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C2D1Ev,_ZThn32_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3568C2D0Ev,_ZTv0_n28_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C2D0Ev,_ZThn28_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3568C2D1Ev,_ZTv0_n28_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C2D1Ev,_ZThn28_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C2D0Ev,_ZTv0_n12_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C2D0Ev,_ZThn20_N7S3568C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C2D1Ev,_ZTv0_n12_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C2D1Ev,_ZThn20_N7S3568C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C3D0Ev,_ZTv0_n12_N7S3568C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C3D0Ev,_ZThn20_N7S3568C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C3D1Ev,_ZTv0_n12_N7S3568C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C3D1Ev,_ZThn20_N7S3568C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C3D0Ev,_ZTv0_n16_N7S3568C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3568C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C3D1Ev,_ZTv0_n16_N7S3568C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3568C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C2D0Ev,_ZTv0_n16_N7S3568C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3568C2D0Ev,_ZThn52_N7S3568C2D0Ev),
  (VTBL_ENTRY)_ZN7S3568C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C2D1Ev,_ZTv0_n16_N7S3568C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3568C2D1Ev,_ZThn52_N7S3568C2D1Ev),
  (VTBL_ENTRY)_ZN7S3568C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3568C1D0Ev,_ZTv0_n20_N7S3568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3568C1D0Ev,_ZThn56_N7S3568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3568C1D1Ev,_ZTv0_n20_N7S3568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S3568C1D1Ev,_ZThn56_N7S3568C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C1D0Ev,_ZTv0_n24_N7S3568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C1D0Ev,_ZThn32_N7S3568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3568C1D1Ev,_ZTv0_n24_N7S3568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S3568C1D1Ev,_ZThn32_N7S3568C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3568C1D0Ev,_ZTv0_n28_N7S3568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C1D0Ev,_ZThn28_N7S3568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3568C1D1Ev,_ZTv0_n28_N7S3568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3568C1D1Ev,_ZThn28_N7S3568C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C1D0Ev,_ZTv0_n12_N7S3568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C1D0Ev,_ZThn20_N7S3568C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3568C1D1Ev,_ZTv0_n12_N7S3568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3568C1D1Ev,_ZThn20_N7S3568C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C1D0Ev,_ZTv0_n16_N7S3568C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3568C1D0Ev,_ZThn52_N7S3568C1D0Ev),
  (VTBL_ENTRY)_ZN7S3568C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3568C1D1Ev,_ZTv0_n16_N7S3568C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S3568C1D1Ev,_ZThn52_N7S3568C1D1Ev),
  (VTBL_ENTRY)_ZN7S3568C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3568C1 = {  "S3568C1", // class name
  bases_S3568C1, 15,
  &(vtc_S3568C1[0]), // expected_vtbl_contents
  &(vtt_S3568C1[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S3568C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3568C1),58, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3568C1),52, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names170,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9166C4_nt  {
  void *s9166c4f0;
  void  mf9166c4(); // _ZN10S9166C4_nt8mf9166c4Ev
};
//SIG(-1 S9166C4_nt) C1{ m Fp}


void  S9166C4_nt ::mf9166c4(){}

//skip512 S9166C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9166C6  {
  void *s9166c6f0;
  void  mf9166c6(); // _ZN7S9166C68mf9166c6Ev
};
//SIG(-1 S9166C6) C1{ m Fp}


void  S9166C6 ::mf9166c6(){}

static void Test_S9166C6()
{
  {
    init_simple_test("S9166C6");
    S9166C6 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9166C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9166C6)");
    check_field_offset(lv, s9166c6f0, 0, "S9166C6.s9166c6f0");
  }
}
static Arrange_To_Call_Me vS9166C6(Test_S9166C6, "S9166C6", ABISELECT(8,4));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S9166C6[];
VTBL_ENTRY *P__ZTI7S9166C6 = _ZTI7S9166C6; 
Class_Descriptor cd_S9166C6 = {  "S9166C6", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9166C6),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9166C2_nt  {
  void *s9166c2f0;
  ::S5217C60_nt s9166c2f1;
  ::S9166C4_nt s9166c2f2;
  ::S9166C4_nt s9166c2f3;
  int s9166c2f4;
  ::S9166C6 s9166c2f5;
  int s9166c2f6[3];
  virtual  ~S9166C2_nt(); // _ZN10S9166C2_ntD1Ev
  virtual void  v3(); // _ZN10S9166C2_nt2v3Ev
  S9166C2_nt(); // tgen
};
//SIG(-1 S9166C2_nt) C1{ vd v1 Fp FC2{ m Fp} FC3{ m Fp} FC3 Fi FC4{ m Fp} Fi[3]}


 S9166C2_nt ::~S9166C2_nt(){ note_dtor("S9166C2_nt", this);}
void  S9166C2_nt ::v3(){vfunc_called(this, "_ZN10S9166C2_nt2v3Ev");}
S9166C2_nt ::S9166C2_nt(){ note_ctor("S9166C2_nt", this);} // tgen

//skip512 S9166C2_nt

#else // __cplusplus

extern void _ZN10S9166C2_ntC1Ev();
extern void _ZN10S9166C2_ntD1Ev();
Name_Map name_map_S9166C2_nt[] = {
  NSPAIR(_ZN10S9166C2_ntC1Ev),
  NSPAIR(_ZN10S9166C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9166C2_nt[];
extern void _ZN10S9166C2_ntD1Ev();
extern void _ZN10S9166C2_ntD0Ev();
extern void _ZN10S9166C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S9166C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9166C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9166C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9166C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9166C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S9166C2_nt[];
VTBL_ENTRY *P__ZTI10S9166C2_nt = _ZTI10S9166C2_nt; 
extern  VTBL_ENTRY _ZTV10S9166C2_nt[];
Class_Descriptor cd_S9166C2_nt = {  "S9166C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9166C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S9166C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9166C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9166C1  : S9166C2_nt {
  int s9166c1f0;
  ::S2265C20_nt s9166c1f1;
  ::S2265C20_nt s9166c1f2;
  ::S2265C20_nt s9166c1f3;
  int s9166c1f4;
  ::S2265C20_nt s9166c1f5;
  ::S2265C20_nt s9166c1f6;
  ::S2265C20_nt s9166c1f7;
  virtual  ~S9166C1(); // _ZN7S9166C1D1Ev
  virtual void  v1(); // _ZN7S9166C12v1Ev
  virtual void  v2(); // _ZN7S9166C12v2Ev
  S9166C1(); // tgen
};
//SIG(1 S9166C1) C1{ BC2{ vd v3 Fp FC3{ m Fp} FC4{ m Fp} FC4 Fi FC5{ m Fp} Fi[3]} vd v1 v2 Fi FC6{ m Fp Fi FC7{ m}} FC6 FC6 Fi FC6 FC6 FC6}


 S9166C1 ::~S9166C1(){ note_dtor("S9166C1", this);}
void  S9166C1 ::v1(){vfunc_called(this, "_ZN7S9166C12v1Ev");}
void  S9166C1 ::v2(){vfunc_called(this, "_ZN7S9166C12v2Ev");}
S9166C1 ::S9166C1(){ note_ctor("S9166C1", this);} // tgen

static void Test_S9166C1()
{
  extern Class_Descriptor cd_S9166C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,31)];
    init_test(&cd_S9166C1, buf);
    S9166C1 *dp, &lv = *(dp=new (buf) S9166C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,120), "sizeof(S9166C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9166C1)");
    check_base_class_offset(lv, (S9166C2_nt*), 0, "S9166C1");
    check_field_offset(lv, s9166c1f0, ABISELECT(68,40), "S9166C1.s9166c1f0");
    check_field_offset(lv, s9166c1f1, ABISELECT(72,44), "S9166C1.s9166c1f1");
    check_field_offset(lv, s9166c1f2, ABISELECT(88,56), "S9166C1.s9166c1f2");
    check_field_offset(lv, s9166c1f3, ABISELECT(104,68), "S9166C1.s9166c1f3");
    check_field_offset(lv, s9166c1f4, ABISELECT(120,80), "S9166C1.s9166c1f4");
    check_field_offset(lv, s9166c1f5, ABISELECT(128,84), "S9166C1.s9166c1f5");
    check_field_offset(lv, s9166c1f6, ABISELECT(144,96), "S9166C1.s9166c1f6");
    check_field_offset(lv, s9166c1f7, ABISELECT(160,108), "S9166C1.s9166c1f7");
    test_class_info(&lv, &cd_S9166C1);
    dp->~S9166C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9166C1(Test_S9166C1, "S9166C1", ABISELECT(176,120));

#else // __cplusplus

extern void _ZN7S9166C1C1Ev();
extern void _ZN7S9166C1D1Ev();
Name_Map name_map_S9166C1[] = {
  NSPAIR(_ZN7S9166C1C1Ev),
  NSPAIR(_ZN7S9166C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9166C2_nt;
extern VTBL_ENTRY _ZTI10S9166C2_nt[];
extern  VTBL_ENTRY _ZTV10S9166C2_nt[];
static Base_Class bases_S9166C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9166C1[];
extern void _ZN7S9166C1D1Ev();
extern void _ZN7S9166C1D0Ev();
extern void _ZN10S9166C2_nt2v3Ev();
extern void _ZN7S9166C12v1Ev();
extern void _ZN7S9166C12v2Ev();
static  VTBL_ENTRY vtc_S9166C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9166C1[0]),
  (VTBL_ENTRY)&_ZN7S9166C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9166C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9166C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S9166C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9166C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9166C1[];
extern  VTBL_ENTRY _ZTV7S9166C1[];
Class_Descriptor cd_S9166C1 = {  "S9166C1", // class name
  bases_S9166C1, 1,
  &(vtc_S9166C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,120), // object size
  NSPAIRA(_ZTI7S9166C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9166C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C5  : S9166C6 {
  void *s19034c5f0[2];
};
//SIG(-1 S19034C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S19034C5()
{
  extern Class_Descriptor cd_S19034C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19034C5, buf);
    S19034C5 &lv = *(new (buf) S19034C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19034C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C5)");
    check_base_class_offset(lv, (S9166C6*), 0, "S19034C5");
    check_field_offset(lv, s19034c5f0, ABISELECT(8,4), "S19034C5.s19034c5f0");
    test_class_info(&lv, &cd_S19034C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C5(Test_S19034C5, "S19034C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
static Base_Class bases_S19034C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C5[];
Class_Descriptor cd_S19034C5 = {  "S19034C5", // class name
  bases_S19034C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19034C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C7  : virtual S9166C6 , virtual S19034C5 {
  virtual  ~S19034C7(); // _ZN8S19034C7D2Ev
  S19034C7(); // tgen
};
//SIG(-1 S19034C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S19034C7 ::~S19034C7(){ note_dtor("S19034C7", this);}
S19034C7 ::S19034C7(){ note_ctor("S19034C7", this);} // tgen

static void Test_S19034C7()
{
  extern Class_Descriptor cd_S19034C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19034C7, buf);
    S19034C7 *dp, &lv = *(dp=new (buf) S19034C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19034C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C7)");
    /*is_ambiguous_... S19034C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*), ABISELECT(8,4), "S19034C7");
    check_base_class_offset(lv, (S9166C6*)(S19034C5*), ABISELECT(16,8), "S19034C7");
    check_base_class_offset(lv, (S19034C5*), ABISELECT(16,8), "S19034C7");
    test_class_info(&lv, &cd_S19034C7);
    dp->~S19034C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C7(Test_S19034C7, "S19034C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19034C7C1Ev();
extern void _ZN8S19034C7D2Ev();
Name_Map name_map_S19034C7[] = {
  NSPAIR(_ZN8S19034C7C1Ev),
  NSPAIR(_ZN8S19034C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
static Base_Class bases_S19034C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C7[];
extern void _ZN8S19034C7D1Ev();
extern void _ZN8S19034C7D0Ev();
static  VTBL_ENTRY vtc_S19034C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C7[0]),
  (VTBL_ENTRY)&_ZN8S19034C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19034C7[];
static  VTT_ENTRY vtt_S19034C7[] = {
  {&(_ZTV8S19034C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19034C7[];
extern  VTBL_ENTRY _ZTV8S19034C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C7[];
Class_Descriptor cd_S19034C7 = {  "S19034C7", // class name
  bases_S19034C7, 3,
  &(vtc_S19034C7[0]), // expected_vtbl_contents
  &(vtt_S19034C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19034C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19034C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19034C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C8  : S9166C6 , S19034C5 {
};
//SIG(-1 S19034C8) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S19034C8()
{
  extern Class_Descriptor cd_S19034C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19034C8, buf);
    S19034C8 &lv = *(new (buf) S19034C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19034C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C8)");
    /*is_ambiguous_... S19034C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*), 0, "S19034C8");
    check_base_class_offset(lv, (S9166C6*)(S19034C5*), ABISELECT(8,4), "S19034C8");
    check_base_class_offset(lv, (S19034C5*), ABISELECT(8,4), "S19034C8");
    test_class_info(&lv, &cd_S19034C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C8(Test_S19034C8, "S19034C8", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
static Base_Class bases_S19034C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9166C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C8[];
Class_Descriptor cd_S19034C8 = {  "S19034C8", // class name
  bases_S19034C8, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19034C8),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C9  : virtual S19034C5 , virtual S9166C6 , virtual S19034C7 , virtual S2265C38 {
  int s19034c9f0[9];
  virtual  ~S19034C9(); // _ZN8S19034C9D2Ev
  S19034C9(); // tgen
};
//SIG(-1 S19034C9) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S19034C9 ::~S19034C9(){ note_dtor("S19034C9", this);}
S19034C9 ::S19034C9(){ note_ctor("S19034C9", this);} // tgen

static void Test_S19034C9()
{
  extern Class_Descriptor cd_S19034C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S19034C9, buf);
    S19034C9 *dp, &lv = *(dp=new (buf) S19034C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S19034C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C9)");
    check_base_class_offset(lv, (S9166C6*)(S19034C5*), ABISELECT(48,40), "S19034C9");
    check_base_class_offset(lv, (S19034C5*), ABISELECT(48,40), "S19034C9");
    check_base_class_offset(lv, (S19034C5*)(S19034C7*), ABISELECT(48,40), "S19034C9");
    /*is_ambiguous_... S19034C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*), ABISELECT(72,52), "S19034C9");
    /*is_ambiguous_... S19034C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C7*), ABISELECT(72,52), "S19034C9");
    check_base_class_offset(lv, (S19034C7*), 0, "S19034C9");
    check_base_class_offset(lv, (S2265C38*), 0, "S19034C9");
    check_field_offset(lv, s19034c9f0, ABISELECT(8,4), "S19034C9.s19034c9f0");
    test_class_info(&lv, &cd_S19034C9);
    dp->~S19034C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C9(Test_S19034C9, "S19034C9", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S19034C9C1Ev();
extern void _ZN8S19034C9D2Ev();
Name_Map name_map_S19034C9[] = {
  NSPAIR(_ZN8S19034C9C1Ev),
  NSPAIR(_ZN8S19034C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C7;
extern VTBL_ENTRY _ZTI8S19034C7[];
extern  VTBL_ENTRY _ZTV8S19034C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S19034C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19034C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C9[];
extern void _ZN8S19034C9D1Ev();
extern void _ZN8S19034C9D0Ev();
static  VTBL_ENTRY vtc_S19034C9[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&_ZN8S19034C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S19034C9[];
extern void _ZN8S19034C7D1Ev();
extern void _ZN8S19034C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C9[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C7[0]),
  (VTBL_ENTRY)&_ZN8S19034C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C7D0Ev,
};
static  VTT_ENTRY vtt_S19034C9[] = {
  {&(_ZTV8S19034C9[7]),  7,9},
  {&(_ZTV8S19034C9[7]),  7,9},
  {&(_tg__ZTV8S19034C7__8S19034C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19034C9[];
extern  VTBL_ENTRY _ZTV8S19034C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C9[];
Class_Descriptor cd_S19034C9 = {  "S19034C9", // class name
  bases_S19034C9, 5,
  &(vtc_S19034C9[0]), // expected_vtbl_contents
  &(vtt_S19034C9[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S19034C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19034C9),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19034C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C3  : S2265C38 , virtual S19034C5 , virtual S19034C7 , virtual S19034C8 , virtual S19034C9 {
  __tsi64 s19034c3f0;
  virtual  ~S19034C3(); // _ZN8S19034C3D2Ev
  S19034C3(); // tgen
};
//SIG(-1 S19034C3) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd FL}


 S19034C3 ::~S19034C3(){ note_dtor("S19034C3", this);}
S19034C3 ::S19034C3(){ note_ctor("S19034C3", this);} // tgen

static void Test_S19034C3()
{
  extern Class_Descriptor cd_S19034C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S19034C3, buf);
    S19034C3 *dp, &lv = *(dp=new (buf) S19034C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19034C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C3)");
    /*is_ambiguous_... S19034C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S19034C3");
    /*is_ambiguous_... S19034C3::S19034C5 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C5*), ABISELECT(16,12), "S19034C3");
    /*is_ambiguous_... S19034C3::S19034C5 */ AMB_check_base_class_offset(lv, (S19034C5*), ABISELECT(16,12), "S19034C3");
    check_base_class_offset(lv, (S19034C5*)(S19034C7*), ABISELECT(16,12), "S19034C3");
    check_base_class_offset(lv, (S19034C5*)(S19034C9*), ABISELECT(16,12), "S19034C3");
    /*is_ambiguous_... S19034C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C7*), ABISELECT(40,24), "S19034C3");
    /*is_ambiguous_... S19034C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C9*), ABISELECT(40,24), "S19034C3");
    check_base_class_offset(lv, (S19034C7*), 0, "S19034C3");
    check_base_class_offset(lv, (S19034C7*)(S19034C9*), 0, "S19034C3");
    /*is_ambiguous_... S19034C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C8*), ABISELECT(48,28), "S19034C3");
    check_base_class_offset(lv, (S9166C6*)(S19034C5*)(S19034C8*), ABISELECT(56,32), "S19034C3");
    check_base_class_offset(lv, (S19034C5*)(S19034C8*), ABISELECT(56,32), "S19034C3");
    check_base_class_offset(lv, (S19034C8*), ABISELECT(48,28), "S19034C3");
    check_base_class_offset(lv, (S2265C38*)(S19034C9*), ABISELECT(124,84), "S19034C3");
    check_base_class_offset(lv, (S19034C9*), ABISELECT(80,44), "S19034C3");
    check_field_offset(lv, s19034c3f0, ABISELECT(8,4), "S19034C3.s19034c3f0");
    test_class_info(&lv, &cd_S19034C3);
    dp->~S19034C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C3(Test_S19034C3, "S19034C3", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19034C3C1Ev();
extern void _ZN8S19034C3D2Ev();
Name_Map name_map_S19034C3[] = {
  NSPAIR(_ZN8S19034C3C1Ev),
  NSPAIR(_ZN8S19034C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C7;
extern VTBL_ENTRY _ZTI8S19034C7[];
extern  VTBL_ENTRY _ZTV8S19034C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C7[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S19034C8;
extern VTBL_ENTRY _ZTI8S19034C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19034C9;
extern VTBL_ENTRY _ZTI8S19034C9[];
extern  VTBL_ENTRY _ZTV8S19034C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C9[];
static Base_Class bases_S19034C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9166C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19034C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19034C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19034C9,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C3[];
extern void _ZN8S19034C3D1Ev();
extern void _ZN8S19034C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19034C3D1Ev,_ZThn44_N8S19034C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19034C3D0Ev,_ZThn44_N8S19034C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19034C3[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&_ZN8S19034C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C3D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19034C3[];
extern void _ZN8S19034C7D1Ev();
extern void _ZN8S19034C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C3[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C7[0]),
  (VTBL_ENTRY)&_ZN8S19034C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev)();
extern void _ZN8S19034C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev)();
extern void _ZN8S19034C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C9__8S19034C3[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C9__8S19034C3[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev),
};
static  VTT_ENTRY vtt_S19034C3[] = {
  {&(_ZTV8S19034C3[9]),  9,20},
  {&(_ZTV8S19034C3[9]),  9,20},
  {&(_ZTV8S19034C3[18]),  18,20},
  {&(_tg__ZTV8S19034C7__8S19034C3[4]),  4,6},
  {&(_tg__ZTV8S19034C9__8S19034C3[7]),  7,9},
  {&(_tg__ZTV8S19034C7__8S19034C9__8S19034C3[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19034C3[];
extern  VTBL_ENTRY _ZTV8S19034C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C3[];
static VTBL_ENTRY alt_thunk_names171[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19034C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19034C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C3D0Ev,_ZThn44_N8S19034C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C3D1Ev,_ZThn44_N8S19034C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19034C3 = {  "S19034C3", // class name
  bases_S19034C3, 11,
  &(vtc_S19034C3[0]), // expected_vtbl_contents
  &(vtt_S19034C3[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19034C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19034C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19034C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names171,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C2  : S19034C3 {
  virtual  ~S19034C2(); // _ZN8S19034C2D2Ev
  S19034C2(); // tgen
};
//SIG(-1 S19034C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ m Fp} Fp[2]} VBC6{ VBC5 VBC4 vd} VBC7{ BC5 BC4} VBC8{ VBC4 VBC5 VBC6 VBC3 vd Fi[9]} vd FL} vd}


 S19034C2 ::~S19034C2(){ note_dtor("S19034C2", this);}
S19034C2 ::S19034C2(){ note_ctor("S19034C2", this);} // tgen

static void Test_S19034C2()
{
  extern Class_Descriptor cd_S19034C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S19034C2, buf);
    S19034C2 *dp, &lv = *(dp=new (buf) S19034C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S19034C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C2)");
    /*is_ambiguous_... S19034C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19034C3*), 0, "S19034C2");
    /*is_ambiguous_... S19034C2::S19034C5 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C5*), ABISELECT(16,12), "S19034C2");
    /*is_ambiguous_... S19034C3::S19034C5 */ AMB_check_base_class_offset(lv, (S19034C5*)(S19034C3*), ABISELECT(16,12), "S19034C2");
    check_base_class_offset(lv, (S19034C5*)(S19034C7*), ABISELECT(16,12), "S19034C2");
    check_base_class_offset(lv, (S19034C5*)(S19034C9*), ABISELECT(16,12), "S19034C2");
    /*is_ambiguous_... S19034C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C7*), ABISELECT(40,24), "S19034C2");
    /*is_ambiguous_... S19034C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C9*), ABISELECT(40,24), "S19034C2");
    check_base_class_offset(lv, (S19034C7*)(S19034C3*), 0, "S19034C2");
    check_base_class_offset(lv, (S19034C7*)(S19034C9*), 0, "S19034C2");
    /*is_ambiguous_... S19034C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C8*), ABISELECT(48,28), "S19034C2");
    check_base_class_offset(lv, (S9166C6*)(S19034C5*)(S19034C8*), ABISELECT(56,32), "S19034C2");
    check_base_class_offset(lv, (S19034C5*)(S19034C8*), ABISELECT(56,32), "S19034C2");
    check_base_class_offset(lv, (S19034C8*)(S19034C3*), ABISELECT(48,28), "S19034C2");
    check_base_class_offset(lv, (S2265C38*)(S19034C9*), ABISELECT(124,84), "S19034C2");
    check_base_class_offset(lv, (S19034C9*)(S19034C3*), ABISELECT(80,44), "S19034C2");
    check_base_class_offset(lv, (S19034C3*), 0, "S19034C2");
    test_class_info(&lv, &cd_S19034C2);
    dp->~S19034C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C2(Test_S19034C2, "S19034C2", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN8S19034C2C1Ev();
extern void _ZN8S19034C2D2Ev();
Name_Map name_map_S19034C2[] = {
  NSPAIR(_ZN8S19034C2C1Ev),
  NSPAIR(_ZN8S19034C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C7;
extern VTBL_ENTRY _ZTI8S19034C7[];
extern  VTBL_ENTRY _ZTV8S19034C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C7[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S19034C8;
extern VTBL_ENTRY _ZTI8S19034C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19034C9;
extern VTBL_ENTRY _ZTI8S19034C9[];
extern  VTBL_ENTRY _ZTV8S19034C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C9[];
extern Class_Descriptor cd_S19034C3;
extern VTBL_ENTRY _ZTI8S19034C3[];
extern  VTBL_ENTRY _ZTV8S19034C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C3[];
static Base_Class bases_S19034C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19034C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19034C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(124,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19034C9,    ABISELECT(80,44), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19034C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C2[];
extern void _ZN8S19034C2D1Ev();
extern void _ZN8S19034C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19034C2D1Ev,_ZThn44_N8S19034C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19034C2D0Ev,_ZThn44_N8S19034C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19034C2[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C2[0]),
  (VTBL_ENTRY)&_ZN8S19034C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C2D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19034C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19034C2[];
extern void _ZN8S19034C3D1Ev();
extern void _ZN8S19034C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19034C3__8S19034C2[] = {
  ABISELECT(124,84),
  ABISELECT(80,44),
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&_ZN8S19034C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19034C3D1Ev,_ZThn44_N8S19034C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19034C3D0Ev,_ZThn44_N8S19034C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C9__8S19034C3__8S19034C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev),
};
extern void _ZN8S19034C7D1Ev();
extern void _ZN8S19034C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C2[] = {
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C7[0]),
  (VTBL_ENTRY)&_ZN8S19034C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev)();
extern void _ZN8S19034C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev)();
extern void _ZN8S19034C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C9__8S19034C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C9__8S19034C2[] = {
  ABISELECT(80,44),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev),
};
static  VTT_ENTRY vtt_S19034C2[] = {
  {&(_ZTV8S19034C2[9]),  9,20},
  {&(_tg__ZTV8S19034C3__8S19034C2[9]),  9,11},
  {&(_tg__ZTV8S19034C3__8S19034C2[9]),  9,11},
  {&(_tg__ZTV8S19034C9__8S19034C3__8S19034C2[7]),  7,9},
  {&(_ZTV8S19034C2[9]),  9,20},
  {&(_ZTV8S19034C2[18]),  18,20},
  {&(_tg__ZTV8S19034C7__8S19034C2[4]),  4,6},
  {&(_tg__ZTV8S19034C9__8S19034C2[7]),  7,9},
  {&(_tg__ZTV8S19034C7__8S19034C9__8S19034C2[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19034C2[];
extern  VTBL_ENTRY _ZTV8S19034C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C2[];
static VTBL_ENTRY alt_thunk_names172[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19034C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19034C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C3D0Ev,_ZThn44_N8S19034C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C3D1Ev,_ZThn44_N8S19034C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C2D0Ev,_ZThn44_N8S19034C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C2D1Ev,_ZThn44_N8S19034C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19034C2 = {  "S19034C2", // class name
  bases_S19034C2, 12,
  &(vtc_S19034C2[0]), // expected_vtbl_contents
  &(vtt_S19034C2[0]), // expected_vtt_contents
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI8S19034C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19034C2),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19034C2),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names172,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19034C1  : virtual S19034C2 {
  ~S19034C1(); // tgen
  S19034C1(); // tgen
};
//SIG(1 S19034C1) C1{ VBC2{ BC3{ BC4{ m} VBC5{ BC6{ m Fp} Fp[2]} VBC7{ VBC6 VBC5 vd} VBC8{ BC6 BC5} VBC9{ VBC5 VBC6 VBC7 VBC4 vd Fi[9]} vd FL} vd}}


S19034C1 ::~S19034C1(){ note_dtor("S19034C1", this);} // tgen
S19034C1 ::S19034C1(){ note_ctor("S19034C1", this);} // tgen

static void Test_S19034C1()
{
  extern Class_Descriptor cd_S19034C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S19034C1, buf);
    S19034C1 *dp, &lv = *(dp=new (buf) S19034C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S19034C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19034C1)");
    /*is_ambiguous_... S19034C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19034C3*)(S19034C2*), ABISELECT(8,4), "S19034C1");
    /*is_ambiguous_... S19034C1::S19034C5 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C5*), ABISELECT(24,16), "S19034C1");
    /*is_ambiguous_... S19034C3::S19034C5 */ AMB_check_base_class_offset(lv, (S19034C5*)(S19034C3*)(S19034C2*), ABISELECT(24,16), "S19034C1");
    check_base_class_offset(lv, (S19034C5*)(S19034C7*), ABISELECT(24,16), "S19034C1");
    check_base_class_offset(lv, (S19034C5*)(S19034C9*), ABISELECT(24,16), "S19034C1");
    /*is_ambiguous_... S19034C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C7*), ABISELECT(48,28), "S19034C1");
    /*is_ambiguous_... S19034C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C9*), ABISELECT(48,28), "S19034C1");
    check_base_class_offset(lv, (S19034C7*)(S19034C3*)(S19034C2*), 0, "S19034C1");
    check_base_class_offset(lv, (S19034C7*)(S19034C9*), 0, "S19034C1");
    /*is_ambiguous_... S19034C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19034C8*), ABISELECT(56,32), "S19034C1");
    check_base_class_offset(lv, (S9166C6*)(S19034C5*)(S19034C8*), ABISELECT(64,36), "S19034C1");
    check_base_class_offset(lv, (S19034C5*)(S19034C8*), ABISELECT(64,36), "S19034C1");
    check_base_class_offset(lv, (S19034C8*)(S19034C3*)(S19034C2*), ABISELECT(56,32), "S19034C1");
    check_base_class_offset(lv, (S2265C38*)(S19034C9*), 0, "S19034C1");
    check_base_class_offset(lv, (S19034C9*)(S19034C3*)(S19034C2*), ABISELECT(88,48), "S19034C1");
    check_base_class_offset(lv, (S19034C3*)(S19034C2*), ABISELECT(8,4), "S19034C1");
    check_base_class_offset(lv, (S19034C2*), ABISELECT(8,4), "S19034C1");
    test_class_info(&lv, &cd_S19034C1);
    dp->~S19034C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19034C1(Test_S19034C1, "S19034C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN8S19034C1C1Ev();
extern void _ZN8S19034C1D1Ev();
Name_Map name_map_S19034C1[] = {
  NSPAIR(_ZN8S19034C1C1Ev),
  NSPAIR(_ZN8S19034C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C7;
extern VTBL_ENTRY _ZTI8S19034C7[];
extern  VTBL_ENTRY _ZTV8S19034C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C7[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19034C5;
extern VTBL_ENTRY _ZTI8S19034C5[];
extern Class_Descriptor cd_S19034C8;
extern VTBL_ENTRY _ZTI8S19034C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19034C9;
extern VTBL_ENTRY _ZTI8S19034C9[];
extern  VTBL_ENTRY _ZTV8S19034C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C9[];
extern Class_Descriptor cd_S19034C3;
extern VTBL_ENTRY _ZTI8S19034C3[];
extern  VTBL_ENTRY _ZTV8S19034C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C3[];
extern Class_Descriptor cd_S19034C2;
extern VTBL_ENTRY _ZTI8S19034C2[];
extern  VTBL_ENTRY _ZTV8S19034C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C2[];
static Base_Class bases_S19034C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19034C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19034C5,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19034C8,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19034C9,    ABISELECT(88,48), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19034C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19034C2,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19034C1[];
extern void _ZN8S19034C1D1Ev();
extern void _ZN8S19034C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19034C1D1Ev,_ZTv0_n20_N8S19034C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19034C1D1Ev,_ZThn4_N8S19034C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C1D0Ev,_ZTv0_n20_N8S19034C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19034C1D0Ev,_ZThn4_N8S19034C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C1D1Ev,_ZTv0_n20_N8S19034C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19034C1D1Ev,_ZThn48_N8S19034C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C1D0Ev,_ZTv0_n20_N8S19034C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19034C1D0Ev,_ZThn48_N8S19034C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19034C1[] = {
  0,
  ABISELECT(88,48),
  ABISELECT(56,32),
  0,
  ABISELECT(8,4),
  0,
  ABISELECT(24,16),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C1[0]),
  (VTBL_ENTRY)&_ZN8S19034C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(80,44),
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(16,12),
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19034C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C1D1Ev,_ZTv0_n20_N8S19034C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C1D0Ev,_ZTv0_n20_N8S19034C1D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19034C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C1D1Ev,_ZTv0_n20_N8S19034C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C1D0Ev,_ZTv0_n20_N8S19034C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19034C1[];
extern void ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev)();
extern void _ZN8S19034C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev)();
extern void _ZN8S19034C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C2__8S19034C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(80,44),
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev)();
extern void _ZN8S19034C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev)();
extern void _ZN8S19034C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C38S19034C2__8S19034C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(80,44),
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C38S19034C2__8S19034C1[] = {
  ABISELECT(8,4),
  ABISELECT(24,16),
  ABISELECT(48,28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19034C3D1Ev,_ZThn44_N8S19034C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19034C3D0Ev,_ZThn44_N8S19034C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C9__8S19034C38S19034C2__8S19034C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19034C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C2__8S19034C1[] = {
  ABISELECT(8,4),
  ABISELECT(24,16),
  ABISELECT(48,28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19034C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19034C2D1Ev,_ZThn44_N8S19034C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19034C2D0Ev,_ZThn44_N8S19034C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C9__8S19034C2__8S19034C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  ABISELECT(-80,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19034C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev),
};
extern void _ZN8S19034C7D1Ev();
extern void _ZN8S19034C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C1[] = {
  ABISELECT(24,16),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C7[0]),
  (VTBL_ENTRY)&_ZN8S19034C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19034C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev)();
extern void _ZN8S19034C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev)();
extern void _ZN8S19034C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19034C9__8S19034C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19034C7__8S19034C9__8S19034C1[] = {
  ABISELECT(88,48),
  ABISELECT(24,16),
  ABISELECT(48,28),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S19034C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev),
};
static  VTT_ENTRY vtt_S19034C1[] = {
  {&(_ZTV8S19034C1[10]),  10,32},
  {&(_ZTV8S19034C1[21]),  21,32},
  {&(_ZTV8S19034C1[10]),  10,32},
  {&(_ZTV8S19034C1[30]),  30,32},
  {&(_tg__ZTV8S19034C2__8S19034C1[9]),  9,11},
  {&(_tg__ZTV8S19034C38S19034C2__8S19034C1[9]),  9,11},
  {&(_tg__ZTV8S19034C7__8S19034C38S19034C2__8S19034C1[5]),  5,7},
  {&(_tg__ZTV8S19034C9__8S19034C38S19034C2__8S19034C1[7]),  7,9},
  {&(_tg__ZTV8S19034C7__8S19034C2__8S19034C1[5]),  5,7},
  {&(_tg__ZTV8S19034C9__8S19034C2__8S19034C1[7]),  7,9},
  {&(_tg__ZTV8S19034C7__8S19034C1[4]),  4,6},
  {&(_tg__ZTV8S19034C9__8S19034C1[7]),  7,9},
  {&(_tg__ZTV8S19034C7__8S19034C9__8S19034C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19034C1[];
extern  VTBL_ENTRY _ZTV8S19034C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19034C1[];
static VTBL_ENTRY alt_thunk_names173[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C9D0Ev,_ZTv0_n20_N8S19034C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19034C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C9D1Ev,_ZTv0_n20_N8S19034C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19034C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C3D0Ev,_ZTv0_n20_N8S19034C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C3D0Ev,_ZThn44_N8S19034C3D0Ev),
  (VTBL_ENTRY)_ZN8S19034C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C3D1Ev,_ZTv0_n20_N8S19034C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C3D1Ev,_ZThn44_N8S19034C3D1Ev),
  (VTBL_ENTRY)_ZN8S19034C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C2D0Ev,_ZTv0_n20_N8S19034C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C2D0Ev,_ZThn44_N8S19034C2D0Ev),
  (VTBL_ENTRY)_ZN8S19034C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C2D1Ev,_ZTv0_n20_N8S19034C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19034C2D1Ev,_ZThn44_N8S19034C2D1Ev),
  (VTBL_ENTRY)_ZN8S19034C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C1D0Ev,_ZTv0_n20_N8S19034C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19034C1D0Ev,_ZThn48_N8S19034C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19034C1D0Ev,_ZThn4_N8S19034C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19034C1D1Ev,_ZTv0_n20_N8S19034C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19034C1D1Ev,_ZThn48_N8S19034C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19034C1D1Ev,_ZThn4_N8S19034C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19034C1 = {  "S19034C1", // class name
  bases_S19034C1, 13,
  &(vtc_S19034C1[0]), // expected_vtbl_contents
  &(vtt_S19034C1[0]), // expected_vtt_contents
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI8S19034C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19034C1),32, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19034C1),13, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names173,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C5  : S9166C6 {
  void *s19033c5f0[2];
};
//SIG(-1 S19033C5) C1{ BC2{ m Fp} Fp[2]}



static void Test_S19033C5()
{
  extern Class_Descriptor cd_S19033C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19033C5, buf);
    S19033C5 &lv = *(new (buf) S19033C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19033C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C5)");
    check_base_class_offset(lv, (S9166C6*), 0, "S19033C5");
    check_field_offset(lv, s19033c5f0, ABISELECT(8,4), "S19033C5.s19033c5f0");
    test_class_info(&lv, &cd_S19033C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C5(Test_S19033C5, "S19033C5", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
static Base_Class bases_S19033C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C5[];
Class_Descriptor cd_S19033C5 = {  "S19033C5", // class name
  bases_S19033C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19033C5),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C7  : virtual S9166C6 , virtual S19033C5 {
  virtual  ~S19033C7(); // _ZN8S19033C7D2Ev
  S19033C7(); // tgen
};
//SIG(-1 S19033C7) C1{ VBC2{ m Fp} VBC3{ BC2 Fp[2]} vd}


 S19033C7 ::~S19033C7(){ note_dtor("S19033C7", this);}
S19033C7 ::S19033C7(){ note_ctor("S19033C7", this);} // tgen

static void Test_S19033C7()
{
  extern Class_Descriptor cd_S19033C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19033C7, buf);
    S19033C7 *dp, &lv = *(dp=new (buf) S19033C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19033C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C7)");
    /*is_ambiguous_... S19033C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*), ABISELECT(8,4), "S19033C7");
    check_base_class_offset(lv, (S9166C6*)(S19033C5*), ABISELECT(16,8), "S19033C7");
    check_base_class_offset(lv, (S19033C5*), ABISELECT(16,8), "S19033C7");
    test_class_info(&lv, &cd_S19033C7);
    dp->~S19033C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C7(Test_S19033C7, "S19033C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19033C7C1Ev();
extern void _ZN8S19033C7D2Ev();
Name_Map name_map_S19033C7[] = {
  NSPAIR(_ZN8S19033C7C1Ev),
  NSPAIR(_ZN8S19033C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
static Base_Class bases_S19033C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C7[];
extern void _ZN8S19033C7D1Ev();
extern void _ZN8S19033C7D0Ev();
static  VTBL_ENTRY vtc_S19033C7[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C7[0]),
  (VTBL_ENTRY)&_ZN8S19033C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19033C7[];
static  VTT_ENTRY vtt_S19033C7[] = {
  {&(_ZTV8S19033C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19033C7[];
extern  VTBL_ENTRY _ZTV8S19033C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C7[];
Class_Descriptor cd_S19033C7 = {  "S19033C7", // class name
  bases_S19033C7, 3,
  &(vtc_S19033C7[0]), // expected_vtbl_contents
  &(vtt_S19033C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19033C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19033C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19033C7),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C8  : S9166C6 , S19033C5 {
};
//SIG(-1 S19033C8) C1{ BC2{ m Fp} BC3{ BC2 Fp[2]}}



static void Test_S19033C8()
{
  extern Class_Descriptor cd_S19033C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19033C8, buf);
    S19033C8 &lv = *(new (buf) S19033C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19033C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C8)");
    /*is_ambiguous_... S19033C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*), 0, "S19033C8");
    check_base_class_offset(lv, (S9166C6*)(S19033C5*), ABISELECT(8,4), "S19033C8");
    check_base_class_offset(lv, (S19033C5*), ABISELECT(8,4), "S19033C8");
    test_class_info(&lv, &cd_S19033C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C8(Test_S19033C8, "S19033C8", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
static Base_Class bases_S19033C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9166C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C8[];
Class_Descriptor cd_S19033C8 = {  "S19033C8", // class name
  bases_S19033C8, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19033C8),ABISELECT(56,32), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C9  : virtual S19033C5 , virtual S9166C6 , virtual S19033C7 , virtual S2265C38 {
  int s19033c9f0[9];
  virtual  ~S19033C9(); // _ZN8S19033C9D2Ev
  S19033C9(); // tgen
};
//SIG(-1 S19033C9) C1{ VBC2{ BC3{ m Fp} Fp[2]} VBC3 VBC4{ VBC3 VBC2 vd} VBC5{ m} vd Fi[9]}


 S19033C9 ::~S19033C9(){ note_dtor("S19033C9", this);}
S19033C9 ::S19033C9(){ note_ctor("S19033C9", this);} // tgen

static void Test_S19033C9()
{
  extern Class_Descriptor cd_S19033C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S19033C9, buf);
    S19033C9 *dp, &lv = *(dp=new (buf) S19033C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S19033C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C9)");
    check_base_class_offset(lv, (S9166C6*)(S19033C5*), ABISELECT(48,40), "S19033C9");
    check_base_class_offset(lv, (S19033C5*), ABISELECT(48,40), "S19033C9");
    check_base_class_offset(lv, (S19033C5*)(S19033C7*), ABISELECT(48,40), "S19033C9");
    /*is_ambiguous_... S19033C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*), ABISELECT(72,52), "S19033C9");
    /*is_ambiguous_... S19033C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C7*), ABISELECT(72,52), "S19033C9");
    check_base_class_offset(lv, (S19033C7*), 0, "S19033C9");
    check_base_class_offset(lv, (S2265C38*), 0, "S19033C9");
    check_field_offset(lv, s19033c9f0, ABISELECT(8,4), "S19033C9.s19033c9f0");
    test_class_info(&lv, &cd_S19033C9);
    dp->~S19033C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C9(Test_S19033C9, "S19033C9", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S19033C9C1Ev();
extern void _ZN8S19033C9D2Ev();
Name_Map name_map_S19033C9[] = {
  NSPAIR(_ZN8S19033C9C1Ev),
  NSPAIR(_ZN8S19033C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C7;
extern VTBL_ENTRY _ZTI8S19033C7[];
extern  VTBL_ENTRY _ZTV8S19033C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C7[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S19033C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(48,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19033C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C9[];
extern void _ZN8S19033C9D1Ev();
extern void _ZN8S19033C9D0Ev();
static  VTBL_ENTRY vtc_S19033C9[] = {
  0,
  0,
  0,
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&_ZN8S19033C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C9D0Ev,
};
extern VTBL_ENTRY _ZTV8S19033C9[];
extern void _ZN8S19033C7D1Ev();
extern void _ZN8S19033C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C9[] = {
  ABISELECT(48,40),
  ABISELECT(72,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C7[0]),
  (VTBL_ENTRY)&_ZN8S19033C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C7D0Ev,
};
static  VTT_ENTRY vtt_S19033C9[] = {
  {&(_ZTV8S19033C9[7]),  7,9},
  {&(_ZTV8S19033C9[7]),  7,9},
  {&(_tg__ZTV8S19033C7__8S19033C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19033C9[];
extern  VTBL_ENTRY _ZTV8S19033C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C9[];
Class_Descriptor cd_S19033C9 = {  "S19033C9", // class name
  bases_S19033C9, 5,
  &(vtc_S19033C9[0]), // expected_vtbl_contents
  &(vtt_S19033C9[0]), // expected_vtt_contents
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S19033C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19033C9),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19033C9),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C3  : S2265C38 , virtual S19033C5 , virtual S19033C7 , virtual S19033C8 , virtual S19033C9 {
  long s19033c3f0;
  virtual  ~S19033C3(); // _ZN8S19033C3D2Ev
  S19033C3(); // tgen
};
//SIG(-1 S19033C3) C1{ BC2{ m} VBC3{ BC4{ m Fp} Fp[2]} VBC5{ VBC4 VBC3 vd} VBC6{ BC4 BC3} VBC7{ VBC3 VBC4 VBC5 VBC2 vd Fi[9]} vd Fl}


 S19033C3 ::~S19033C3(){ note_dtor("S19033C3", this);}
S19033C3 ::S19033C3(){ note_ctor("S19033C3", this);} // tgen

static void Test_S19033C3()
{
  extern Class_Descriptor cd_S19033C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S19033C3, buf);
    S19033C3 *dp, &lv = *(dp=new (buf) S19033C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S19033C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C3)");
    /*is_ambiguous_... S19033C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*), 0, "S19033C3");
    /*is_ambiguous_... S19033C3::S19033C5 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C5*), ABISELECT(16,8), "S19033C3");
    /*is_ambiguous_... S19033C3::S19033C5 */ AMB_check_base_class_offset(lv, (S19033C5*), ABISELECT(16,8), "S19033C3");
    check_base_class_offset(lv, (S19033C5*)(S19033C7*), ABISELECT(16,8), "S19033C3");
    check_base_class_offset(lv, (S19033C5*)(S19033C9*), ABISELECT(16,8), "S19033C3");
    /*is_ambiguous_... S19033C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C7*), ABISELECT(40,20), "S19033C3");
    /*is_ambiguous_... S19033C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C9*), ABISELECT(40,20), "S19033C3");
    check_base_class_offset(lv, (S19033C7*), 0, "S19033C3");
    check_base_class_offset(lv, (S19033C7*)(S19033C9*), 0, "S19033C3");
    /*is_ambiguous_... S19033C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C8*), ABISELECT(48,24), "S19033C3");
    check_base_class_offset(lv, (S9166C6*)(S19033C5*)(S19033C8*), ABISELECT(56,28), "S19033C3");
    check_base_class_offset(lv, (S19033C5*)(S19033C8*), ABISELECT(56,28), "S19033C3");
    check_base_class_offset(lv, (S19033C8*), ABISELECT(48,24), "S19033C3");
    check_base_class_offset(lv, (S2265C38*)(S19033C9*), ABISELECT(124,80), "S19033C3");
    check_base_class_offset(lv, (S19033C9*), ABISELECT(80,40), "S19033C3");
    check_field_offset(lv, s19033c3f0, ABISELECT(8,4), "S19033C3.s19033c3f0");
    test_class_info(&lv, &cd_S19033C3);
    dp->~S19033C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C3(Test_S19033C3, "S19033C3", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S19033C3C1Ev();
extern void _ZN8S19033C3D2Ev();
Name_Map name_map_S19033C3[] = {
  NSPAIR(_ZN8S19033C3C1Ev),
  NSPAIR(_ZN8S19033C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C7;
extern VTBL_ENTRY _ZTI8S19033C7[];
extern  VTBL_ENTRY _ZTV8S19033C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C7[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S19033C8;
extern VTBL_ENTRY _ZTI8S19033C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19033C9;
extern VTBL_ENTRY _ZTI8S19033C9[];
extern  VTBL_ENTRY _ZTV8S19033C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C9[];
static Base_Class bases_S19033C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S9166C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19033C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19033C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19033C9,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C3[];
extern void _ZN8S19033C3D1Ev();
extern void _ZN8S19033C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19033C3D1Ev,_ZThn40_N8S19033C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19033C3D0Ev,_ZThn40_N8S19033C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19033C3[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&_ZN8S19033C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C3D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S19033C3[];
extern void _ZN8S19033C7D1Ev();
extern void _ZN8S19033C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C3[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C7[0]),
  (VTBL_ENTRY)&_ZN8S19033C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev)();
extern void _ZN8S19033C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev)();
extern void _ZN8S19033C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C9__8S19033C3[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C9__8S19033C3[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev),
};
static  VTT_ENTRY vtt_S19033C3[] = {
  {&(_ZTV8S19033C3[9]),  9,20},
  {&(_ZTV8S19033C3[9]),  9,20},
  {&(_ZTV8S19033C3[18]),  18,20},
  {&(_tg__ZTV8S19033C7__8S19033C3[4]),  4,6},
  {&(_tg__ZTV8S19033C9__8S19033C3[7]),  7,9},
  {&(_tg__ZTV8S19033C7__8S19033C9__8S19033C3[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19033C3[];
extern  VTBL_ENTRY _ZTV8S19033C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C3[];
static VTBL_ENTRY alt_thunk_names174[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19033C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19033C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C3D0Ev,_ZThn40_N8S19033C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C3D1Ev,_ZThn40_N8S19033C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19033C3 = {  "S19033C3", // class name
  bases_S19033C3, 11,
  &(vtc_S19033C3[0]), // expected_vtbl_contents
  &(vtt_S19033C3[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S19033C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19033C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19033C3),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names174,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C2  : S19033C3 {
  virtual  ~S19033C2(); // _ZN8S19033C2D2Ev
  S19033C2(); // tgen
};
//SIG(-1 S19033C2) C1{ BC2{ BC3{ m} VBC4{ BC5{ m Fp} Fp[2]} VBC6{ VBC5 VBC4 vd} VBC7{ BC5 BC4} VBC8{ VBC4 VBC5 VBC6 VBC3 vd Fi[9]} vd Fl} vd}


 S19033C2 ::~S19033C2(){ note_dtor("S19033C2", this);}
S19033C2 ::S19033C2(){ note_ctor("S19033C2", this);} // tgen

static void Test_S19033C2()
{
  extern Class_Descriptor cd_S19033C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S19033C2, buf);
    S19033C2 *dp, &lv = *(dp=new (buf) S19033C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S19033C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C2)");
    /*is_ambiguous_... S19033C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19033C3*), 0, "S19033C2");
    /*is_ambiguous_... S19033C2::S19033C5 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C5*), ABISELECT(16,8), "S19033C2");
    /*is_ambiguous_... S19033C3::S19033C5 */ AMB_check_base_class_offset(lv, (S19033C5*)(S19033C3*), ABISELECT(16,8), "S19033C2");
    check_base_class_offset(lv, (S19033C5*)(S19033C7*), ABISELECT(16,8), "S19033C2");
    check_base_class_offset(lv, (S19033C5*)(S19033C9*), ABISELECT(16,8), "S19033C2");
    /*is_ambiguous_... S19033C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C7*), ABISELECT(40,20), "S19033C2");
    /*is_ambiguous_... S19033C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C9*), ABISELECT(40,20), "S19033C2");
    check_base_class_offset(lv, (S19033C7*)(S19033C3*), 0, "S19033C2");
    check_base_class_offset(lv, (S19033C7*)(S19033C9*), 0, "S19033C2");
    /*is_ambiguous_... S19033C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C8*), ABISELECT(48,24), "S19033C2");
    check_base_class_offset(lv, (S9166C6*)(S19033C5*)(S19033C8*), ABISELECT(56,28), "S19033C2");
    check_base_class_offset(lv, (S19033C5*)(S19033C8*), ABISELECT(56,28), "S19033C2");
    check_base_class_offset(lv, (S19033C8*)(S19033C3*), ABISELECT(48,24), "S19033C2");
    check_base_class_offset(lv, (S2265C38*)(S19033C9*), ABISELECT(124,80), "S19033C2");
    check_base_class_offset(lv, (S19033C9*)(S19033C3*), ABISELECT(80,40), "S19033C2");
    check_base_class_offset(lv, (S19033C3*), 0, "S19033C2");
    test_class_info(&lv, &cd_S19033C2);
    dp->~S19033C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C2(Test_S19033C2, "S19033C2", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S19033C2C1Ev();
extern void _ZN8S19033C2D2Ev();
Name_Map name_map_S19033C2[] = {
  NSPAIR(_ZN8S19033C2C1Ev),
  NSPAIR(_ZN8S19033C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C7;
extern VTBL_ENTRY _ZTI8S19033C7[];
extern  VTBL_ENTRY _ZTV8S19033C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C7[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S19033C8;
extern VTBL_ENTRY _ZTI8S19033C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19033C9;
extern VTBL_ENTRY _ZTI8S19033C9[];
extern  VTBL_ENTRY _ZTV8S19033C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C9[];
extern Class_Descriptor cd_S19033C3;
extern VTBL_ENTRY _ZTI8S19033C3[];
extern  VTBL_ENTRY _ZTV8S19033C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C3[];
static Base_Class bases_S19033C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19033C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19033C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    ABISELECT(124,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19033C9,    ABISELECT(80,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19033C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C2[];
extern void _ZN8S19033C2D1Ev();
extern void _ZN8S19033C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19033C2D1Ev,_ZThn40_N8S19033C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19033C2D0Ev,_ZThn40_N8S19033C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19033C2[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C2[0]),
  (VTBL_ENTRY)&_ZN8S19033C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C2D0Ev,
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19033C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19033C2[];
extern void _ZN8S19033C3D1Ev();
extern void _ZN8S19033C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19033C3__8S19033C2[] = {
  ABISELECT(124,80),
  ABISELECT(80,40),
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&_ZN8S19033C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19033C3D1Ev,_ZThn40_N8S19033C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19033C3D0Ev,_ZThn40_N8S19033C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C9__8S19033C3__8S19033C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev),
};
extern void _ZN8S19033C7D1Ev();
extern void _ZN8S19033C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C2[] = {
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C7[0]),
  (VTBL_ENTRY)&_ZN8S19033C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev)();
extern void _ZN8S19033C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev)();
extern void _ZN8S19033C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C9__8S19033C2[] = {
  ABISELECT(44,40),
  ABISELECT(-80,-40),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C9__8S19033C2[] = {
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev),
};
static  VTT_ENTRY vtt_S19033C2[] = {
  {&(_ZTV8S19033C2[9]),  9,20},
  {&(_tg__ZTV8S19033C3__8S19033C2[9]),  9,11},
  {&(_tg__ZTV8S19033C3__8S19033C2[9]),  9,11},
  {&(_tg__ZTV8S19033C9__8S19033C3__8S19033C2[7]),  7,9},
  {&(_ZTV8S19033C2[9]),  9,20},
  {&(_ZTV8S19033C2[18]),  18,20},
  {&(_tg__ZTV8S19033C7__8S19033C2[4]),  4,6},
  {&(_tg__ZTV8S19033C9__8S19033C2[7]),  7,9},
  {&(_tg__ZTV8S19033C7__8S19033C9__8S19033C2[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19033C2[];
extern  VTBL_ENTRY _ZTV8S19033C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C2[];
static VTBL_ENTRY alt_thunk_names175[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19033C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19033C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C3D0Ev,_ZThn40_N8S19033C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C3D1Ev,_ZThn40_N8S19033C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C2D0Ev,_ZThn40_N8S19033C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C2D1Ev,_ZThn40_N8S19033C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19033C2 = {  "S19033C2", // class name
  bases_S19033C2, 12,
  &(vtc_S19033C2[0]), // expected_vtbl_contents
  &(vtt_S19033C2[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S19033C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19033C2),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19033C2),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names175,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19033C1  : virtual S19033C2 {
  ~S19033C1(); // tgen
  S19033C1(); // tgen
};
//SIG(1 S19033C1) C1{ VBC2{ BC3{ BC4{ m} VBC5{ BC6{ m Fp} Fp[2]} VBC7{ VBC6 VBC5 vd} VBC8{ BC6 BC5} VBC9{ VBC5 VBC6 VBC7 VBC4 vd Fi[9]} vd Fl} vd}}


S19033C1 ::~S19033C1(){ note_dtor("S19033C1", this);} // tgen
S19033C1 ::S19033C1(){ note_ctor("S19033C1", this);} // tgen

static void Test_S19033C1()
{
  extern Class_Descriptor cd_S19033C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S19033C1, buf);
    S19033C1 *dp, &lv = *(dp=new (buf) S19033C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S19033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19033C1)");
    /*is_ambiguous_... S19033C3::S2265C38 */ AMB_check_base_class_offset(lv, (S2265C38*)(S19033C3*)(S19033C2*), ABISELECT(8,4), "S19033C1");
    /*is_ambiguous_... S19033C1::S19033C5 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C5*), ABISELECT(24,12), "S19033C1");
    /*is_ambiguous_... S19033C3::S19033C5 */ AMB_check_base_class_offset(lv, (S19033C5*)(S19033C3*)(S19033C2*), ABISELECT(24,12), "S19033C1");
    check_base_class_offset(lv, (S19033C5*)(S19033C7*), ABISELECT(24,12), "S19033C1");
    check_base_class_offset(lv, (S19033C5*)(S19033C9*), ABISELECT(24,12), "S19033C1");
    /*is_ambiguous_... S19033C7::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C7*), ABISELECT(48,24), "S19033C1");
    /*is_ambiguous_... S19033C9::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C9*), ABISELECT(48,24), "S19033C1");
    check_base_class_offset(lv, (S19033C7*)(S19033C3*)(S19033C2*), 0, "S19033C1");
    check_base_class_offset(lv, (S19033C7*)(S19033C9*), 0, "S19033C1");
    /*is_ambiguous_... S19033C8::S9166C6 */ AMB_check_base_class_offset(lv, (S9166C6*)(S19033C8*), ABISELECT(56,28), "S19033C1");
    check_base_class_offset(lv, (S9166C6*)(S19033C5*)(S19033C8*), ABISELECT(64,32), "S19033C1");
    check_base_class_offset(lv, (S19033C5*)(S19033C8*), ABISELECT(64,32), "S19033C1");
    check_base_class_offset(lv, (S19033C8*)(S19033C3*)(S19033C2*), ABISELECT(56,28), "S19033C1");
    check_base_class_offset(lv, (S2265C38*)(S19033C9*), 0, "S19033C1");
    check_base_class_offset(lv, (S19033C9*)(S19033C3*)(S19033C2*), ABISELECT(88,44), "S19033C1");
    check_base_class_offset(lv, (S19033C3*)(S19033C2*), ABISELECT(8,4), "S19033C1");
    check_base_class_offset(lv, (S19033C2*), ABISELECT(8,4), "S19033C1");
    test_class_info(&lv, &cd_S19033C1);
    dp->~S19033C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19033C1(Test_S19033C1, "S19033C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN8S19033C1C1Ev();
extern void _ZN8S19033C1D1Ev();
Name_Map name_map_S19033C1[] = {
  NSPAIR(_ZN8S19033C1C1Ev),
  NSPAIR(_ZN8S19033C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C7;
extern VTBL_ENTRY _ZTI8S19033C7[];
extern  VTBL_ENTRY _ZTV8S19033C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C7[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19033C5;
extern VTBL_ENTRY _ZTI8S19033C5[];
extern Class_Descriptor cd_S19033C8;
extern VTBL_ENTRY _ZTI8S19033C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19033C9;
extern VTBL_ENTRY _ZTI8S19033C9[];
extern  VTBL_ENTRY _ZTV8S19033C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C9[];
extern Class_Descriptor cd_S19033C3;
extern VTBL_ENTRY _ZTI8S19033C3[];
extern  VTBL_ENTRY _ZTV8S19033C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C3[];
extern Class_Descriptor cd_S19033C2;
extern VTBL_ENTRY _ZTI8S19033C2[];
extern  VTBL_ENTRY _ZTV8S19033C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C2[];
static Base_Class bases_S19033C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19033C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S9166C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S9166C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19033C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19033C8,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19033C9,    ABISELECT(88,44), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19033C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19033C2,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19033C1[];
extern void _ZN8S19033C1D1Ev();
extern void _ZN8S19033C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19033C1D1Ev,_ZTv0_n20_N8S19033C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19033C1D1Ev,_ZThn4_N8S19033C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C1D0Ev,_ZTv0_n20_N8S19033C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19033C1D0Ev,_ZThn4_N8S19033C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C1D1Ev,_ZTv0_n20_N8S19033C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S19033C1D1Ev,_ZThn44_N8S19033C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C1D0Ev,_ZTv0_n20_N8S19033C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S19033C1D0Ev,_ZThn44_N8S19033C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19033C1[] = {
  0,
  ABISELECT(88,44),
  ABISELECT(56,28),
  0,
  ABISELECT(8,4),
  0,
  ABISELECT(24,12),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C1[0]),
  (VTBL_ENTRY)&_ZN8S19033C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(80,40),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19033C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C1D1Ev,_ZTv0_n20_N8S19033C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C1D0Ev,_ZTv0_n20_N8S19033C1D0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S19033C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C1D1Ev,_ZTv0_n20_N8S19033C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C1D0Ev,_ZTv0_n20_N8S19033C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19033C1[];
extern void ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev)();
extern void _ZN8S19033C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev)();
extern void _ZN8S19033C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C2__8S19033C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(80,40),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev)();
extern void _ZN8S19033C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev)();
extern void _ZN8S19033C3D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C38S19033C2__8S19033C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(80,40),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C38S19033C2__8S19033C1[] = {
  ABISELECT(8,4),
  ABISELECT(24,12),
  ABISELECT(48,24),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev)();
extern void ABISELECT(_ZThn80_N8S19033C3D1Ev,_ZThn40_N8S19033C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev)();
extern void ABISELECT(_ZThn80_N8S19033C3D0Ev,_ZThn40_N8S19033C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C9__8S19033C38S19033C2__8S19033C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19033C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C2__8S19033C1[] = {
  ABISELECT(8,4),
  ABISELECT(24,12),
  ABISELECT(48,24),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19033C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S19033C2D1Ev,_ZThn40_N8S19033C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S19033C2D0Ev,_ZThn40_N8S19033C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C9__8S19033C2__8S19033C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-80,-40),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19033C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev),
};
extern void _ZN8S19033C7D1Ev();
extern void _ZN8S19033C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C1[] = {
  ABISELECT(24,12),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C7[0]),
  (VTBL_ENTRY)&_ZN8S19033C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19033C7D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev)();
extern void _ZN8S19033C9D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev)();
extern void _ZN8S19033C9D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19033C9__8S19033C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19033C7__8S19033C9__8S19033C1[] = {
  ABISELECT(88,44),
  ABISELECT(24,12),
  ABISELECT(48,24),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI8S19033C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev),
};
static  VTT_ENTRY vtt_S19033C1[] = {
  {&(_ZTV8S19033C1[10]),  10,32},
  {&(_ZTV8S19033C1[21]),  21,32},
  {&(_ZTV8S19033C1[10]),  10,32},
  {&(_ZTV8S19033C1[30]),  30,32},
  {&(_tg__ZTV8S19033C2__8S19033C1[9]),  9,11},
  {&(_tg__ZTV8S19033C38S19033C2__8S19033C1[9]),  9,11},
  {&(_tg__ZTV8S19033C7__8S19033C38S19033C2__8S19033C1[5]),  5,7},
  {&(_tg__ZTV8S19033C9__8S19033C38S19033C2__8S19033C1[7]),  7,9},
  {&(_tg__ZTV8S19033C7__8S19033C2__8S19033C1[5]),  5,7},
  {&(_tg__ZTV8S19033C9__8S19033C2__8S19033C1[7]),  7,9},
  {&(_tg__ZTV8S19033C7__8S19033C1[4]),  4,6},
  {&(_tg__ZTV8S19033C9__8S19033C1[7]),  7,9},
  {&(_tg__ZTV8S19033C7__8S19033C9__8S19033C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19033C1[];
extern  VTBL_ENTRY _ZTV8S19033C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19033C1[];
static VTBL_ENTRY alt_thunk_names176[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C9D0Ev,_ZTv0_n20_N8S19033C9D0Ev), // 
  (VTBL_ENTRY)_ZN8S19033C9D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C9D1Ev,_ZTv0_n20_N8S19033C9D1Ev), // 
  (VTBL_ENTRY)_ZN8S19033C9D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C3D0Ev,_ZTv0_n20_N8S19033C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C3D0Ev,_ZThn40_N8S19033C3D0Ev),
  (VTBL_ENTRY)_ZN8S19033C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C3D1Ev,_ZTv0_n20_N8S19033C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C3D1Ev,_ZThn40_N8S19033C3D1Ev),
  (VTBL_ENTRY)_ZN8S19033C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C2D0Ev,_ZTv0_n20_N8S19033C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C2D0Ev,_ZThn40_N8S19033C2D0Ev),
  (VTBL_ENTRY)_ZN8S19033C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C2D1Ev,_ZTv0_n20_N8S19033C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S19033C2D1Ev,_ZThn40_N8S19033C2D1Ev),
  (VTBL_ENTRY)_ZN8S19033C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C1D0Ev,_ZTv0_n20_N8S19033C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19033C1D0Ev,_ZThn44_N8S19033C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19033C1D0Ev,_ZThn4_N8S19033C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19033C1D1Ev,_ZTv0_n20_N8S19033C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19033C1D1Ev,_ZThn44_N8S19033C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19033C1D1Ev,_ZThn4_N8S19033C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19033C1 = {  "S19033C1", // class name
  bases_S19033C1, 13,
  &(vtc_S19033C1[0]), // expected_vtbl_contents
  &(vtt_S19033C1[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI8S19033C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19033C1),32, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19033C1),13, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names176,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3441C3  {
  virtual void  v9(); // _ZN7S3441C32v9Ev
  virtual void  v10(); // _ZN7S3441C33v10Ev
  virtual void  v11(); // _ZN7S3441C33v11Ev
  virtual void  v12(); // _ZN7S3441C33v12Ev
  virtual void  v13(); // _ZN7S3441C33v13Ev
  virtual void  v14(); // _ZN7S3441C33v14Ev
  virtual void  v15(); // _ZN7S3441C33v15Ev
  virtual void  v16(); // _ZN7S3441C33v16Ev
  virtual void  v17(); // _ZN7S3441C33v17Ev
  virtual void  v18(); // _ZN7S3441C33v18Ev
  ~S3441C3(); // tgen
  S3441C3(); // tgen
};
//SIG(-1 S3441C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S3441C3 ::v9(){vfunc_called(this, "_ZN7S3441C32v9Ev");}
void  S3441C3 ::v10(){vfunc_called(this, "_ZN7S3441C33v10Ev");}
void  S3441C3 ::v11(){vfunc_called(this, "_ZN7S3441C33v11Ev");}
void  S3441C3 ::v12(){vfunc_called(this, "_ZN7S3441C33v12Ev");}
void  S3441C3 ::v13(){vfunc_called(this, "_ZN7S3441C33v13Ev");}
void  S3441C3 ::v14(){vfunc_called(this, "_ZN7S3441C33v14Ev");}
void  S3441C3 ::v15(){vfunc_called(this, "_ZN7S3441C33v15Ev");}
void  S3441C3 ::v16(){vfunc_called(this, "_ZN7S3441C33v16Ev");}
void  S3441C3 ::v17(){vfunc_called(this, "_ZN7S3441C33v17Ev");}
void  S3441C3 ::v18(){vfunc_called(this, "_ZN7S3441C33v18Ev");}
S3441C3 ::~S3441C3(){ note_dtor("S3441C3", this);} // tgen
S3441C3 ::S3441C3(){ note_ctor("S3441C3", this);} // tgen

static void Test_S3441C3()
{
  extern Class_Descriptor cd_S3441C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3441C3, buf);
    S3441C3 *dp, &lv = *(dp=new (buf) S3441C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3441C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3441C3)");
    test_class_info(&lv, &cd_S3441C3);
    dp->~S3441C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3441C3(Test_S3441C3, "S3441C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3441C3C1Ev();
extern void _ZN7S3441C3D1Ev();
Name_Map name_map_S3441C3[] = {
  NSPAIR(_ZN7S3441C3C1Ev),
  NSPAIR(_ZN7S3441C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3441C3[];
extern void _ZN7S3441C32v9Ev();
extern void _ZN7S3441C33v10Ev();
extern void _ZN7S3441C33v11Ev();
extern void _ZN7S3441C33v12Ev();
extern void _ZN7S3441C33v13Ev();
extern void _ZN7S3441C33v14Ev();
extern void _ZN7S3441C33v15Ev();
extern void _ZN7S3441C33v16Ev();
extern void _ZN7S3441C33v17Ev();
extern void _ZN7S3441C33v18Ev();
static  VTBL_ENTRY vtc_S3441C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3441C3[0]),
  (VTBL_ENTRY)&_ZN7S3441C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3441C3[];
extern  VTBL_ENTRY _ZTV7S3441C3[];
Class_Descriptor cd_S3441C3 = {  "S3441C3", // class name
  0,0,//no base classes
  &(vtc_S3441C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3441C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3441C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3441C2  : S3441C3 {
  short s3441c2f0;
  int s3441c2f1;
  void *s3441c2f2;
  virtual void  v19(); // _ZN7S3441C23v19Ev
  virtual void  v20(); // _ZN7S3441C23v20Ev
  virtual void  v21(); // _ZN7S3441C23v21Ev
  virtual void  v22(); // _ZN7S3441C23v22Ev
  virtual void  v23(); // _ZN7S3441C23v23Ev
  ~S3441C2(); // tgen
  S3441C2(); // tgen
};
//SIG(-1 S3441C2) C1{ BC2{ v6 v7 v8 v9 v10 v11 v12 v13 v14 v15} v1 v2 v3 v4 v5 Fs Fi Fp}


void  S3441C2 ::v19(){vfunc_called(this, "_ZN7S3441C23v19Ev");}
void  S3441C2 ::v20(){vfunc_called(this, "_ZN7S3441C23v20Ev");}
void  S3441C2 ::v21(){vfunc_called(this, "_ZN7S3441C23v21Ev");}
void  S3441C2 ::v22(){vfunc_called(this, "_ZN7S3441C23v22Ev");}
void  S3441C2 ::v23(){vfunc_called(this, "_ZN7S3441C23v23Ev");}
S3441C2 ::~S3441C2(){ note_dtor("S3441C2", this);} // tgen
S3441C2 ::S3441C2(){ note_ctor("S3441C2", this);} // tgen

static void Test_S3441C2()
{
  extern Class_Descriptor cd_S3441C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3441C2, buf);
    S3441C2 *dp, &lv = *(dp=new (buf) S3441C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3441C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3441C2)");
    check_base_class_offset(lv, (S3441C3*), 0, "S3441C2");
    check_field_offset(lv, s3441c2f0, ABISELECT(8,4), "S3441C2.s3441c2f0");
    check_field_offset(lv, s3441c2f1, ABISELECT(12,8), "S3441C2.s3441c2f1");
    check_field_offset(lv, s3441c2f2, ABISELECT(16,12), "S3441C2.s3441c2f2");
    test_class_info(&lv, &cd_S3441C2);
    dp->~S3441C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3441C2(Test_S3441C2, "S3441C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3441C2C1Ev();
extern void _ZN7S3441C2D1Ev();
Name_Map name_map_S3441C2[] = {
  NSPAIR(_ZN7S3441C2C1Ev),
  NSPAIR(_ZN7S3441C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3441C3;
extern VTBL_ENTRY _ZTI7S3441C3[];
extern  VTBL_ENTRY _ZTV7S3441C3[];
static Base_Class bases_S3441C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3441C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3441C2[];
extern void _ZN7S3441C32v9Ev();
extern void _ZN7S3441C33v10Ev();
extern void _ZN7S3441C33v11Ev();
extern void _ZN7S3441C33v12Ev();
extern void _ZN7S3441C33v13Ev();
extern void _ZN7S3441C33v14Ev();
extern void _ZN7S3441C33v15Ev();
extern void _ZN7S3441C33v16Ev();
extern void _ZN7S3441C33v17Ev();
extern void _ZN7S3441C33v18Ev();
extern void _ZN7S3441C23v19Ev();
extern void _ZN7S3441C23v20Ev();
extern void _ZN7S3441C23v21Ev();
extern void _ZN7S3441C23v22Ev();
extern void _ZN7S3441C23v23Ev();
static  VTBL_ENTRY vtc_S3441C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3441C2[0]),
  (VTBL_ENTRY)&_ZN7S3441C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S3441C2[];
extern  VTBL_ENTRY _ZTV7S3441C2[];
Class_Descriptor cd_S3441C2 = {  "S3441C2", // class name
  bases_S3441C2, 1,
  &(vtc_S3441C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3441C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3441C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3441C1  : S3441C2 {
  int s3441c1f0[2];
  virtual  ~S3441C1(); // _ZN7S3441C1D1Ev
  virtual void  v1(); // _ZN7S3441C12v1Ev
  virtual void  v2(); // _ZN7S3441C12v2Ev
  virtual void  v3(); // _ZN7S3441C12v3Ev
  virtual void  v4(); // _ZN7S3441C12v4Ev
  virtual void  v5(); // _ZN7S3441C12v5Ev
  virtual void  v6(); // _ZN7S3441C12v6Ev
  virtual void  v7(); // _ZN7S3441C12v7Ev
  virtual void  v8(); // _ZN7S3441C12v8Ev
  S3441C1(); // tgen
};
//SIG(1 S3441C1) C1{ BC2{ BC3{ v9 v10 v11 v12 v13 v14 v15 v16 v17 v18} v19 v20 v21 v22 v23 Fs Fi Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[2]}


 S3441C1 ::~S3441C1(){ note_dtor("S3441C1", this);}
void  S3441C1 ::v1(){vfunc_called(this, "_ZN7S3441C12v1Ev");}
void  S3441C1 ::v2(){vfunc_called(this, "_ZN7S3441C12v2Ev");}
void  S3441C1 ::v3(){vfunc_called(this, "_ZN7S3441C12v3Ev");}
void  S3441C1 ::v4(){vfunc_called(this, "_ZN7S3441C12v4Ev");}
void  S3441C1 ::v5(){vfunc_called(this, "_ZN7S3441C12v5Ev");}
void  S3441C1 ::v6(){vfunc_called(this, "_ZN7S3441C12v6Ev");}
void  S3441C1 ::v7(){vfunc_called(this, "_ZN7S3441C12v7Ev");}
void  S3441C1 ::v8(){vfunc_called(this, "_ZN7S3441C12v8Ev");}
S3441C1 ::S3441C1(){ note_ctor("S3441C1", this);} // tgen

static void Test_S3441C1()
{
  extern Class_Descriptor cd_S3441C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S3441C1, buf);
    S3441C1 *dp, &lv = *(dp=new (buf) S3441C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S3441C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3441C1)");
    check_base_class_offset(lv, (S3441C3*)(S3441C2*), 0, "S3441C1");
    check_base_class_offset(lv, (S3441C2*), 0, "S3441C1");
    check_field_offset(lv, s3441c1f0, ABISELECT(24,16), "S3441C1.s3441c1f0");
    test_class_info(&lv, &cd_S3441C1);
    dp->~S3441C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3441C1(Test_S3441C1, "S3441C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S3441C1C1Ev();
extern void _ZN7S3441C1D1Ev();
Name_Map name_map_S3441C1[] = {
  NSPAIR(_ZN7S3441C1C1Ev),
  NSPAIR(_ZN7S3441C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3441C3;
extern VTBL_ENTRY _ZTI7S3441C3[];
extern  VTBL_ENTRY _ZTV7S3441C3[];
extern Class_Descriptor cd_S3441C2;
extern VTBL_ENTRY _ZTI7S3441C2[];
extern  VTBL_ENTRY _ZTV7S3441C2[];
static Base_Class bases_S3441C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3441C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3441C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3441C1[];
extern void _ZN7S3441C32v9Ev();
extern void _ZN7S3441C33v10Ev();
extern void _ZN7S3441C33v11Ev();
extern void _ZN7S3441C33v12Ev();
extern void _ZN7S3441C33v13Ev();
extern void _ZN7S3441C33v14Ev();
extern void _ZN7S3441C33v15Ev();
extern void _ZN7S3441C33v16Ev();
extern void _ZN7S3441C33v17Ev();
extern void _ZN7S3441C33v18Ev();
extern void _ZN7S3441C23v19Ev();
extern void _ZN7S3441C23v20Ev();
extern void _ZN7S3441C23v21Ev();
extern void _ZN7S3441C23v22Ev();
extern void _ZN7S3441C23v23Ev();
extern void _ZN7S3441C1D1Ev();
extern void _ZN7S3441C1D0Ev();
extern void _ZN7S3441C12v1Ev();
extern void _ZN7S3441C12v2Ev();
extern void _ZN7S3441C12v3Ev();
extern void _ZN7S3441C12v4Ev();
extern void _ZN7S3441C12v5Ev();
extern void _ZN7S3441C12v6Ev();
extern void _ZN7S3441C12v7Ev();
extern void _ZN7S3441C12v8Ev();
static  VTBL_ENTRY vtc_S3441C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3441C1[0]),
  (VTBL_ENTRY)&_ZN7S3441C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3441C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3441C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3441C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3441C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3441C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S3441C1[];
extern  VTBL_ENTRY _ZTV7S3441C1[];
Class_Descriptor cd_S3441C1 = {  "S3441C1", // class name
  bases_S3441C1, 2,
  &(vtc_S3441C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S3441C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3441C1),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11543C1  {
  ::S11542C2 s11543c1f0;
  ::S11542C4 s11543c1f1;
  ::S11542C6 s11543c1f2;
  ::S11542C9_nt s11543c1f3;
  char s11543c1f4[4];
};
//SIG(1 S11543C1) C1{ FC2{ Fi[2] FC3{ Fs[6] Fi}} FC4{ FC5{ Fs[3] Fi Fc[4]} Fi FL Fi FL Fi[2] Fc[4] Fi} FC6{ Fc[36] Fi[4]} FC7{ Fi[3]} Fc[4]}



static void Test_S11543C1()
{
  {
    init_simple_test("S11543C1");
    S11543C1 lv;
    check2(sizeof(lv), ABISELECT(160,148), "sizeof(S11543C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11543C1)");
    check_field_offset(lv, s11543c1f0, 0, "S11543C1.s11543c1f0");
    check_field_offset(lv, s11543c1f1, 24, "S11543C1.s11543c1f1");
    check_field_offset(lv, s11543c1f2, ABISELECT(88,80), "S11543C1.s11543c1f2");
    check_field_offset(lv, s11543c1f3, ABISELECT(140,132), "S11543C1.s11543c1f3");
    check_field_offset(lv, s11543c1f4, ABISELECT(152,144), "S11543C1.s11543c1f4");
  }
}
static Arrange_To_Call_Me vS11543C1(Test_S11543C1, "S11543C1", ABISELECT(160,148));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20521C4  {
  virtual void  v2(); // _ZN8S20521C42v2Ev
  virtual void  v3(); // _ZN8S20521C42v3Ev
  virtual void  v4(); // _ZN8S20521C42v4Ev
  virtual void  v5(); // _ZN8S20521C42v5Ev
  ~S20521C4(); // tgen
  S20521C4(); // tgen
};
//SIG(-1 S20521C4) C1{ v1 v2 v3 v4}


void  S20521C4 ::v2(){vfunc_called(this, "_ZN8S20521C42v2Ev");}
void  S20521C4 ::v3(){vfunc_called(this, "_ZN8S20521C42v3Ev");}
void  S20521C4 ::v4(){vfunc_called(this, "_ZN8S20521C42v4Ev");}
void  S20521C4 ::v5(){vfunc_called(this, "_ZN8S20521C42v5Ev");}
S20521C4 ::~S20521C4(){ note_dtor("S20521C4", this);} // tgen
S20521C4 ::S20521C4(){ note_ctor("S20521C4", this);} // tgen

static void Test_S20521C4()
{
  extern Class_Descriptor cd_S20521C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20521C4, buf);
    S20521C4 *dp, &lv = *(dp=new (buf) S20521C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20521C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20521C4)");
    test_class_info(&lv, &cd_S20521C4);
    dp->~S20521C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20521C4(Test_S20521C4, "S20521C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20521C4C1Ev();
extern void _ZN8S20521C4D1Ev();
Name_Map name_map_S20521C4[] = {
  NSPAIR(_ZN8S20521C4C1Ev),
  NSPAIR(_ZN8S20521C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20521C4[];
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
static  VTBL_ENTRY vtc_S20521C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C4[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
};
extern VTBL_ENTRY _ZTI8S20521C4[];
extern  VTBL_ENTRY _ZTV8S20521C4[];
Class_Descriptor cd_S20521C4 = {  "S20521C4", // class name
  0,0,//no base classes
  &(vtc_S20521C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20521C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20521C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20521C5  {
  virtual void  v6(); // _ZN8S20521C52v6Ev
  virtual void  v7(); // _ZN8S20521C52v7Ev
  virtual void  v8(); // _ZN8S20521C52v8Ev
  ~S20521C5(); // tgen
  S20521C5(); // tgen
};
//SIG(-1 S20521C5) C1{ v1 v2 v3}


void  S20521C5 ::v6(){vfunc_called(this, "_ZN8S20521C52v6Ev");}
void  S20521C5 ::v7(){vfunc_called(this, "_ZN8S20521C52v7Ev");}
void  S20521C5 ::v8(){vfunc_called(this, "_ZN8S20521C52v8Ev");}
S20521C5 ::~S20521C5(){ note_dtor("S20521C5", this);} // tgen
S20521C5 ::S20521C5(){ note_ctor("S20521C5", this);} // tgen

static void Test_S20521C5()
{
  extern Class_Descriptor cd_S20521C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20521C5, buf);
    S20521C5 *dp, &lv = *(dp=new (buf) S20521C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20521C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20521C5)");
    test_class_info(&lv, &cd_S20521C5);
    dp->~S20521C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20521C5(Test_S20521C5, "S20521C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20521C5C1Ev();
extern void _ZN8S20521C5D1Ev();
Name_Map name_map_S20521C5[] = {
  NSPAIR(_ZN8S20521C5C1Ev),
  NSPAIR(_ZN8S20521C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20521C5[];
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
static  VTBL_ENTRY vtc_S20521C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C5[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
};
extern VTBL_ENTRY _ZTI8S20521C5[];
extern  VTBL_ENTRY _ZTV8S20521C5[];
Class_Descriptor cd_S20521C5 = {  "S20521C5", // class name
  0,0,//no base classes
  &(vtc_S20521C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20521C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20521C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20521C3  : S20521C4 , virtual S20521C5 {
  int s20521c3f0[2];
  long double s20521c3f1[2];
  virtual void  v9(); // _ZN8S20521C32v9Ev
  virtual void  v10(); // _ZN8S20521C33v10Ev
  virtual void  v11(); // _ZN8S20521C33v11Ev
  virtual void  v12(); // _ZN8S20521C33v12Ev
  ~S20521C3(); // tgen
  S20521C3(); // tgen
};
//SIG(-1 S20521C3) C1{ BC2{ v5 v6 v7 v8} VBC3{ v9 v10 v11} v1 v2 v3 v4 Fi[2] FD[2]}


void  S20521C3 ::v9(){vfunc_called(this, "_ZN8S20521C32v9Ev");}
void  S20521C3 ::v10(){vfunc_called(this, "_ZN8S20521C33v10Ev");}
void  S20521C3 ::v11(){vfunc_called(this, "_ZN8S20521C33v11Ev");}
void  S20521C3 ::v12(){vfunc_called(this, "_ZN8S20521C33v12Ev");}
S20521C3 ::~S20521C3(){ note_dtor("S20521C3", this);} // tgen
S20521C3 ::S20521C3(){ note_ctor("S20521C3", this);} // tgen

static void Test_S20521C3()
{
  extern Class_Descriptor cd_S20521C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S20521C3, buf);
    S20521C3 *dp, &lv = *(dp=new (buf) S20521C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20521C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20521C3)");
    check_base_class_offset(lv, (S20521C4*), 0, "S20521C3");
    check_base_class_offset(lv, (S20521C5*), ABISELECT(48,36), "S20521C3");
    check_field_offset(lv, s20521c3f0, ABISELECT(8,4), "S20521C3.s20521c3f0");
    check_field_offset(lv, s20521c3f1, ABISELECT(16,12), "S20521C3.s20521c3f1");
    test_class_info(&lv, &cd_S20521C3);
    dp->~S20521C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20521C3(Test_S20521C3, "S20521C3", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S20521C3C1Ev();
extern void _ZN8S20521C3D1Ev();
Name_Map name_map_S20521C3[] = {
  NSPAIR(_ZN8S20521C3C1Ev),
  NSPAIR(_ZN8S20521C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20521C4;
extern VTBL_ENTRY _ZTI8S20521C4[];
extern  VTBL_ENTRY _ZTV8S20521C4[];
extern Class_Descriptor cd_S20521C5;
extern VTBL_ENTRY _ZTI8S20521C5[];
extern  VTBL_ENTRY _ZTV8S20521C5[];
static Base_Class bases_S20521C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20521C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20521C5,    ABISELECT(48,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20521C3[];
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
extern void _ZN8S20521C32v9Ev();
extern void _ZN8S20521C33v10Ev();
extern void _ZN8S20521C33v11Ev();
extern void _ZN8S20521C33v12Ev();
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
static  VTBL_ENTRY vtc_S20521C3[] = {
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C3[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20521C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v12Ev,
  0,
  0,
  0,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S20521C3[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
};
extern VTBL_ENTRY _ZTV8S20521C3[];
static  VTT_ENTRY vtt_S20521C3[] = {
  {&(_ZTV8S20521C3[3]),  3,19},
  {&(_ZTV8S20521C3[16]),  16,19},
};
extern VTBL_ENTRY _ZTI8S20521C3[];
extern  VTBL_ENTRY _ZTV8S20521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20521C3[];
Class_Descriptor cd_S20521C3 = {  "S20521C3", // class name
  bases_S20521C3, 2,
  &(vtc_S20521C3[0]), // expected_vtbl_contents
  &(vtt_S20521C3[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S20521C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20521C3),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20521C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20521C6  {
  virtual void  v13(); // _ZN8S20521C63v13Ev
  virtual void  v14(); // _ZN8S20521C63v14Ev
  ~S20521C6(); // tgen
  S20521C6(); // tgen
};
//SIG(-1 S20521C6) C1{ v1 v2}


void  S20521C6 ::v13(){vfunc_called(this, "_ZN8S20521C63v13Ev");}
void  S20521C6 ::v14(){vfunc_called(this, "_ZN8S20521C63v14Ev");}
S20521C6 ::~S20521C6(){ note_dtor("S20521C6", this);} // tgen
S20521C6 ::S20521C6(){ note_ctor("S20521C6", this);} // tgen

static void Test_S20521C6()
{
  extern Class_Descriptor cd_S20521C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20521C6, buf);
    S20521C6 *dp, &lv = *(dp=new (buf) S20521C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20521C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20521C6)");
    test_class_info(&lv, &cd_S20521C6);
    dp->~S20521C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20521C6(Test_S20521C6, "S20521C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20521C6C1Ev();
extern void _ZN8S20521C6D1Ev();
Name_Map name_map_S20521C6[] = {
  NSPAIR(_ZN8S20521C6C1Ev),
  NSPAIR(_ZN8S20521C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20521C6[];
extern void _ZN8S20521C63v13Ev();
extern void _ZN8S20521C63v14Ev();
static  VTBL_ENTRY vtc_S20521C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C6[0]),
  (VTBL_ENTRY)&_ZN8S20521C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20521C63v14Ev,
};
extern VTBL_ENTRY _ZTI8S20521C6[];
extern  VTBL_ENTRY _ZTV8S20521C6[];
Class_Descriptor cd_S20521C6 = {  "S20521C6", // class name
  0,0,//no base classes
  &(vtc_S20521C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20521C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20521C6),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20521C2  : virtual S20521C3 , S20521C6 {
  long s20521c2f0;
  virtual void  v15(); // _ZN8S20521C23v15Ev
  virtual void  v16(); // _ZN8S20521C23v16Ev
  virtual void  v17(); // _ZN8S20521C23v17Ev
  virtual void  v18(); // _ZN8S20521C23v18Ev
  virtual void  v19(); // _ZN8S20521C23v19Ev
  ~S20521C2(); // tgen
  S20521C2(); // tgen
};
//SIG(-1 S20521C2) C1{ VBC2{ BC3{ v6 v7 v8 v9} VBC4{ v10 v11 v12} v13 v14 v15 v16 Fi[2] FD[2]} BC5{ v17 v18} v1 v2 v3 v4 v5 Fl}


void  S20521C2 ::v15(){vfunc_called(this, "_ZN8S20521C23v15Ev");}
void  S20521C2 ::v16(){vfunc_called(this, "_ZN8S20521C23v16Ev");}
void  S20521C2 ::v17(){vfunc_called(this, "_ZN8S20521C23v17Ev");}
void  S20521C2 ::v18(){vfunc_called(this, "_ZN8S20521C23v18Ev");}
void  S20521C2 ::v19(){vfunc_called(this, "_ZN8S20521C23v19Ev");}
S20521C2 ::~S20521C2(){ note_dtor("S20521C2", this);} // tgen
S20521C2 ::S20521C2(){ note_ctor("S20521C2", this);} // tgen

static void Test_S20521C2()
{
  extern Class_Descriptor cd_S20521C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S20521C2, buf);
    S20521C2 *dp, &lv = *(dp=new (buf) S20521C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S20521C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20521C2)");
    check_base_class_offset(lv, (S20521C4*)(S20521C3*), ABISELECT(16,8), "S20521C2");
    check_base_class_offset(lv, (S20521C5*)(S20521C3*), ABISELECT(64,44), "S20521C2");
    check_base_class_offset(lv, (S20521C3*), ABISELECT(16,8), "S20521C2");
    check_base_class_offset(lv, (S20521C6*), 0, "S20521C2");
    check_field_offset(lv, s20521c2f0, ABISELECT(8,4), "S20521C2.s20521c2f0");
    test_class_info(&lv, &cd_S20521C2);
    dp->~S20521C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20521C2(Test_S20521C2, "S20521C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S20521C2C1Ev();
extern void _ZN8S20521C2D1Ev();
Name_Map name_map_S20521C2[] = {
  NSPAIR(_ZN8S20521C2C1Ev),
  NSPAIR(_ZN8S20521C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20521C4;
extern VTBL_ENTRY _ZTI8S20521C4[];
extern  VTBL_ENTRY _ZTV8S20521C4[];
extern Class_Descriptor cd_S20521C5;
extern VTBL_ENTRY _ZTI8S20521C5[];
extern  VTBL_ENTRY _ZTV8S20521C5[];
extern Class_Descriptor cd_S20521C3;
extern VTBL_ENTRY _ZTI8S20521C3[];
extern  VTBL_ENTRY _ZTV8S20521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20521C3[];
extern Class_Descriptor cd_S20521C6;
extern VTBL_ENTRY _ZTI8S20521C6[];
extern  VTBL_ENTRY _ZTV8S20521C6[];
static Base_Class bases_S20521C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20521C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20521C5,    ABISELECT(64,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20521C3,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20521C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20521C2[];
extern void _ZN8S20521C63v13Ev();
extern void _ZN8S20521C63v14Ev();
extern void _ZN8S20521C23v15Ev();
extern void _ZN8S20521C23v16Ev();
extern void _ZN8S20521C23v17Ev();
extern void _ZN8S20521C23v18Ev();
extern void _ZN8S20521C23v19Ev();
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
extern void _ZN8S20521C32v9Ev();
extern void _ZN8S20521C33v10Ev();
extern void _ZN8S20521C33v11Ev();
extern void _ZN8S20521C33v12Ev();
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
static  VTBL_ENTRY vtc_S20521C2[] = {
  ABISELECT(64,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C2[0]),
  (VTBL_ENTRY)&_ZN8S20521C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20521C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20521C2[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20521C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v12Ev,
  0,
  0,
  0,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI8S20521C2[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
};
extern VTBL_ENTRY _ZTV8S20521C2[];
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
extern void _ZN8S20521C32v9Ev();
extern void _ZN8S20521C33v10Ev();
extern void _ZN8S20521C33v11Ev();
extern void _ZN8S20521C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C3__8S20521C2[] = {
  ABISELECT(48,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C3[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20521C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v12Ev,
};
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C5__8S20521C3__8S20521C2[] = {
  0,
  0,
  0,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S20521C3[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
};
static  VTT_ENTRY vtt_S20521C2[] = {
  {&(_ZTV8S20521C2[4]),  4,38},
  {&(_ZTV8S20521C2[22]),  22,38},
  {&(_ZTV8S20521C2[35]),  35,38},
  {&(_tg__ZTV8S20521C3__8S20521C2[3]),  3,11},
  {&(_tg__ZTV8S20521C5__8S20521C3__8S20521C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20521C2[];
extern  VTBL_ENTRY _ZTV8S20521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20521C2[];
Class_Descriptor cd_S20521C2 = {  "S20521C2", // class name
  bases_S20521C2, 4,
  &(vtc_S20521C2[0]), // expected_vtbl_contents
  &(vtt_S20521C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S20521C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20521C2),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20521C2),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20521C1  : virtual S20521C2 {
  virtual void  v1(); // _ZN8S20521C12v1Ev
  ~S20521C1(); // tgen
  S20521C1(); // tgen
};
//SIG(1 S20521C1) C1{ VBC2{ VBC3{ BC4{ v2 v3 v4 v5} VBC5{ v6 v7 v8} v9 v10 v11 v12 Fi[2] FD[2]} BC6{ v13 v14} v15 v16 v17 v18 v19 Fl} v1}


void  S20521C1 ::v1(){vfunc_called(this, "_ZN8S20521C12v1Ev");}
S20521C1 ::~S20521C1(){ note_dtor("S20521C1", this);} // tgen
S20521C1 ::S20521C1(){ note_ctor("S20521C1", this);} // tgen

static void Test_S20521C1()
{
  extern Class_Descriptor cd_S20521C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S20521C1, buf);
    S20521C1 *dp, &lv = *(dp=new (buf) S20521C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S20521C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20521C1)");
    check_base_class_offset(lv, (S20521C4*)(S20521C3*), ABISELECT(32,12), "S20521C1");
    check_base_class_offset(lv, (S20521C5*)(S20521C3*), 0, "S20521C1");
    check_base_class_offset(lv, (S20521C3*)(S20521C2*), ABISELECT(32,12), "S20521C1");
    check_base_class_offset(lv, (S20521C6*)(S20521C2*), ABISELECT(8,4), "S20521C1");
    check_base_class_offset(lv, (S20521C2*), ABISELECT(8,4), "S20521C1");
    test_class_info(&lv, &cd_S20521C1);
    dp->~S20521C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20521C1(Test_S20521C1, "S20521C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S20521C1C1Ev();
extern void _ZN8S20521C1D1Ev();
Name_Map name_map_S20521C1[] = {
  NSPAIR(_ZN8S20521C1C1Ev),
  NSPAIR(_ZN8S20521C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20521C4;
extern VTBL_ENTRY _ZTI8S20521C4[];
extern  VTBL_ENTRY _ZTV8S20521C4[];
extern Class_Descriptor cd_S20521C5;
extern VTBL_ENTRY _ZTI8S20521C5[];
extern  VTBL_ENTRY _ZTV8S20521C5[];
extern Class_Descriptor cd_S20521C3;
extern VTBL_ENTRY _ZTI8S20521C3[];
extern  VTBL_ENTRY _ZTV8S20521C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20521C3[];
extern Class_Descriptor cd_S20521C6;
extern VTBL_ENTRY _ZTI8S20521C6[];
extern  VTBL_ENTRY _ZTV8S20521C6[];
extern Class_Descriptor cd_S20521C2;
extern VTBL_ENTRY _ZTI8S20521C2[];
extern  VTBL_ENTRY _ZTV8S20521C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20521C2[];
static Base_Class bases_S20521C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20521C4,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20521C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20521C3,    ABISELECT(32,12), //bcp->offset
    30, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20521C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20521C2,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20521C1[];
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
extern void _ZN8S20521C12v1Ev();
extern void _ZN8S20521C63v13Ev();
extern void _ZN8S20521C63v14Ev();
extern void _ZN8S20521C23v15Ev();
extern void _ZN8S20521C23v16Ev();
extern void _ZN8S20521C23v17Ev();
extern void _ZN8S20521C23v18Ev();
extern void _ZN8S20521C23v19Ev();
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
extern void _ZN8S20521C32v9Ev();
extern void _ZN8S20521C33v10Ev();
extern void _ZN8S20521C33v11Ev();
extern void _ZN8S20521C33v12Ev();
static  VTBL_ENTRY vtc_S20521C1[] = {
  0,
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C1[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20521C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20521C1[0]),
  (VTBL_ENTRY)&_ZN8S20521C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20521C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20521C1[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20521C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S20521C1[];
extern void _ZN8S20521C63v13Ev();
extern void _ZN8S20521C63v14Ev();
extern void _ZN8S20521C23v15Ev();
extern void _ZN8S20521C23v16Ev();
extern void _ZN8S20521C23v17Ev();
extern void _ZN8S20521C23v18Ev();
extern void _ZN8S20521C23v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C2__8S20521C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(24,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C2[0]),
  (VTBL_ENTRY)&_ZN8S20521C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20521C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v15Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20521C23v19Ev,
};
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
extern void _ZN8S20521C32v9Ev();
extern void _ZN8S20521C33v10Ev();
extern void _ZN8S20521C33v11Ev();
extern void _ZN8S20521C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C3__8S20521C2__8S20521C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S20521C2[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20521C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v12Ev,
};
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C5__8S20521C2__8S20521C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20521C2[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
};
extern void _ZN8S20521C42v2Ev();
extern void _ZN8S20521C42v3Ev();
extern void _ZN8S20521C42v4Ev();
extern void _ZN8S20521C42v5Ev();
extern void _ZN8S20521C32v9Ev();
extern void _ZN8S20521C33v10Ev();
extern void _ZN8S20521C33v11Ev();
extern void _ZN8S20521C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C3__8S20521C1[] = {
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20521C3[0]),
  (VTBL_ENTRY)&_ZN8S20521C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20521C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20521C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20521C33v12Ev,
};
extern void _ZN8S20521C52v6Ev();
extern void _ZN8S20521C52v7Ev();
extern void _ZN8S20521C52v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20521C5__8S20521C3__8S20521C1[] = {
  0,
  0,
  0,
  ABISELECT(32,12),
  (VTBL_ENTRY)&(_ZTI8S20521C3[0]),
  (VTBL_ENTRY)&_ZN8S20521C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20521C52v8Ev,
};
static  VTT_ENTRY vtt_S20521C1[] = {
  {&(_ZTV8S20521C1[8]),  8,49},
  {&(_ZTV8S20521C1[23]),  23,49},
  {&(_ZTV8S20521C1[41]),  41,49},
  {&(_ZTV8S20521C1[8]),  8,49},
  {&(_tg__ZTV8S20521C2__8S20521C1[4]),  4,11},
  {&(_tg__ZTV8S20521C3__8S20521C2__8S20521C1[11]),  11,19},
  {&(_tg__ZTV8S20521C5__8S20521C2__8S20521C1[5]),  5,8},
  {&(_tg__ZTV8S20521C3__8S20521C1[3]),  3,11},
  {&(_tg__ZTV8S20521C5__8S20521C3__8S20521C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20521C1[];
extern  VTBL_ENTRY _ZTV8S20521C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20521C1[];
Class_Descriptor cd_S20521C1 = {  "S20521C1", // class name
  bases_S20521C1, 5,
  &(vtc_S20521C1[0]), // expected_vtbl_contents
  &(vtt_S20521C1[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S20521C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20521C1),49, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20521C1),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3066C3  {
  virtual void  v2(); // _ZN7S3066C32v2Ev
  virtual void  v3(); // _ZN7S3066C32v3Ev
  virtual void  v4(); // _ZN7S3066C32v4Ev
  virtual void  v5(); // _ZN7S3066C32v5Ev
  virtual void  v6(); // _ZN7S3066C32v6Ev
  virtual void  v7(); // _ZN7S3066C32v7Ev
  virtual void  v8(); // _ZN7S3066C32v8Ev
  virtual void  v9(); // _ZN7S3066C32v9Ev
  virtual void  v10(); // _ZN7S3066C33v10Ev
  virtual void  v11(); // _ZN7S3066C33v11Ev
  ~S3066C3(); // tgen
  S3066C3(); // tgen
};
//SIG(-1 S3066C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S3066C3 ::v2(){vfunc_called(this, "_ZN7S3066C32v2Ev");}
void  S3066C3 ::v3(){vfunc_called(this, "_ZN7S3066C32v3Ev");}
void  S3066C3 ::v4(){vfunc_called(this, "_ZN7S3066C32v4Ev");}
void  S3066C3 ::v5(){vfunc_called(this, "_ZN7S3066C32v5Ev");}
void  S3066C3 ::v6(){vfunc_called(this, "_ZN7S3066C32v6Ev");}
void  S3066C3 ::v7(){vfunc_called(this, "_ZN7S3066C32v7Ev");}
void  S3066C3 ::v8(){vfunc_called(this, "_ZN7S3066C32v8Ev");}
void  S3066C3 ::v9(){vfunc_called(this, "_ZN7S3066C32v9Ev");}
void  S3066C3 ::v10(){vfunc_called(this, "_ZN7S3066C33v10Ev");}
void  S3066C3 ::v11(){vfunc_called(this, "_ZN7S3066C33v11Ev");}
S3066C3 ::~S3066C3(){ note_dtor("S3066C3", this);} // tgen
S3066C3 ::S3066C3(){ note_ctor("S3066C3", this);} // tgen

static void Test_S3066C3()
{
  extern Class_Descriptor cd_S3066C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3066C3, buf);
    S3066C3 *dp, &lv = *(dp=new (buf) S3066C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3066C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3066C3)");
    test_class_info(&lv, &cd_S3066C3);
    dp->~S3066C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3066C3(Test_S3066C3, "S3066C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3066C3C1Ev();
extern void _ZN7S3066C3D1Ev();
Name_Map name_map_S3066C3[] = {
  NSPAIR(_ZN7S3066C3C1Ev),
  NSPAIR(_ZN7S3066C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3066C3[];
extern void _ZN7S3066C32v2Ev();
extern void _ZN7S3066C32v3Ev();
extern void _ZN7S3066C32v4Ev();
extern void _ZN7S3066C32v5Ev();
extern void _ZN7S3066C32v6Ev();
extern void _ZN7S3066C32v7Ev();
extern void _ZN7S3066C32v8Ev();
extern void _ZN7S3066C32v9Ev();
extern void _ZN7S3066C33v10Ev();
extern void _ZN7S3066C33v11Ev();
static  VTBL_ENTRY vtc_S3066C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3066C3[0]),
  (VTBL_ENTRY)&_ZN7S3066C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3066C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3066C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3066C3[];
extern  VTBL_ENTRY _ZTV7S3066C3[];
Class_Descriptor cd_S3066C3 = {  "S3066C3", // class name
  0,0,//no base classes
  &(vtc_S3066C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3066C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3066C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3066C2  : S3066C3 {
  void *s3066c2f0;
  long s3066c2f1[2];
  void *s3066c2f2;
  virtual  ~S3066C2(); // _ZN7S3066C2D1Ev
  virtual void  v12(); // _ZN7S3066C23v12Ev
  virtual void  v13(); // _ZN7S3066C23v13Ev
  virtual void  v14(); // _ZN7S3066C23v14Ev
  virtual void  v15(); // _ZN7S3066C23v15Ev
  virtual void  v16(); // _ZN7S3066C23v16Ev
  virtual void  v17(); // _ZN7S3066C23v17Ev
  virtual void  v18(); // _ZN7S3066C23v18Ev
  virtual void  v19(); // _ZN7S3066C23v19Ev
  virtual void  v20(); // _ZN7S3066C23v20Ev
  virtual void  v21(); // _ZN7S3066C23v21Ev
  S3066C2(); // tgen
};
//SIG(-1 S3066C2) C1{ BC2{ v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fl[2] Fp}


 S3066C2 ::~S3066C2(){ note_dtor("S3066C2", this);}
void  S3066C2 ::v12(){vfunc_called(this, "_ZN7S3066C23v12Ev");}
void  S3066C2 ::v13(){vfunc_called(this, "_ZN7S3066C23v13Ev");}
void  S3066C2 ::v14(){vfunc_called(this, "_ZN7S3066C23v14Ev");}
void  S3066C2 ::v15(){vfunc_called(this, "_ZN7S3066C23v15Ev");}
void  S3066C2 ::v16(){vfunc_called(this, "_ZN7S3066C23v16Ev");}
void  S3066C2 ::v17(){vfunc_called(this, "_ZN7S3066C23v17Ev");}
void  S3066C2 ::v18(){vfunc_called(this, "_ZN7S3066C23v18Ev");}
void  S3066C2 ::v19(){vfunc_called(this, "_ZN7S3066C23v19Ev");}
void  S3066C2 ::v20(){vfunc_called(this, "_ZN7S3066C23v20Ev");}
void  S3066C2 ::v21(){vfunc_called(this, "_ZN7S3066C23v21Ev");}
S3066C2 ::S3066C2(){ note_ctor("S3066C2", this);} // tgen

static void Test_S3066C2()
{
  extern Class_Descriptor cd_S3066C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3066C2, buf);
    S3066C2 *dp, &lv = *(dp=new (buf) S3066C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3066C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3066C2)");
    check_base_class_offset(lv, (S3066C3*), 0, "S3066C2");
    check_field_offset(lv, s3066c2f0, ABISELECT(8,4), "S3066C2.s3066c2f0");
    check_field_offset(lv, s3066c2f1, ABISELECT(16,8), "S3066C2.s3066c2f1");
    check_field_offset(lv, s3066c2f2, ABISELECT(32,16), "S3066C2.s3066c2f2");
    test_class_info(&lv, &cd_S3066C2);
    dp->~S3066C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3066C2(Test_S3066C2, "S3066C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3066C2C1Ev();
extern void _ZN7S3066C2D1Ev();
Name_Map name_map_S3066C2[] = {
  NSPAIR(_ZN7S3066C2C1Ev),
  NSPAIR(_ZN7S3066C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3066C3;
extern VTBL_ENTRY _ZTI7S3066C3[];
extern  VTBL_ENTRY _ZTV7S3066C3[];
static Base_Class bases_S3066C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3066C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3066C2[];
extern void _ZN7S3066C32v2Ev();
extern void _ZN7S3066C32v3Ev();
extern void _ZN7S3066C32v4Ev();
extern void _ZN7S3066C32v5Ev();
extern void _ZN7S3066C32v6Ev();
extern void _ZN7S3066C32v7Ev();
extern void _ZN7S3066C32v8Ev();
extern void _ZN7S3066C32v9Ev();
extern void _ZN7S3066C33v10Ev();
extern void _ZN7S3066C33v11Ev();
extern void _ZN7S3066C2D1Ev();
extern void _ZN7S3066C2D0Ev();
extern void _ZN7S3066C23v12Ev();
extern void _ZN7S3066C23v13Ev();
extern void _ZN7S3066C23v14Ev();
extern void _ZN7S3066C23v15Ev();
extern void _ZN7S3066C23v16Ev();
extern void _ZN7S3066C23v17Ev();
extern void _ZN7S3066C23v18Ev();
extern void _ZN7S3066C23v19Ev();
extern void _ZN7S3066C23v20Ev();
extern void _ZN7S3066C23v21Ev();
static  VTBL_ENTRY vtc_S3066C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3066C2[0]),
  (VTBL_ENTRY)&_ZN7S3066C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3066C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3066C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3066C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3066C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S3066C2[];
extern  VTBL_ENTRY _ZTV7S3066C2[];
Class_Descriptor cd_S3066C2 = {  "S3066C2", // class name
  bases_S3066C2, 1,
  &(vtc_S3066C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3066C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3066C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3066C1  : S3066C2 {
  int s3066c1f0;
  virtual  ~S3066C1(); // _ZN7S3066C1D1Ev
  virtual void  v1(); // _ZN7S3066C12v1Ev
  S3066C1(); // tgen
};
//SIG(1 S3066C1) C1{ BC2{ BC3{ v2 v3 v4 v5 v6 v7 v8 v9 v10 v11} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp Fl[2] Fp} vd v1 Fi}


 S3066C1 ::~S3066C1(){ note_dtor("S3066C1", this);}
void  S3066C1 ::v1(){vfunc_called(this, "_ZN7S3066C12v1Ev");}
S3066C1 ::S3066C1(){ note_ctor("S3066C1", this);} // tgen

static void Test_S3066C1()
{
  extern Class_Descriptor cd_S3066C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3066C1, buf);
    S3066C1 *dp, &lv = *(dp=new (buf) S3066C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3066C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3066C1)");
    check_base_class_offset(lv, (S3066C3*)(S3066C2*), 0, "S3066C1");
    check_base_class_offset(lv, (S3066C2*), 0, "S3066C1");
    check_field_offset(lv, s3066c1f0, ABISELECT(40,20), "S3066C1.s3066c1f0");
    test_class_info(&lv, &cd_S3066C1);
    dp->~S3066C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3066C1(Test_S3066C1, "S3066C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3066C1C1Ev();
extern void _ZN7S3066C1D1Ev();
Name_Map name_map_S3066C1[] = {
  NSPAIR(_ZN7S3066C1C1Ev),
  NSPAIR(_ZN7S3066C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3066C3;
extern VTBL_ENTRY _ZTI7S3066C3[];
extern  VTBL_ENTRY _ZTV7S3066C3[];
extern Class_Descriptor cd_S3066C2;
extern VTBL_ENTRY _ZTI7S3066C2[];
extern  VTBL_ENTRY _ZTV7S3066C2[];
static Base_Class bases_S3066C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3066C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3066C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3066C1[];
extern void _ZN7S3066C32v2Ev();
extern void _ZN7S3066C32v3Ev();
extern void _ZN7S3066C32v4Ev();
extern void _ZN7S3066C32v5Ev();
extern void _ZN7S3066C32v6Ev();
extern void _ZN7S3066C32v7Ev();
extern void _ZN7S3066C32v8Ev();
extern void _ZN7S3066C32v9Ev();
extern void _ZN7S3066C33v10Ev();
extern void _ZN7S3066C33v11Ev();
extern void _ZN7S3066C1D1Ev();
extern void _ZN7S3066C1D0Ev();
extern void _ZN7S3066C23v12Ev();
extern void _ZN7S3066C23v13Ev();
extern void _ZN7S3066C23v14Ev();
extern void _ZN7S3066C23v15Ev();
extern void _ZN7S3066C23v16Ev();
extern void _ZN7S3066C23v17Ev();
extern void _ZN7S3066C23v18Ev();
extern void _ZN7S3066C23v19Ev();
extern void _ZN7S3066C23v20Ev();
extern void _ZN7S3066C23v21Ev();
extern void _ZN7S3066C12v1Ev();
static  VTBL_ENTRY vtc_S3066C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3066C1[0]),
  (VTBL_ENTRY)&_ZN7S3066C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3066C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3066C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3066C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3066C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3066C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3066C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3066C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3066C1[];
extern  VTBL_ENTRY _ZTV7S3066C1[];
Class_Descriptor cd_S3066C1 = {  "S3066C1", // class name
  bases_S3066C1, 2,
  &(vtc_S3066C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3066C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3066C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2983C3  {
  virtual void  v1(); // _ZN7S2983C32v1Ev
  virtual void  v2(); // _ZN7S2983C32v2Ev
  virtual void  v3(); // _ZN7S2983C32v3Ev
  virtual void  v4(); // _ZN7S2983C32v4Ev
  virtual void  v5(); // _ZN7S2983C32v5Ev
  virtual void  v6(); // _ZN7S2983C32v6Ev
  virtual void  v7(); // _ZN7S2983C32v7Ev
  virtual void  v8(); // _ZN7S2983C32v8Ev
  virtual void  v9(); // _ZN7S2983C32v9Ev
  virtual void  v10(); // _ZN7S2983C33v10Ev
  ~S2983C3(); // tgen
  S2983C3(); // tgen
};
//SIG(-1 S2983C3) C1{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S2983C3 ::v1(){vfunc_called(this, "_ZN7S2983C32v1Ev");}
void  S2983C3 ::v2(){vfunc_called(this, "_ZN7S2983C32v2Ev");}
void  S2983C3 ::v3(){vfunc_called(this, "_ZN7S2983C32v3Ev");}
void  S2983C3 ::v4(){vfunc_called(this, "_ZN7S2983C32v4Ev");}
void  S2983C3 ::v5(){vfunc_called(this, "_ZN7S2983C32v5Ev");}
void  S2983C3 ::v6(){vfunc_called(this, "_ZN7S2983C32v6Ev");}
void  S2983C3 ::v7(){vfunc_called(this, "_ZN7S2983C32v7Ev");}
void  S2983C3 ::v8(){vfunc_called(this, "_ZN7S2983C32v8Ev");}
void  S2983C3 ::v9(){vfunc_called(this, "_ZN7S2983C32v9Ev");}
void  S2983C3 ::v10(){vfunc_called(this, "_ZN7S2983C33v10Ev");}
S2983C3 ::~S2983C3(){ note_dtor("S2983C3", this);} // tgen
S2983C3 ::S2983C3(){ note_ctor("S2983C3", this);} // tgen

static void Test_S2983C3()
{
  extern Class_Descriptor cd_S2983C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2983C3, buf);
    S2983C3 *dp, &lv = *(dp=new (buf) S2983C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2983C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2983C3)");
    test_class_info(&lv, &cd_S2983C3);
    dp->~S2983C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2983C3(Test_S2983C3, "S2983C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2983C3C1Ev();
extern void _ZN7S2983C3D1Ev();
Name_Map name_map_S2983C3[] = {
  NSPAIR(_ZN7S2983C3C1Ev),
  NSPAIR(_ZN7S2983C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2983C3[];
extern void _ZN7S2983C32v1Ev();
extern void _ZN7S2983C32v2Ev();
extern void _ZN7S2983C32v3Ev();
extern void _ZN7S2983C32v4Ev();
extern void _ZN7S2983C32v5Ev();
extern void _ZN7S2983C32v6Ev();
extern void _ZN7S2983C32v7Ev();
extern void _ZN7S2983C32v8Ev();
extern void _ZN7S2983C32v9Ev();
extern void _ZN7S2983C33v10Ev();
static  VTBL_ENTRY vtc_S2983C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2983C3[0]),
  (VTBL_ENTRY)&_ZN7S2983C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2983C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2983C3[];
extern  VTBL_ENTRY _ZTV7S2983C3[];
Class_Descriptor cd_S2983C3 = {  "S2983C3", // class name
  0,0,//no base classes
  &(vtc_S2983C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2983C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2983C3),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2983C2  : S2983C3 {
  void *s2983c2f0;
  long s2983c2f1[2];
  void *s2983c2f2;
  virtual  ~S2983C2(); // _ZN7S2983C2D1Ev
  virtual void  v11(); // _ZN7S2983C23v11Ev
  virtual void  v12(); // _ZN7S2983C23v12Ev
  virtual void  v13(); // _ZN7S2983C23v13Ev
  virtual void  v14(); // _ZN7S2983C23v14Ev
  virtual void  v15(); // _ZN7S2983C23v15Ev
  virtual void  v16(); // _ZN7S2983C23v16Ev
  virtual void  v17(); // _ZN7S2983C23v17Ev
  virtual void  v18(); // _ZN7S2983C23v18Ev
  virtual void  v19(); // _ZN7S2983C23v19Ev
  virtual void  v20(); // _ZN7S2983C23v20Ev
  S2983C2(); // tgen
};
//SIG(-1 S2983C2) C1{ BC2{ v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fl[2] Fp}


 S2983C2 ::~S2983C2(){ note_dtor("S2983C2", this);}
void  S2983C2 ::v11(){vfunc_called(this, "_ZN7S2983C23v11Ev");}
void  S2983C2 ::v12(){vfunc_called(this, "_ZN7S2983C23v12Ev");}
void  S2983C2 ::v13(){vfunc_called(this, "_ZN7S2983C23v13Ev");}
void  S2983C2 ::v14(){vfunc_called(this, "_ZN7S2983C23v14Ev");}
void  S2983C2 ::v15(){vfunc_called(this, "_ZN7S2983C23v15Ev");}
void  S2983C2 ::v16(){vfunc_called(this, "_ZN7S2983C23v16Ev");}
void  S2983C2 ::v17(){vfunc_called(this, "_ZN7S2983C23v17Ev");}
void  S2983C2 ::v18(){vfunc_called(this, "_ZN7S2983C23v18Ev");}
void  S2983C2 ::v19(){vfunc_called(this, "_ZN7S2983C23v19Ev");}
void  S2983C2 ::v20(){vfunc_called(this, "_ZN7S2983C23v20Ev");}
S2983C2 ::S2983C2(){ note_ctor("S2983C2", this);} // tgen

static void Test_S2983C2()
{
  extern Class_Descriptor cd_S2983C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2983C2, buf);
    S2983C2 *dp, &lv = *(dp=new (buf) S2983C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2983C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2983C2)");
    check_base_class_offset(lv, (S2983C3*), 0, "S2983C2");
    check_field_offset(lv, s2983c2f0, ABISELECT(8,4), "S2983C2.s2983c2f0");
    check_field_offset(lv, s2983c2f1, ABISELECT(16,8), "S2983C2.s2983c2f1");
    check_field_offset(lv, s2983c2f2, ABISELECT(32,16), "S2983C2.s2983c2f2");
    test_class_info(&lv, &cd_S2983C2);
    dp->~S2983C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2983C2(Test_S2983C2, "S2983C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S2983C2C1Ev();
extern void _ZN7S2983C2D1Ev();
Name_Map name_map_S2983C2[] = {
  NSPAIR(_ZN7S2983C2C1Ev),
  NSPAIR(_ZN7S2983C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2983C3;
extern VTBL_ENTRY _ZTI7S2983C3[];
extern  VTBL_ENTRY _ZTV7S2983C3[];
static Base_Class bases_S2983C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2983C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2983C2[];
extern void _ZN7S2983C32v1Ev();
extern void _ZN7S2983C32v2Ev();
extern void _ZN7S2983C32v3Ev();
extern void _ZN7S2983C32v4Ev();
extern void _ZN7S2983C32v5Ev();
extern void _ZN7S2983C32v6Ev();
extern void _ZN7S2983C32v7Ev();
extern void _ZN7S2983C32v8Ev();
extern void _ZN7S2983C32v9Ev();
extern void _ZN7S2983C33v10Ev();
extern void _ZN7S2983C2D1Ev();
extern void _ZN7S2983C2D0Ev();
extern void _ZN7S2983C23v11Ev();
extern void _ZN7S2983C23v12Ev();
extern void _ZN7S2983C23v13Ev();
extern void _ZN7S2983C23v14Ev();
extern void _ZN7S2983C23v15Ev();
extern void _ZN7S2983C23v16Ev();
extern void _ZN7S2983C23v17Ev();
extern void _ZN7S2983C23v18Ev();
extern void _ZN7S2983C23v19Ev();
extern void _ZN7S2983C23v20Ev();
static  VTBL_ENTRY vtc_S2983C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2983C2[0]),
  (VTBL_ENTRY)&_ZN7S2983C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2983C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2983C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2983C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S2983C2[];
extern  VTBL_ENTRY _ZTV7S2983C2[];
Class_Descriptor cd_S2983C2 = {  "S2983C2", // class name
  bases_S2983C2, 1,
  &(vtc_S2983C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S2983C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2983C2),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2983C1  : S2983C2 {
  int s2983c1f0;
  virtual  ~S2983C1(); // _ZN7S2983C1D1Ev
  S2983C1(); // tgen
};
//SIG(1 S2983C1) C1{ BC2{ BC3{ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fl[2] Fp} vd Fi}


 S2983C1 ::~S2983C1(){ note_dtor("S2983C1", this);}
S2983C1 ::S2983C1(){ note_ctor("S2983C1", this);} // tgen

static void Test_S2983C1()
{
  extern Class_Descriptor cd_S2983C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S2983C1, buf);
    S2983C1 *dp, &lv = *(dp=new (buf) S2983C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S2983C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2983C1)");
    check_base_class_offset(lv, (S2983C3*)(S2983C2*), 0, "S2983C1");
    check_base_class_offset(lv, (S2983C2*), 0, "S2983C1");
    check_field_offset(lv, s2983c1f0, ABISELECT(40,20), "S2983C1.s2983c1f0");
    test_class_info(&lv, &cd_S2983C1);
    dp->~S2983C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2983C1(Test_S2983C1, "S2983C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S2983C1C1Ev();
extern void _ZN7S2983C1D1Ev();
Name_Map name_map_S2983C1[] = {
  NSPAIR(_ZN7S2983C1C1Ev),
  NSPAIR(_ZN7S2983C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2983C3;
extern VTBL_ENTRY _ZTI7S2983C3[];
extern  VTBL_ENTRY _ZTV7S2983C3[];
extern Class_Descriptor cd_S2983C2;
extern VTBL_ENTRY _ZTI7S2983C2[];
extern  VTBL_ENTRY _ZTV7S2983C2[];
static Base_Class bases_S2983C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2983C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2983C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2983C1[];
extern void _ZN7S2983C32v1Ev();
extern void _ZN7S2983C32v2Ev();
extern void _ZN7S2983C32v3Ev();
extern void _ZN7S2983C32v4Ev();
extern void _ZN7S2983C32v5Ev();
extern void _ZN7S2983C32v6Ev();
extern void _ZN7S2983C32v7Ev();
extern void _ZN7S2983C32v8Ev();
extern void _ZN7S2983C32v9Ev();
extern void _ZN7S2983C33v10Ev();
extern void _ZN7S2983C1D1Ev();
extern void _ZN7S2983C1D0Ev();
extern void _ZN7S2983C23v11Ev();
extern void _ZN7S2983C23v12Ev();
extern void _ZN7S2983C23v13Ev();
extern void _ZN7S2983C23v14Ev();
extern void _ZN7S2983C23v15Ev();
extern void _ZN7S2983C23v16Ev();
extern void _ZN7S2983C23v17Ev();
extern void _ZN7S2983C23v18Ev();
extern void _ZN7S2983C23v19Ev();
extern void _ZN7S2983C23v20Ev();
static  VTBL_ENTRY vtc_S2983C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2983C1[0]),
  (VTBL_ENTRY)&_ZN7S2983C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2983C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2983C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2983C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2983C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v16Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2983C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S2983C1[];
extern  VTBL_ENTRY _ZTV7S2983C1[];
Class_Descriptor cd_S2983C1 = {  "S2983C1", // class name
  bases_S2983C1, 2,
  &(vtc_S2983C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S2983C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2983C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C4  : virtual S19859C6 {
  virtual  ~S20595C4(); // _ZN8S20595C4D2Ev
  S20595C4(); // tgen
};
//SIG(-1 S20595C4) C1{ VBC2{ vd m Fs} vd}


 S20595C4 ::~S20595C4(){ note_dtor("S20595C4", this);}
S20595C4 ::S20595C4(){ note_ctor("S20595C4", this);} // tgen

static void Test_S20595C4()
{
  extern Class_Descriptor cd_S20595C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20595C4, buf);
    S20595C4 *dp, &lv = *(dp=new (buf) S20595C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20595C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C4)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S20595C4");
    test_class_info(&lv, &cd_S20595C4);
    dp->~S20595C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C4(Test_S20595C4, "S20595C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20595C4C1Ev();
extern void _ZN8S20595C4D2Ev();
Name_Map name_map_S20595C4[] = {
  NSPAIR(_ZN8S20595C4C1Ev),
  NSPAIR(_ZN8S20595C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S20595C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C4[];
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C4D1Ev,_ZThn4_N8S20595C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C4D0Ev,_ZThn4_N8S20595C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C4[];
static  VTT_ENTRY vtt_S20595C4[] = {
  {&(_ZTV8S20595C4[3]),  3,10},
  {&(_ZTV8S20595C4[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
static VTBL_ENTRY alt_thunk_names177[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C4D0Ev,_ZThn4_N8S20595C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C4D1Ev,_ZThn4_N8S20595C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C4 = {  "S20595C4", // class name
  bases_S20595C4, 1,
  &(vtc_S20595C4[0]), // expected_vtbl_contents
  &(vtt_S20595C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20595C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20595C4),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names177,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C6  : virtual S19859C6 {
  ~S20595C6(); // tgen
  S20595C6(); // tgen
};
//SIG(-1 S20595C6) C1{ VBC2{ vd m Fs}}


S20595C6 ::~S20595C6(){ note_dtor("S20595C6", this);} // tgen
S20595C6 ::S20595C6(){ note_ctor("S20595C6", this);} // tgen

static void Test_S20595C6()
{
  extern Class_Descriptor cd_S20595C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20595C6, buf);
    S20595C6 *dp, &lv = *(dp=new (buf) S20595C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20595C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C6)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S20595C6");
    test_class_info(&lv, &cd_S20595C6);
    dp->~S20595C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C6(Test_S20595C6, "S20595C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20595C6C1Ev();
extern void _ZN8S20595C6D1Ev();
Name_Map name_map_S20595C6[] = {
  NSPAIR(_ZN8S20595C6C1Ev),
  NSPAIR(_ZN8S20595C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S20595C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C6[];
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C6D1Ev,_ZThn4_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C6D0Ev,_ZThn4_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C6[];
static  VTT_ENTRY vtt_S20595C6[] = {
  {&(_ZTV8S20595C6[3]),  3,10},
  {&(_ZTV8S20595C6[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
static VTBL_ENTRY alt_thunk_names178[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C6D0Ev,_ZThn4_N8S20595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C6D1Ev,_ZThn4_N8S20595C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C6 = {  "S20595C6", // class name
  bases_S20595C6, 1,
  &(vtc_S20595C6[0]), // expected_vtbl_contents
  &(vtt_S20595C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20595C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20595C6),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names178,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C7  : virtual S19859C6 , virtual S20595C4 , S20595C6 {
  int s20595c7f0;
  virtual  ~S20595C7(); // _ZN8S20595C7D2Ev
  S20595C7(); // tgen
};
//SIG(-1 S20595C7) C1{ VBC2{ vd m Fs} VBC3{ VBC2 vd} BC4{ VBC2} vd Fi}


 S20595C7 ::~S20595C7(){ note_dtor("S20595C7", this);}
S20595C7 ::S20595C7(){ note_ctor("S20595C7", this);} // tgen

static void Test_S20595C7()
{
  extern Class_Descriptor cd_S20595C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20595C7, buf);
    S20595C7 *dp, &lv = *(dp=new (buf) S20595C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20595C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C7)");
    check_base_class_offset(lv, (S19859C6*), ABISELECT(16,8), "S20595C7");
    check_base_class_offset(lv, (S19859C6*)(S20595C4*), ABISELECT(16,8), "S20595C7");
    check_base_class_offset(lv, (S19859C6*)(S20595C6*), ABISELECT(16,8), "S20595C7");
    check_base_class_offset(lv, (S20595C4*), ABISELECT(32,16), "S20595C7");
    check_base_class_offset(lv, (S20595C6*), 0, "S20595C7");
    check_field_offset(lv, s20595c7f0, ABISELECT(8,4), "S20595C7.s20595c7f0");
    test_class_info(&lv, &cd_S20595C7);
    dp->~S20595C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C7(Test_S20595C7, "S20595C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20595C7C1Ev();
extern void _ZN8S20595C7D2Ev();
Name_Map name_map_S20595C7[] = {
  NSPAIR(_ZN8S20595C7C1Ev),
  NSPAIR(_ZN8S20595C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
static Base_Class bases_S20595C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20595C4,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20595C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C7[];
extern void _ZN8S20595C7D1Ev();
extern void _ZN8S20595C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C7[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&_ZN8S20595C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C7[];
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C6__8S20595C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C6__8S20595C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C4__8S20595C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C4__8S20595C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
static  VTT_ENTRY vtt_S20595C7[] = {
  {&(_ZTV8S20595C7[4]),  4,17},
  {&(_tg__ZTV8S20595C6__8S20595C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C6__8S20595C7[3]),  3,5},
  {&(_ZTV8S20595C7[9]),  9,17},
  {&(_ZTV8S20595C7[15]),  15,17},
  {&(_tg__ZTV8S20595C4__8S20595C7[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C4__8S20595C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20595C7[];
extern  VTBL_ENTRY _ZTV8S20595C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C7[];
static VTBL_ENTRY alt_thunk_names179[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C7 = {  "S20595C7", // class name
  bases_S20595C7, 3,
  &(vtc_S20595C7[0]), // expected_vtbl_contents
  &(vtt_S20595C7[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20595C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20595C7),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names179,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C3  : S20595C4 , S19859C6 , S20595C6 , S20595C7 {
  virtual  ~S20595C3(); // _ZN8S20595C3D2Ev
  S20595C3(); // tgen
};
//SIG(-1 S20595C3) C1{ BC2{ VBC3{ vd m Fs} vd} BC3 BC4{ VBC3} BC5{ VBC3 VBC2 BC4 vd Fi} vd}


 S20595C3 ::~S20595C3(){ note_dtor("S20595C3", this);}
S20595C3 ::S20595C3(){ note_ctor("S20595C3", this);} // tgen

static void Test_S20595C3()
{
  extern Class_Descriptor cd_S20595C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20595C3, buf);
    S20595C3 *dp, &lv = *(dp=new (buf) S20595C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20595C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C3)");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C4*), ABISELECT(48,24), "S20595C3");
    /*is_ambiguous_... S20595C3::S20595C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C6*), ABISELECT(48,24), "S20595C3");
    check_base_class_offset(lv, (S19859C6*)(S20595C7*), ABISELECT(48,24), "S20595C3");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C4*), ABISELECT(48,24), "S20595C3");
    check_base_class_offset(lv, (S19859C6*)(S20595C6*)(S20595C7*), ABISELECT(48,24), "S20595C3");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S20595C4*), 0, "S20595C3");
    /*is_ambiguous_... S20595C3::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*), ABISELECT(8,4), "S20595C3");
    /*is_ambiguous_... S20595C3::S20595C6 */ AMB_check_base_class_offset(lv, (S20595C6*), ABISELECT(24,12), "S20595C3");
    check_base_class_offset(lv, (S20595C4*)(S20595C7*), ABISELECT(64,32), "S20595C3");
    check_base_class_offset(lv, (S20595C6*)(S20595C7*), ABISELECT(32,16), "S20595C3");
    check_base_class_offset(lv, (S20595C7*), ABISELECT(32,16), "S20595C3");
    test_class_info(&lv, &cd_S20595C3);
    dp->~S20595C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C3(Test_S20595C3, "S20595C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S20595C3C1Ev();
extern void _ZN8S20595C3D2Ev();
Name_Map name_map_S20595C3[] = {
  NSPAIR(_ZN8S20595C3C1Ev),
  NSPAIR(_ZN8S20595C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C7;
extern VTBL_ENTRY _ZTI8S20595C7[];
extern  VTBL_ENTRY _ZTV8S20595C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C7[];
static Base_Class bases_S20595C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(48,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20595C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20595C6,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20595C4,    ABISELECT(64,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20595C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20595C7,    ABISELECT(32,16), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C3[];
extern void _ZN8S20595C3D1Ev();
extern void _ZN8S20595C3D0Ev();
extern void ABISELECT(_ZThn8_N8S20595C3D1Ev,_ZThn4_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C3D0Ev,_ZThn4_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn24_N8S20595C3D1Ev,_ZThn12_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20595C3D0Ev,_ZThn12_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S20595C3D1Ev,_ZThn16_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C3D0Ev,_ZThn16_N8S20595C3D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20595C3D1Ev,_ZThn24_N8S20595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S20595C3D0Ev,_ZThn24_N8S20595C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20595C3D1Ev,_ZThn32_N8S20595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20595C3D0Ev,_ZThn32_N8S20595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C3[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&_ZN8S20595C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C3D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20595C3D1Ev,_ZThn4_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20595C3D0Ev,_ZThn4_N8S20595C3D0Ev),
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20595C3D1Ev,_ZThn12_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20595C3D0Ev,_ZThn12_N8S20595C3D0Ev),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20595C3D1Ev,_ZThn16_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20595C3D0Ev,_ZThn16_N8S20595C3D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C3[];
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C4__A__8S20595C3[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20595C4D1Ev,_ZThn24_N8S20595C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20595C4D0Ev,_ZThn24_N8S20595C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C4__A__8S20595C3[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C6__8S20595C3[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20595C6D1Ev,_ZThn12_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20595C6D0Ev,_ZThn12_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C6__8S20595C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void _ZN8S20595C7D1Ev();
extern void _ZN8S20595C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C7__8S20595C3[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&_ZN8S20595C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C7D0Ev,
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C68S20595C7__A1__8S20595C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C68S20595C7__A1__8S20595C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C7__8S20595C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C4__8S20595C7__8S20595C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev),
};
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C4__A1__8S20595C3[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C4__A1__8S20595C3[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
static  VTT_ENTRY vtt_S20595C3[] = {
  {&(_ZTV8S20595C3[4]),  4,32},
  {&(_tg__ZTV8S20595C4__A__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C4__A__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S20595C6__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C6__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S20595C7__8S20595C3[4]),  4,6},
  {&(_tg__ZTV8S20595C68S20595C7__A1__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C68S20595C7__A1__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C7__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S20595C4__8S20595C7__8S20595C3[4]),  4,6},
  {&(_ZTV8S20595C3[24]),  24,32},
  {&(_ZTV8S20595C3[13]),  13,32},
  {&(_ZTV8S20595C3[19]),  19,32},
  {&(_ZTV8S20595C3[30]),  30,32},
  {&(_tg__ZTV8S20595C4__A1__8S20595C3[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C4__A1__8S20595C3[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20595C3[];
extern  VTBL_ENTRY _ZTV8S20595C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C3[];
static VTBL_ENTRY alt_thunk_names180[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20595C6D0Ev,_ZThn12_N8S20595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20595C6D1Ev,_ZThn12_N8S20595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C4D0Ev,_ZThn24_N8S20595C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C4D1Ev,_ZThn24_N8S20595C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C3D0Ev,_ZThn32_N8S20595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C3D1Ev,_ZThn32_N8S20595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C3D0Ev,_ZThn24_N8S20595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C3D1Ev,_ZThn24_N8S20595C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C3 = {  "S20595C3", // class name
  bases_S20595C3, 7,
  &(vtc_S20595C3[0]), // expected_vtbl_contents
  &(vtt_S20595C3[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S20595C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20595C3),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C3),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names180,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C8  : virtual S20595C6 {
  virtual  ~S20595C8(); // _ZN8S20595C8D2Ev
  S20595C8(); // tgen
};
//SIG(-1 S20595C8) C1{ VBC2{ VBC3{ vd m Fs}} vd}


 S20595C8 ::~S20595C8(){ note_dtor("S20595C8", this);}
S20595C8 ::S20595C8(){ note_ctor("S20595C8", this);} // tgen

static void Test_S20595C8()
{
  extern Class_Descriptor cd_S20595C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20595C8, buf);
    S20595C8 *dp, &lv = *(dp=new (buf) S20595C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20595C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C8)");
    check_base_class_offset(lv, (S19859C6*)(S20595C6*), ABISELECT(8,4), "S20595C8");
    check_base_class_offset(lv, (S20595C6*), 0, "S20595C8");
    test_class_info(&lv, &cd_S20595C8);
    dp->~S20595C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C8(Test_S20595C8, "S20595C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20595C8C1Ev();
extern void _ZN8S20595C8D2Ev();
Name_Map name_map_S20595C8[] = {
  NSPAIR(_ZN8S20595C8C1Ev),
  NSPAIR(_ZN8S20595C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
static Base_Class bases_S20595C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20595C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C8[];
extern void _ZN8S20595C8D1Ev();
extern void _ZN8S20595C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C8D1Ev,_ZThn4_N8S20595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C8D0Ev,_ZThn4_N8S20595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&_ZN8S20595C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C8D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C8[];
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C6__8S20595C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C6D1Ev,_ZThn4_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C6D0Ev,_ZThn4_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C6__8S20595C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
static  VTT_ENTRY vtt_S20595C8[] = {
  {&(_ZTV8S20595C8[5]),  5,12},
  {&(_ZTV8S20595C8[5]),  5,12},
  {&(_ZTV8S20595C8[10]),  10,12},
  {&(_tg__ZTV8S20595C6__8S20595C8[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C6__8S20595C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20595C8[];
extern  VTBL_ENTRY _ZTV8S20595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C8[];
static VTBL_ENTRY alt_thunk_names181[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C6D0Ev,_ZThn4_N8S20595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C6D1Ev,_ZThn4_N8S20595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C8D0Ev,_ZThn4_N8S20595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C8D1Ev,_ZThn4_N8S20595C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C8 = {  "S20595C8", // class name
  bases_S20595C8, 2,
  &(vtc_S20595C8[0]), // expected_vtbl_contents
  &(vtt_S20595C8[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20595C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20595C8),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C8),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names181,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C2  : virtual S20595C3 , S20595C8 , virtual S2265C38 {
  virtual  ~S20595C2(); // _ZN8S20595C2D2Ev
  S20595C2(); // tgen
};
//SIG(-1 S20595C2) C1{ VBC2{ BC3{ VBC4{ vd m Fs} vd} BC4 BC5{ VBC4} BC6{ VBC4 VBC3 BC5 vd Fi} vd} BC7{ VBC5 vd} VBC8{ m} vd}


 S20595C2 ::~S20595C2(){ note_dtor("S20595C2", this);}
S20595C2 ::S20595C2(){ note_ctor("S20595C2", this);} // tgen

static void Test_S20595C2()
{
  extern Class_Descriptor cd_S20595C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S20595C2, buf);
    S20595C2 *dp, &lv = *(dp=new (buf) S20595C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S20595C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C2)");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C4*)(S20595C3*), ABISELECT(56,28), "S20595C2");
    /*is_ambiguous_... S20595C3::S20595C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C6*)(S20595C3*), ABISELECT(56,28), "S20595C2");
    check_base_class_offset(lv, (S19859C6*)(S20595C7*)(S20595C3*), ABISELECT(56,28), "S20595C2");
    /*is_ambiguous_... S20595C2::S20595C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C4*), ABISELECT(56,28), "S20595C2");
    check_base_class_offset(lv, (S19859C6*)(S20595C6*)(S20595C7*)(S20595C3*), ABISELECT(56,28), "S20595C2");
    /*is_ambiguous_... S20595C2::S20595C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C6*), ABISELECT(56,28), "S20595C2");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S20595C4*)(S20595C3*), ABISELECT(8,4), "S20595C2");
    /*is_ambiguous_... S20595C3::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C3*), ABISELECT(16,8), "S20595C2");
    /*is_ambiguous_... S20595C3::S20595C6 */ AMB_check_base_class_offset(lv, (S20595C6*)(S20595C3*), ABISELECT(32,16), "S20595C2");
    check_base_class_offset(lv, (S20595C4*)(S20595C7*)(S20595C3*), ABISELECT(72,36), "S20595C2");
    check_base_class_offset(lv, (S20595C6*)(S20595C7*)(S20595C3*), ABISELECT(40,20), "S20595C2");
    check_base_class_offset(lv, (S20595C7*)(S20595C3*), ABISELECT(40,20), "S20595C2");
    check_base_class_offset(lv, (S20595C3*), ABISELECT(8,4), "S20595C2");
    check_base_class_offset(lv, (S20595C6*)(S20595C8*), 0, "S20595C2");
    check_base_class_offset(lv, (S20595C8*), 0, "S20595C2");
    check_base_class_offset(lv, (S2265C38*), 0, "S20595C2");
    test_class_info(&lv, &cd_S20595C2);
    dp->~S20595C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C2(Test_S20595C2, "S20595C2", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S20595C2C1Ev();
extern void _ZN8S20595C2D2Ev();
Name_Map name_map_S20595C2[] = {
  NSPAIR(_ZN8S20595C2C1Ev),
  NSPAIR(_ZN8S20595C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C7;
extern VTBL_ENTRY _ZTI8S20595C7[];
extern  VTBL_ENTRY _ZTV8S20595C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C7[];
extern Class_Descriptor cd_S20595C3;
extern VTBL_ENTRY _ZTI8S20595C3[];
extern  VTBL_ENTRY _ZTV8S20595C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C3[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C8;
extern VTBL_ENTRY _ZTI8S20595C8[];
extern  VTBL_ENTRY _ZTV8S20595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S20595C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(56,28), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20595C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20595C6,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20595C4,    ABISELECT(72,36), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20595C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20595C7,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20595C3,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20595C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20595C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C2[];
extern void ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev)();
extern void _ZN8S20595C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev)();
extern void _ZN8S20595C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20595C2D1Ev,_ZTv0_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C2D1Ev,_ZThn4_N8S20595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20595C2D0Ev,_ZTv0_n20_N8S20595C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C2D0Ev,_ZThn4_N8S20595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S20595C2D1Ev,_ZTvn4_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S20595C2D0Ev,_ZTvn4_n20_N8S20595C2D0Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S20595C2D1Ev,_ZTvn12_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S20595C2D0Ev,_ZTvn12_n20_N8S20595C2D0Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S20595C2D1Ev,_ZTvn16_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S20595C2D0Ev,_ZTvn16_n20_N8S20595C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C2D1Ev,_ZTv0_n12_N8S20595C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S20595C2D1Ev,_ZThn28_N8S20595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C2D0Ev,_ZTv0_n12_N8S20595C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S20595C2D0Ev,_ZThn28_N8S20595C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev)();
extern void ABISELECT(_ZThn72_N8S20595C2D1Ev,_ZThn36_N8S20595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev)();
extern void ABISELECT(_ZThn72_N8S20595C2D0Ev,_ZThn36_N8S20595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C2[] = {
  0,
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20595C2D1Ev,_ZTv0_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20595C2D0Ev,_ZTv0_n20_N8S20595C2D0Ev),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20595C2D1Ev,_ZTvn4_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20595C2D0Ev,_ZTvn4_n20_N8S20595C2D0Ev),
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S20595C2D1Ev,_ZTvn12_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S20595C2D0Ev,_ZTvn12_n20_N8S20595C2D0Ev),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S20595C2D1Ev,_ZTvn16_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S20595C2D0Ev,_ZTvn16_n20_N8S20595C2D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C2D1Ev,_ZTv0_n12_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C2D0Ev,_ZTv0_n12_N8S20595C2D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C2[];
extern void ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev)();
extern void _ZN8S20595C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev)();
extern void _ZN8S20595C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C8__8S20595C2[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S20595C8D1Ev,_ZThn28_N8S20595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S20595C8D0Ev,_ZThn28_N8S20595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C8__8S20595C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev),
};
extern void _ZN8S20595C3D1Ev();
extern void _ZN8S20595C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C3__8S20595C2[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&_ZN8S20595C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C3D0Ev,
};
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C48S20595C3__8S20595C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20595C4D1Ev,_ZThn24_N8S20595C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20595C4D0Ev,_ZThn24_N8S20595C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C48S20595C3__8S20595C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C68S20595C3__8S20595C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20595C6D1Ev,_ZThn12_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20595C6D0Ev,_ZThn12_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C68S20595C3__8S20595C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void _ZN8S20595C7D1Ev();
extern void _ZN8S20595C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C78S20595C3__8S20595C2[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&_ZN8S20595C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C7D0Ev,
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C68S20595C78S20595C3__A1__8S20595C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C68S20595C78S20595C3__A1__8S20595C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C78S20595C3__8S20595C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C4__8S20595C78S20595C3__8S20595C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20595C3D1Ev,_ZThn24_N8S20595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S20595C3D0Ev,_ZThn24_N8S20595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C3__8S20595C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev),
};
extern void ABISELECT(_ZThn24_N8S20595C3D1Ev,_ZThn12_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20595C3D0Ev,_ZThn12_N8S20595C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20595C6__8S20595C3__8S20595C2[] = {
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20595C3D1Ev,_ZThn12_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20595C3D0Ev,_ZThn12_N8S20595C3D0Ev),
};
extern void ABISELECT(_ZThn32_N8S20595C3D1Ev,_ZThn16_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C3D0Ev,_ZThn16_N8S20595C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20595C7__8S20595C3__8S20595C2[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20595C3D1Ev,_ZThn16_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20595C3D0Ev,_ZThn16_N8S20595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20595C3D1Ev,_ZThn32_N8S20595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20595C3D0Ev,_ZThn32_N8S20595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C4__A1__8S20595C3__8S20595C2[] = {
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev),
};
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C4__A1__8S20595C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C4__A1__8S20595C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C6__A2__8S20595C2[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S20595C6D1Ev,_ZThn28_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S20595C6D0Ev,_ZThn28_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C6__A2__8S20595C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
static  VTT_ENTRY vtt_S20595C2[] = {
  {&(_ZTV8S20595C2[8]),  8,43},
  {&(_tg__ZTV8S20595C8__8S20595C2[5]),  5,7},
  {&(_tg__ZTV8S20595C8__8S20595C2[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S20595C8__8S20595C2[3]),  3,5},
  {&(_ZTV8S20595C2[15]),  15,43},
  {&(_ZTV8S20595C2[35]),  35,43},
  {&(_ZTV8S20595C2[19]),  19,43},
  {&(_ZTV8S20595C2[24]),  24,43},
  {&(_ZTV8S20595C2[30]),  30,43},
  {&(_ZTV8S20595C2[41]),  41,43},
  {&(_ZTV8S20595C2[8]),  8,43},
  {&(_tg__ZTV8S20595C3__8S20595C2[4]),  4,6},
  {&(_tg__ZTV8S20595C48S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C48S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S20595C68S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C68S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S20595C78S20595C3__8S20595C2[4]),  4,6},
  {&(_tg__ZTV8S20595C68S20595C78S20595C3__A1__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C68S20595C78S20595C3__A1__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C78S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S20595C4__8S20595C78S20595C3__8S20595C2[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S20595C6__8S20595C3__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S20595C7__8S20595C3__8S20595C2[4]),  4,6},
  {&(_tg__ZTV8S20595C4__A1__8S20595C3__8S20595C2[4]),  4,6},
  {&(_tg__ZTV8S20595C4__A1__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C4__A1__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S20595C6__A2__8S20595C2[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C6__A2__8S20595C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20595C2[];
extern  VTBL_ENTRY _ZTV8S20595C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C2[];
static VTBL_ENTRY alt_thunk_names182[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C3D0Ev,_ZThn32_N8S20595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C3D1Ev,_ZThn32_N8S20595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C3D0Ev,_ZThn24_N8S20595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C3D1Ev,_ZThn24_N8S20595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C6D0Ev,_ZThn28_N8S20595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20595C6D0Ev,_ZThn12_N8S20595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C6D1Ev,_ZThn28_N8S20595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20595C6D1Ev,_ZThn12_N8S20595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C4D0Ev,_ZThn24_N8S20595C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C4D1Ev,_ZThn24_N8S20595C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C8D0Ev,_ZThn28_N8S20595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C8D1Ev,_ZThn28_N8S20595C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20595C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20595C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C2D0Ev,_ZTv0_n12_N8S20595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C2D0Ev,_ZThn28_N8S20595C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C2D1Ev,_ZTv0_n12_N8S20595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C2D1Ev,_ZThn28_N8S20595C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20595C2D0Ev,_ZTv0_n20_N8S20595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C2D0Ev,_ZThn4_N8S20595C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20595C2D1Ev,_ZTv0_n20_N8S20595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C2D1Ev,_ZThn4_N8S20595C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20595C2D0Ev,_ZThn36_N8S20595C2D0Ev),
  (VTBL_ENTRY)_ZN8S20595C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20595C2D1Ev,_ZThn36_N8S20595C2D1Ev),
  (VTBL_ENTRY)_ZN8S20595C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C2 = {  "S20595C2", // class name
  bases_S20595C2, 11,
  &(vtc_S20595C2[0]), // expected_vtbl_contents
  &(vtt_S20595C2[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S20595C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20595C2),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C2),29, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names182,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20595C1  : virtual S20595C2 , S20595C8 {
  virtual  ~S20595C1(); // _ZN8S20595C1D2Ev
  S20595C1(); // tgen
};
//SIG(1 S20595C1) C1{ VBC2{ VBC3{ BC4{ VBC5{ vd m Fs} vd} BC5 BC6{ VBC5} BC7{ VBC5 VBC4 BC6 vd Fi} vd} BC8{ VBC6 vd} VBC9{ m} vd} BC8 vd}


 S20595C1 ::~S20595C1(){ note_dtor("S20595C1", this);}
S20595C1 ::S20595C1(){ note_ctor("S20595C1", this);} // tgen

static void Test_S20595C1()
{
  extern Class_Descriptor cd_S20595C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S20595C1, buf);
    S20595C1 *dp, &lv = *(dp=new (buf) S20595C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S20595C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20595C1)");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C4*)(S20595C3*), ABISELECT(64,32), "S20595C1");
    /*is_ambiguous_... S20595C3::S20595C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C6*)(S20595C3*), ABISELECT(64,32), "S20595C1");
    check_base_class_offset(lv, (S19859C6*)(S20595C7*)(S20595C3*), ABISELECT(64,32), "S20595C1");
    /*is_ambiguous_... S20595C1::S20595C4 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C4*), ABISELECT(64,32), "S20595C1");
    check_base_class_offset(lv, (S19859C6*)(S20595C6*)(S20595C7*)(S20595C3*), ABISELECT(64,32), "S20595C1");
    /*is_ambiguous_... S20595C1::S20595C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C6*), ABISELECT(64,32), "S20595C1");
    /*is_ambiguous_... S20595C3::S20595C4 */ AMB_check_base_class_offset(lv, (S20595C4*)(S20595C3*), ABISELECT(16,8), "S20595C1");
    /*is_ambiguous_... S20595C3::S19859C6 */ AMB_check_base_class_offset(lv, (S19859C6*)(S20595C3*), ABISELECT(24,12), "S20595C1");
    /*is_ambiguous_... S20595C3::S20595C6 */ AMB_check_base_class_offset(lv, (S20595C6*)(S20595C3*), ABISELECT(40,20), "S20595C1");
    check_base_class_offset(lv, (S20595C4*)(S20595C7*)(S20595C3*), ABISELECT(80,40), "S20595C1");
    check_base_class_offset(lv, (S20595C6*)(S20595C7*)(S20595C3*), ABISELECT(48,24), "S20595C1");
    check_base_class_offset(lv, (S20595C7*)(S20595C3*), ABISELECT(48,24), "S20595C1");
    check_base_class_offset(lv, (S20595C3*)(S20595C2*), ABISELECT(16,8), "S20595C1");
    check_base_class_offset(lv, (S20595C6*)(S20595C8*)(S20595C2*), ABISELECT(8,4), "S20595C1");
    /*is_ambiguous_... S20595C1::S20595C8 */ AMB_check_base_class_offset(lv, (S20595C6*)(S20595C8*), ABISELECT(8,4), "S20595C1");
    check_base_class_offset(lv, (S20595C8*)(S20595C2*), ABISELECT(8,4), "S20595C1");
    check_base_class_offset(lv, (S2265C38*)(S20595C2*), 0, "S20595C1");
    check_base_class_offset(lv, (S20595C2*), ABISELECT(8,4), "S20595C1");
    /*is_ambiguous_... S20595C1::S20595C8 */ AMB_check_base_class_offset(lv, (S20595C8*), 0, "S20595C1");
    test_class_info(&lv, &cd_S20595C1);
    dp->~S20595C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20595C1(Test_S20595C1, "S20595C1", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S20595C1C1Ev();
extern void _ZN8S20595C1D2Ev();
Name_Map name_map_S20595C1[] = {
  NSPAIR(_ZN8S20595C1C1Ev),
  NSPAIR(_ZN8S20595C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C4;
extern VTBL_ENTRY _ZTI8S20595C4[];
extern  VTBL_ENTRY _ZTV8S20595C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C4[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C7;
extern VTBL_ENTRY _ZTI8S20595C7[];
extern  VTBL_ENTRY _ZTV8S20595C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C7[];
extern Class_Descriptor cd_S20595C3;
extern VTBL_ENTRY _ZTI8S20595C3[];
extern  VTBL_ENTRY _ZTV8S20595C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C3[];
extern Class_Descriptor cd_S20595C6;
extern VTBL_ENTRY _ZTI8S20595C6[];
extern  VTBL_ENTRY _ZTV8S20595C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C6[];
extern Class_Descriptor cd_S20595C8;
extern VTBL_ENTRY _ZTI8S20595C8[];
extern  VTBL_ENTRY _ZTV8S20595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C8[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S20595C2;
extern VTBL_ENTRY _ZTI8S20595C2[];
extern  VTBL_ENTRY _ZTV8S20595C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C2[];
extern Class_Descriptor cd_S20595C8;
extern VTBL_ENTRY _ZTI8S20595C8[];
extern  VTBL_ENTRY _ZTV8S20595C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C8[];
static Base_Class bases_S20595C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19859C6,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20595C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19859C6,    ABISELECT(24,12), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20595C6,    ABISELECT(40,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20595C4,    ABISELECT(80,40), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20595C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20595C7,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20595C3,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20595C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20595C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20595C2,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20595C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20595C1[];
extern void ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev)();
extern void _ZN8S20595C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev)();
extern void _ZN8S20595C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C1D1Ev,_ZThn4_N8S20595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C1D0Ev,_ZThn4_N8S20595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20595C1D1Ev,_ZTv0_n20_N8S20595C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C1D1Ev,_ZThn8_N8S20595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20595C1D0Ev,_ZTv0_n20_N8S20595C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C1D0Ev,_ZThn8_N8S20595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S20595C1D1Ev,_ZTvn4_n20_N8S20595C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S20595C1D0Ev,_ZTvn4_n20_N8S20595C1D0Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S20595C1D1Ev,_ZTvn12_n20_N8S20595C1D1Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S20595C1D0Ev,_ZTvn12_n20_N8S20595C1D0Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S20595C1D1Ev,_ZTvn16_n20_N8S20595C1D1Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S20595C1D0Ev,_ZTvn16_n20_N8S20595C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C1D1Ev,_ZTv0_n12_N8S20595C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20595C1D1Ev,_ZThn32_N8S20595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C1D0Ev,_ZTv0_n12_N8S20595C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20595C1D0Ev,_ZThn32_N8S20595C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20595C1D1Ev,_ZThn40_N8S20595C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20595C1D0Ev,_ZThn40_N8S20595C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20595C1[] = {
  0,
  ABISELECT(80,40),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  ABISELECT(-8,-4),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20595C1D1Ev,_ZTv0_n20_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20595C1D0Ev,_ZTv0_n20_N8S20595C1D0Ev),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20595C1D1Ev,_ZTvn4_n20_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20595C1D0Ev,_ZTvn4_n20_N8S20595C1D0Ev),
  ABISELECT(24,12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S20595C1D1Ev,_ZTvn12_n20_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S20595C1D0Ev,_ZTvn12_n20_N8S20595C1D0Ev),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S20595C1D1Ev,_ZTvn16_n20_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S20595C1D0Ev,_ZTvn16_n20_N8S20595C1D0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C1D1Ev,_ZTv0_n12_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C1D0Ev,_ZTv0_n12_N8S20595C1D0Ev),
  ABISELECT(-80,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20595C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20595C1[];
extern void ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev)();
extern void _ZN8S20595C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev)();
extern void _ZN8S20595C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C8__A1__8S20595C1[] = {
  ABISELECT(8,4),
  0,
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C8D1Ev,_ZThn4_N8S20595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C8D0Ev,_ZThn4_N8S20595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C6__8S20595C8__A1__8S20595C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20595C8D1Ev,_ZThn32_N8S20595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20595C8D0Ev,_ZThn32_N8S20595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C8__A1__8S20595C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev)();
extern void _ZN8S20595C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev)();
extern void _ZN8S20595C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C2__8S20595C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev)();
extern void _ZN8S20595C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev)();
extern void _ZN8S20595C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C88S20595C2__8S20595C1[] = {
  0,
  0,
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S20595C8D1Ev,_ZThn28_N8S20595C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S20595C8D0Ev,_ZThn28_N8S20595C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C88S20595C2__8S20595C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20595C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20595C2D1Ev,_ZTv0_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20595C2D1Ev,_ZThn4_N8S20595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20595C2D0Ev,_ZTv0_n20_N8S20595C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20595C2D0Ev,_ZThn4_N8S20595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C3__8S20595C2__8S20595C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20595C2D1Ev,_ZTv0_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20595C2D0Ev,_ZTv0_n20_N8S20595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C2D1Ev,_ZTv0_n12_N8S20595C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S20595C2D1Ev,_ZThn28_N8S20595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C2D0Ev,_ZTv0_n12_N8S20595C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S20595C2D0Ev,_ZThn28_N8S20595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C2__8S20595C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C2D1Ev,_ZTv0_n12_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C2D0Ev,_ZTv0_n12_N8S20595C2D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S20595C2D1Ev,_ZTvn4_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S20595C2D0Ev,_ZTvn4_n20_N8S20595C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C68S20595C3__A1__8S20595C2__8S20595C1[] = {
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20595C2D1Ev,_ZTvn4_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S20595C2D0Ev,_ZTvn4_n20_N8S20595C2D0Ev),
};
extern void ABISELECT(_ZTvn24_n40_N8S20595C2D1Ev,_ZTvn12_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZTvn24_n40_N8S20595C2D0Ev,_ZTvn12_n20_N8S20595C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20595C68S20595C3__8S20595C2__8S20595C1[] = {
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S20595C2D1Ev,_ZTvn12_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n40_N8S20595C2D0Ev,_ZTvn12_n20_N8S20595C2D0Ev),
};
extern void ABISELECT(_ZTvn32_n40_N8S20595C2D1Ev,_ZTvn16_n20_N8S20595C2D1Ev)();
extern void ABISELECT(_ZTvn32_n40_N8S20595C2D0Ev,_ZTvn16_n20_N8S20595C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20595C78S20595C3__8S20595C2__8S20595C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S20595C2D1Ev,_ZTvn16_n20_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n40_N8S20595C2D0Ev,_ZTvn16_n20_N8S20595C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev)();
extern void ABISELECT(_ZThn72_N8S20595C2D1Ev,_ZThn36_N8S20595C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev)();
extern void ABISELECT(_ZThn72_N8S20595C2D0Ev,_ZThn36_N8S20595C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C4__A1__8S20595C2__8S20595C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-16,-8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20595C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev),
};
extern void _ZN8S20595C3D1Ev();
extern void _ZN8S20595C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C3__8S20595C1[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&_ZN8S20595C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C3D0Ev,
};
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C48S20595C3__8S20595C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZThn48_N8S20595C4D1Ev,_ZThn24_N8S20595C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
extern void ABISELECT(_ZThn48_N8S20595C4D0Ev,_ZThn24_N8S20595C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C48S20595C3__8S20595C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C68S20595C3__8S20595C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20595C6D1Ev,_ZThn12_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn24_N8S20595C6D0Ev,_ZThn12_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C68S20595C3__8S20595C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void _ZN8S20595C7D1Ev();
extern void _ZN8S20595C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C78S20595C3__8S20595C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&_ZN8S20595C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C7D0Ev,
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C68S20595C78S20595C3__A1__8S20595C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C68S20595C78S20595C3__A1__8S20595C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C78S20595C3__8S20595C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C4__8S20595C78S20595C3__8S20595C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20595C3D1Ev,_ZThn24_N8S20595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S20595C3D0Ev,_ZThn24_N8S20595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C3__8S20595C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev),
};
extern void ABISELECT(_ZThn24_N8S20595C3D1Ev,_ZThn12_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20595C3D0Ev,_ZThn12_N8S20595C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20595C6__8S20595C3__8S20595C1[] = {
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20595C3D1Ev,_ZThn12_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20595C3D0Ev,_ZThn12_N8S20595C3D0Ev),
};
extern void ABISELECT(_ZThn32_N8S20595C3D1Ev,_ZThn16_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S20595C3D0Ev,_ZThn16_N8S20595C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20595C7__8S20595C3__8S20595C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20595C3D1Ev,_ZThn16_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20595C3D0Ev,_ZThn16_N8S20595C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20595C3D1Ev,_ZThn32_N8S20595C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20595C3D0Ev,_ZThn32_N8S20595C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20595C4__A1__8S20595C3__8S20595C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-16,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20595C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev),
};
extern void _ZN8S20595C4D1Ev();
extern void _ZN8S20595C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C4__A1__8S20595C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&_ZN8S20595C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C4__A1__8S20595C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20595C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev),
};
extern void _ZN8S20595C6D1Ev();
extern void _ZN8S20595C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20595C6__A2__8S20595C1[] = {
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&_ZN8S20595C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20595C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev)();
extern void ABISELECT(_ZThn56_N8S20595C6D1Ev,_ZThn28_N8S20595C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev)();
extern void ABISELECT(_ZThn56_N8S20595C6D0Ev,_ZThn28_N8S20595C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19859C6__8S20595C6__A2__8S20595C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20595C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev),
};
static  VTT_ENTRY vtt_S20595C1[] = {
  {&(_ZTV8S20595C1[9]),  9,54},
  {&(_tg__ZTV8S20595C8__A1__8S20595C1[5]),  5,7},
  {&(_tg__ZTV8S20595C6__8S20595C8__A1__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S20595C8__A1__8S20595C1[3]),  3,5},
  {&(_ZTV8S20595C1[19]),  19,54},
  {&(_ZTV8S20595C1[26]),  26,54},
  {&(_ZTV8S20595C1[46]),  46,54},
  {&(_ZTV8S20595C1[30]),  30,54},
  {&(_ZTV8S20595C1[35]),  35,54},
  {&(_ZTV8S20595C1[41]),  41,54},
  {&(_ZTV8S20595C1[52]),  52,54},
  {&(_ZTV8S20595C1[19]),  19,54},
  {&(_tg__ZTV8S20595C2__8S20595C1[8]),  8,10},
  {&(_tg__ZTV8S20595C88S20595C2__8S20595C1[5]),  5,7},
  {&(_tg__ZTV8S20595C88S20595C2__8S20595C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S20595C88S20595C2__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C3__8S20595C2__8S20595C1[5]),  5,7},
  {&(_tg__ZTV8S19859C6__8S20595C2__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C68S20595C3__A1__8S20595C2__8S20595C1[2]),  2,4},
  {&(_tg__ZTV8S20595C68S20595C3__8S20595C2__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C78S20595C3__8S20595C2__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S20595C4__A1__8S20595C2__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S20595C2__8S20595C1[8]),  8,10},
  {&(_tg__ZTV8S20595C3__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S20595C48S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C48S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C68S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C68S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C78S20595C3__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S20595C68S20595C78S20595C3__A1__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C68S20595C78S20595C3__A1__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C78S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C4__8S20595C78S20595C3__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S19859C6__8S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C6__8S20595C3__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C7__8S20595C3__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S20595C4__A1__8S20595C3__8S20595C1[4]),  4,6},
  {&(_tg__ZTV8S20595C4__A1__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C4__A1__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S20595C6__A2__8S20595C1[3]),  3,5},
  {&(_tg__ZTV8S19859C6__8S20595C6__A2__8S20595C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20595C1[];
extern  VTBL_ENTRY _ZTV8S20595C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20595C1[];
static VTBL_ENTRY alt_thunk_names183[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C3D0Ev,_ZTv0_n16_N8S20595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C3D0Ev,_ZThn32_N8S20595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C3D1Ev,_ZTv0_n16_N8S20595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C3D1Ev,_ZThn32_N8S20595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C3D0Ev,_ZTv0_n12_N8S20595C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C3D0Ev,_ZThn24_N8S20595C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C3D1Ev,_ZTv0_n12_N8S20595C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C3D1Ev,_ZThn24_N8S20595C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D0Ev,_ZTv0_n16_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D0Ev,_ZThn16_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C7D1Ev,_ZTv0_n16_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20595C7D1Ev,_ZThn16_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D0Ev,_ZTv0_n12_N8S20595C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D0Ev,_ZThn8_N8S20595C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C7D1Ev,_ZTv0_n12_N8S20595C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C7D1Ev,_ZThn8_N8S20595C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D0Ev,_ZTv0_n12_N8S20595C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C6D0Ev,_ZThn28_N8S20595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D0Ev,_ZThn8_N8S20595C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20595C6D0Ev,_ZThn12_N8S20595C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C6D1Ev,_ZTv0_n12_N8S20595C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C6D1Ev,_ZThn28_N8S20595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C6D1Ev,_ZThn8_N8S20595C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20595C6D1Ev,_ZThn12_N8S20595C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D0Ev,_ZTv0_n12_N8S20595C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C4D0Ev,_ZThn24_N8S20595C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C4D1Ev,_ZTv0_n12_N8S20595C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20595C4D1Ev,_ZThn24_N8S20595C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C2D0Ev,_ZTv0_n12_N8S20595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C2D0Ev,_ZThn28_N8S20595C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C2D1Ev,_ZTv0_n12_N8S20595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C2D1Ev,_ZThn28_N8S20595C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20595C2D0Ev,_ZTv0_n20_N8S20595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C2D0Ev,_ZThn4_N8S20595C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20595C2D1Ev,_ZTv0_n20_N8S20595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C2D1Ev,_ZThn4_N8S20595C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C2D0Ev,_ZTv0_n16_N8S20595C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20595C2D0Ev,_ZThn36_N8S20595C2D0Ev),
  (VTBL_ENTRY)_ZN8S20595C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C2D1Ev,_ZTv0_n16_N8S20595C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20595C2D1Ev,_ZThn36_N8S20595C2D1Ev),
  (VTBL_ENTRY)_ZN8S20595C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C8D0Ev,_ZTv0_n12_N8S20595C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C8D0Ev,_ZThn28_N8S20595C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C8D0Ev,_ZThn32_N8S20595C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C8D1Ev,_ZTv0_n12_N8S20595C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20595C8D1Ev,_ZThn28_N8S20595C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C8D1Ev,_ZThn32_N8S20595C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C8D0Ev,_ZTv0_n16_N8S20595C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20595C8D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C8D0Ev,_ZThn4_N8S20595C8D0Ev),
  (VTBL_ENTRY)_ZN8S20595C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C8D1Ev,_ZTv0_n16_N8S20595C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20595C8D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C8D1Ev,_ZThn4_N8S20595C8D1Ev),
  (VTBL_ENTRY)_ZN8S20595C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C1D0Ev,_ZTv0_n12_N8S20595C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C1D0Ev,_ZThn32_N8S20595C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20595C1D1Ev,_ZTv0_n12_N8S20595C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20595C1D1Ev,_ZThn32_N8S20595C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20595C1D0Ev,_ZTv0_n20_N8S20595C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C1D0Ev,_ZThn8_N8S20595C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20595C1D1Ev,_ZTv0_n20_N8S20595C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20595C1D1Ev,_ZThn8_N8S20595C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C1D0Ev,_ZTv0_n16_N8S20595C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20595C1D0Ev,_ZThn40_N8S20595C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C1D0Ev,_ZThn4_N8S20595C1D0Ev),
  (VTBL_ENTRY)_ZN8S20595C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20595C1D1Ev,_ZTv0_n16_N8S20595C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20595C1D1Ev,_ZThn40_N8S20595C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20595C1D1Ev,_ZThn4_N8S20595C1D1Ev),
  (VTBL_ENTRY)_ZN8S20595C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20595C1 = {  "S20595C1", // class name
  bases_S20595C1, 13,
  &(vtc_S20595C1[0]), // expected_vtbl_contents
  &(vtt_S20595C1[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S20595C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20595C1),54, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20595C1),41, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names183,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21540C3_nt  {
  int s21540c3f0;
  void *s21540c3f1[7];
  short s21540c3f2;
  char s21540c3f3[10];
};
//SIG(-1 S21540C3_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S21540C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21540C7_nt  {
  void *s21540c7f0;
  int s21540c7f1;
  ::S2265C38 s21540c7f2;
  void  mf21540c7(); // _ZN11S21540C7_nt9mf21540c7Ev
};
//SIG(-1 S21540C7_nt) C1{ m Fp Fi FC2{ m}}


void  S21540C7_nt ::mf21540c7(){}

//skip512 S21540C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21540C4_nt  {
  ::S2265C20_nt s21540c4f0;
  ::S21540C7_nt s21540c4f1;
  void  mf21540c4(); // _ZN11S21540C4_nt9mf21540c4Ev
};
//SIG(-1 S21540C4_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}}}


void  S21540C4_nt ::mf21540c4(){}

//skip512 S21540C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21540C2_nt  {
  ::S21540C3_nt s21540c2f0;
  void *s21540c2f1;
  char s21540c2f2[2];
  ::S21540C4_nt s21540c2f3;
  void  mf21540c2(); // _ZN11S21540C2_nt9mf21540c2Ev
  virtual  ~S21540C2_nt(); // _ZN11S21540C2_ntD1Ev
  S21540C2_nt(); // tgen
};
//SIG(-1 S21540C2_nt) C1{ vd m FC2{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC3{ m FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi FC7{ m}}}}


void  S21540C2_nt ::mf21540c2(){}
 S21540C2_nt ::~S21540C2_nt(){ note_dtor("S21540C2_nt", this);}
S21540C2_nt ::S21540C2_nt(){ note_ctor("S21540C2_nt", this);} // tgen

//skip512 S21540C2_nt

#else // __cplusplus

extern void _ZN11S21540C2_ntC1Ev();
extern void _ZN11S21540C2_ntD1Ev();
Name_Map name_map_S21540C2_nt[] = {
  NSPAIR(_ZN11S21540C2_ntC1Ev),
  NSPAIR(_ZN11S21540C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S21540C2_nt[];
extern void _ZN11S21540C2_ntD1Ev();
extern void _ZN11S21540C2_ntD0Ev();
static  VTBL_ENTRY vtc_S21540C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S21540C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S21540C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S21540C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S21540C2_nt[];
VTBL_ENTRY *P__ZTI11S21540C2_nt = _ZTI11S21540C2_nt; 
extern  VTBL_ENTRY _ZTV11S21540C2_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21540C1  {
  ::S21540C2_nt s21540c1f0;
  ::S2265C20_nt s21540c1f1;
  void  mf21540c1(); // _ZN8S21540C19mf21540c1Ev
  virtual  ~S21540C1(); // _ZN8S21540C1D1Ev
  S21540C1(); // tgen
};
//SIG(1 S21540C1) C1{ vd m FC2{ vd m FC3{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC4{ m FC5{ m Fp Fi FC6{ m}} FC7{ m Fp Fi FC8{ m}}}} FC5}


void  S21540C1 ::mf21540c1(){}
 S21540C1 ::~S21540C1(){ note_dtor("S21540C1", this);}
S21540C1 ::S21540C1(){ note_ctor("S21540C1", this);} // tgen

static void Test_S21540C1()
{
  extern Class_Descriptor cd_S21540C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,25)];
    init_test(&cd_S21540C1, buf);
    S21540C1 *dp, &lv = *(dp=new (buf) S21540C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S21540C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21540C1)");
    check_field_offset(lv, s21540c1f0, ABISELECT(8,4), "S21540C1.s21540c1f0");
    check_field_offset(lv, s21540c1f1, ABISELECT(144,84), "S21540C1.s21540c1f1");
    test_class_info(&lv, &cd_S21540C1);
    dp->~S21540C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21540C1(Test_S21540C1, "S21540C1", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN8S21540C1C1Ev();
extern void _ZN8S21540C1D1Ev();
Name_Map name_map_S21540C1[] = {
  NSPAIR(_ZN8S21540C1C1Ev),
  NSPAIR(_ZN8S21540C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21540C1[];
extern void _ZN8S21540C1D1Ev();
extern void _ZN8S21540C1D0Ev();
static  VTBL_ENTRY vtc_S21540C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21540C1[0]),
  (VTBL_ENTRY)&_ZN8S21540C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21540C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21540C1[];
extern  VTBL_ENTRY _ZTV8S21540C1[];
Class_Descriptor cd_S21540C1 = {  "S21540C1", // class name
  0,0,//no base classes
  &(vtc_S21540C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI8S21540C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21540C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11534C2  {
  int s11534c2f0[2];
  char s11534c2f1[80];
  int s11534c2f2[2];
};
//SIG(-1 S11534C2) C1{ Fi[2] Fc[80] Fi[2]}



static void Test_S11534C2()
{
  {
    init_simple_test("S11534C2");
    S11534C2 lv;
    check2(sizeof(lv), 96, "sizeof(S11534C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11534C2)");
    check_field_offset(lv, s11534c2f0, 0, "S11534C2.s11534c2f0");
    check_field_offset(lv, s11534c2f1, 8, "S11534C2.s11534c2f1");
    check_field_offset(lv, s11534c2f2, 88, "S11534C2.s11534c2f2");
  }
}
static Arrange_To_Call_Me vS11534C2(Test_S11534C2, "S11534C2", 96);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11534C3  {
  void *s11534c3f0[2];
  long s11534c3f1;
  void *s11534c3f2[3];
};
//SIG(-1 S11534C3) C1{ Fp[2] Fl Fp[3]}



static void Test_S11534C3()
{
  {
    init_simple_test("S11534C3");
    S11534C3 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S11534C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11534C3)");
    check_field_offset(lv, s11534c3f0, 0, "S11534C3.s11534c3f0");
    check_field_offset(lv, s11534c3f1, ABISELECT(16,8), "S11534C3.s11534c3f1");
    check_field_offset(lv, s11534c3f2, ABISELECT(24,12), "S11534C3.s11534c3f2");
  }
}
static Arrange_To_Call_Me vS11534C3(Test_S11534C3, "S11534C3", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11534C4  {
  void *s11534c4f0[2];
  int s11534c4f1[2];
  char s11534c4f2[64];
  int s11534c4f3;
  void *s11534c4f4;
  int s11534c4f5;
  long s11534c4f6;
  void *s11534c4f7;
  int s11534c4f8[2];
  char s11534c4f9[32];
};
//SIG(-1 S11534C4) C1{ Fp[2] Fi[2] Fc[64] Fi Fp Fi Fl Fp Fi[2] Fc[32]}



static void Test_S11534C4()
{
  {
    init_simple_test("S11534C4");
    S11534C4 lv;
    check2(sizeof(lv), ABISELECT(168,140), "sizeof(S11534C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11534C4)");
    check_field_offset(lv, s11534c4f0, 0, "S11534C4.s11534c4f0");
    check_field_offset(lv, s11534c4f1, ABISELECT(16,8), "S11534C4.s11534c4f1");
    check_field_offset(lv, s11534c4f2, ABISELECT(24,16), "S11534C4.s11534c4f2");
    check_field_offset(lv, s11534c4f3, ABISELECT(88,80), "S11534C4.s11534c4f3");
    check_field_offset(lv, s11534c4f4, ABISELECT(96,84), "S11534C4.s11534c4f4");
    check_field_offset(lv, s11534c4f5, ABISELECT(104,88), "S11534C4.s11534c4f5");
    check_field_offset(lv, s11534c4f6, ABISELECT(112,92), "S11534C4.s11534c4f6");
    check_field_offset(lv, s11534c4f7, ABISELECT(120,96), "S11534C4.s11534c4f7");
    check_field_offset(lv, s11534c4f8, ABISELECT(128,100), "S11534C4.s11534c4f8");
    check_field_offset(lv, s11534c4f9, ABISELECT(136,108), "S11534C4.s11534c4f9");
  }
}
static Arrange_To_Call_Me vS11534C4(Test_S11534C4, "S11534C4", ABISELECT(168,140));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11534C1  {
  ::S11534C2 s11534c1f0;
  ::S11534C3 s11534c1f1;
  ::S11534C4 s11534c1f2;
};
//SIG(1 S11534C1) C1{ FC2{ Fi[2] Fc[80] Fi[2]} FC3{ Fp[2] Fl Fp[3]} FC4{ Fp[2] Fi[2] Fc[64] Fi Fp Fi Fl Fp Fi[2] Fc[32]}}



static void Test_S11534C1()
{
  {
    init_simple_test("S11534C1");
    S11534C1 lv;
    check2(sizeof(lv), ABISELECT(312,260), "sizeof(S11534C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11534C1)");
    check_field_offset(lv, s11534c1f0, 0, "S11534C1.s11534c1f0");
    check_field_offset(lv, s11534c1f1, 96, "S11534C1.s11534c1f1");
    check_field_offset(lv, s11534c1f2, ABISELECT(144,120), "S11534C1.s11534c1f2");
  }
}
static Arrange_To_Call_Me vS11534C1(Test_S11534C1, "S11534C1", ABISELECT(312,260));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2986C3  {
  virtual  ~S2986C3(); // _ZN7S2986C3D1Ev
  virtual void  v1(); // _ZN7S2986C32v1Ev
  virtual void  v2(); // _ZN7S2986C32v2Ev
  virtual void  v3(); // _ZN7S2986C32v3Ev
  virtual void  v4(); // _ZN7S2986C32v4Ev
  virtual void  v5(); // _ZN7S2986C32v5Ev
  S2986C3(); // tgen
};
//SIG(-1 S2986C3) C1{ vd v1 v2 v3 v4 v5}


 S2986C3 ::~S2986C3(){ note_dtor("S2986C3", this);}
void  S2986C3 ::v1(){vfunc_called(this, "_ZN7S2986C32v1Ev");}
void  S2986C3 ::v2(){vfunc_called(this, "_ZN7S2986C32v2Ev");}
void  S2986C3 ::v3(){vfunc_called(this, "_ZN7S2986C32v3Ev");}
void  S2986C3 ::v4(){vfunc_called(this, "_ZN7S2986C32v4Ev");}
void  S2986C3 ::v5(){vfunc_called(this, "_ZN7S2986C32v5Ev");}
S2986C3 ::S2986C3(){ note_ctor("S2986C3", this);} // tgen

static void Test_S2986C3()
{
  extern Class_Descriptor cd_S2986C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2986C3, buf);
    S2986C3 *dp, &lv = *(dp=new (buf) S2986C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2986C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2986C3)");
    test_class_info(&lv, &cd_S2986C3);
    dp->~S2986C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2986C3(Test_S2986C3, "S2986C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2986C3C1Ev();
extern void _ZN7S2986C3D1Ev();
Name_Map name_map_S2986C3[] = {
  NSPAIR(_ZN7S2986C3C1Ev),
  NSPAIR(_ZN7S2986C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2986C3[];
extern void _ZN7S2986C3D1Ev();
extern void _ZN7S2986C3D0Ev();
extern void _ZN7S2986C32v1Ev();
extern void _ZN7S2986C32v2Ev();
extern void _ZN7S2986C32v3Ev();
extern void _ZN7S2986C32v4Ev();
extern void _ZN7S2986C32v5Ev();
static  VTBL_ENTRY vtc_S2986C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2986C3[0]),
  (VTBL_ENTRY)&_ZN7S2986C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2986C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S2986C3[];
extern  VTBL_ENTRY _ZTV7S2986C3[];
Class_Descriptor cd_S2986C3 = {  "S2986C3", // class name
  0,0,//no base classes
  &(vtc_S2986C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2986C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2986C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2986C5_nt  {
  __tsi64 s2986c5f0[4];
};
//SIG(-1 S2986C5_nt) C1{ FL[4]}



//skip512 S2986C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2986C4_nt  {
  ::S2986C5_nt s2986c4f0;
  void  mf2986c4(); // _ZN10S2986C4_nt8mf2986c4Ev
};
//SIG(-1 S2986C4_nt) C1{ m FC2{ FL[4]}}


void  S2986C4_nt ::mf2986c4(){}

//skip512 S2986C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2986C2  : S2986C3 {
  void *s2986c2f0[2];
  int s2986c2f1;
  char s2986c2f2[35];
  ::S2986C4_nt s2986c2f3;
  int s2986c2f4[9];
  void *s2986c2f5[8];
  virtual  ~S2986C2(); // _ZN7S2986C2D1Ev
  virtual void  v6(); // _ZN7S2986C22v6Ev
  virtual void  v7(); // _ZN7S2986C22v7Ev
  virtual void  v8(); // _ZN7S2986C22v8Ev
  virtual void  v9(); // _ZN7S2986C22v9Ev
  virtual void  v10(); // _ZN7S2986C23v10Ev
  S2986C2(); // tgen
};
//SIG(-1 S2986C2) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[2] Fi Fc[35] FC3{ m FC4{ FL[4]}} Fi[9] Fp[8]}


 S2986C2 ::~S2986C2(){ note_dtor("S2986C2", this);}
void  S2986C2 ::v6(){vfunc_called(this, "_ZN7S2986C22v6Ev");}
void  S2986C2 ::v7(){vfunc_called(this, "_ZN7S2986C22v7Ev");}
void  S2986C2 ::v8(){vfunc_called(this, "_ZN7S2986C22v8Ev");}
void  S2986C2 ::v9(){vfunc_called(this, "_ZN7S2986C22v9Ev");}
void  S2986C2 ::v10(){vfunc_called(this, "_ZN7S2986C23v10Ev");}
S2986C2 ::S2986C2(){ note_ctor("S2986C2", this);} // tgen

static void Test_S2986C2()
{
  extern Class_Descriptor cd_S2986C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,39)];
    init_test(&cd_S2986C2, buf);
    S2986C2 *dp, &lv = *(dp=new (buf) S2986C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,152), "sizeof(S2986C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2986C2)");
    check_base_class_offset(lv, (S2986C3*), 0, "S2986C2");
    check_field_offset(lv, s2986c2f0, ABISELECT(8,4), "S2986C2.s2986c2f0");
    check_field_offset(lv, s2986c2f1, ABISELECT(24,12), "S2986C2.s2986c2f1");
    check_field_offset(lv, s2986c2f2, ABISELECT(28,16), "S2986C2.s2986c2f2");
    check_field_offset(lv, s2986c2f3, ABISELECT(64,52), "S2986C2.s2986c2f3");
    check_field_offset(lv, s2986c2f4, ABISELECT(96,84), "S2986C2.s2986c2f4");
    check_field_offset(lv, s2986c2f5, ABISELECT(136,120), "S2986C2.s2986c2f5");
    test_class_info(&lv, &cd_S2986C2);
    dp->~S2986C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2986C2(Test_S2986C2, "S2986C2", ABISELECT(200,152));

#else // __cplusplus

extern void _ZN7S2986C2C1Ev();
extern void _ZN7S2986C2D1Ev();
Name_Map name_map_S2986C2[] = {
  NSPAIR(_ZN7S2986C2C1Ev),
  NSPAIR(_ZN7S2986C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2986C3;
extern VTBL_ENTRY _ZTI7S2986C3[];
extern  VTBL_ENTRY _ZTV7S2986C3[];
static Base_Class bases_S2986C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2986C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2986C2[];
extern void _ZN7S2986C2D1Ev();
extern void _ZN7S2986C2D0Ev();
extern void _ZN7S2986C32v1Ev();
extern void _ZN7S2986C32v2Ev();
extern void _ZN7S2986C32v3Ev();
extern void _ZN7S2986C32v4Ev();
extern void _ZN7S2986C32v5Ev();
extern void _ZN7S2986C22v6Ev();
extern void _ZN7S2986C22v7Ev();
extern void _ZN7S2986C22v8Ev();
extern void _ZN7S2986C22v9Ev();
extern void _ZN7S2986C23v10Ev();
static  VTBL_ENTRY vtc_S2986C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2986C2[0]),
  (VTBL_ENTRY)&_ZN7S2986C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2986C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2986C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2986C2[];
extern  VTBL_ENTRY _ZTV7S2986C2[];
Class_Descriptor cd_S2986C2 = {  "S2986C2", // class name
  bases_S2986C2, 1,
  &(vtc_S2986C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,152), // object size
  NSPAIRA(_ZTI7S2986C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2986C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2986C1  : S2986C2 {
  virtual  ~S2986C1(); // _ZN7S2986C1D1Ev
  S2986C1(); // tgen
};
//SIG(1 S2986C1) C1{ BC2{ BC3{ vd v1 v2 v3 v4 v5} vd v6 v7 v8 v9 v10 Fp[2] Fi Fc[35] FC4{ m FC5{ FL[4]}} Fi[9] Fp[8]} vd}


 S2986C1 ::~S2986C1(){ note_dtor("S2986C1", this);}
S2986C1 ::S2986C1(){ note_ctor("S2986C1", this);} // tgen

static void Test_S2986C1()
{
  extern Class_Descriptor cd_S2986C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,39)];
    init_test(&cd_S2986C1, buf);
    S2986C1 *dp, &lv = *(dp=new (buf) S2986C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,152), "sizeof(S2986C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2986C1)");
    check_base_class_offset(lv, (S2986C3*)(S2986C2*), 0, "S2986C1");
    check_base_class_offset(lv, (S2986C2*), 0, "S2986C1");
    test_class_info(&lv, &cd_S2986C1);
    dp->~S2986C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2986C1(Test_S2986C1, "S2986C1", ABISELECT(200,152));

#else // __cplusplus

extern void _ZN7S2986C1C1Ev();
extern void _ZN7S2986C1D1Ev();
Name_Map name_map_S2986C1[] = {
  NSPAIR(_ZN7S2986C1C1Ev),
  NSPAIR(_ZN7S2986C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2986C3;
extern VTBL_ENTRY _ZTI7S2986C3[];
extern  VTBL_ENTRY _ZTV7S2986C3[];
extern Class_Descriptor cd_S2986C2;
extern VTBL_ENTRY _ZTI7S2986C2[];
extern  VTBL_ENTRY _ZTV7S2986C2[];
static Base_Class bases_S2986C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2986C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2986C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2986C1[];
extern void _ZN7S2986C1D1Ev();
extern void _ZN7S2986C1D0Ev();
extern void _ZN7S2986C32v1Ev();
extern void _ZN7S2986C32v2Ev();
extern void _ZN7S2986C32v3Ev();
extern void _ZN7S2986C32v4Ev();
extern void _ZN7S2986C32v5Ev();
extern void _ZN7S2986C22v6Ev();
extern void _ZN7S2986C22v7Ev();
extern void _ZN7S2986C22v8Ev();
extern void _ZN7S2986C22v9Ev();
extern void _ZN7S2986C23v10Ev();
static  VTBL_ENTRY vtc_S2986C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2986C1[0]),
  (VTBL_ENTRY)&_ZN7S2986C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2986C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v1Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v2Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v3Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v4Ev,
  (VTBL_ENTRY)&_ZN7S2986C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v6Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2986C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2986C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S2986C1[];
extern  VTBL_ENTRY _ZTV7S2986C1[];
Class_Descriptor cd_S2986C1 = {  "S2986C1", // class name
  bases_S2986C1, 2,
  &(vtc_S2986C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,152), // object size
  NSPAIRA(_ZTI7S2986C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2986C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2824C2  : S2265C38 , S2265C28 {
  virtual  ~S2824C2(); // _ZN7S2824C2D1Ev
  S2824C2(); // tgen
};
//SIG(-1 S2824C2) C1{ BC2{ m} BC3{ m} vd}


 S2824C2 ::~S2824C2(){ note_dtor("S2824C2", this);}
S2824C2 ::S2824C2(){ note_ctor("S2824C2", this);} // tgen

static void Test_S2824C2()
{
  extern Class_Descriptor cd_S2824C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2824C2, buf);
    S2824C2 *dp, &lv = *(dp=new (buf) S2824C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2824C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2824C2)");
    check_base_class_offset(lv, (S2265C38*), 0, "S2824C2");
    check_base_class_offset(lv, (S2265C28*), 0, "S2824C2");
    test_class_info(&lv, &cd_S2824C2);
    dp->~S2824C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2824C2(Test_S2824C2, "S2824C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2824C2C1Ev();
extern void _ZN7S2824C2D1Ev();
Name_Map name_map_S2824C2[] = {
  NSPAIR(_ZN7S2824C2C1Ev),
  NSPAIR(_ZN7S2824C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S2824C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2824C2[];
extern void _ZN7S2824C2D1Ev();
extern void _ZN7S2824C2D0Ev();
static  VTBL_ENTRY vtc_S2824C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2824C2[0]),
  (VTBL_ENTRY)&_ZN7S2824C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2824C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S2824C2[];
extern  VTBL_ENTRY _ZTV7S2824C2[];
Class_Descriptor cd_S2824C2 = {  "S2824C2", // class name
  bases_S2824C2, 2,
  &(vtc_S2824C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2824C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2824C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2824C6  : S5217C45 {
  ::S5217C44 s2824c6f0;
};
//SIG(-1 S2824C6) C1{ BC2{} FC3{ BC2}}



static void Test_S2824C6()
{
  extern Class_Descriptor cd_S2824C6;
  void *lvp;
  {
    char buf[2];
    init_test(&cd_S2824C6, buf);
    S2824C6 &lv = *(new (buf) S2824C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S2824C6)");
    check2(__alignof__(lv), 1, "__alignof__(S2824C6)");
    check_base_class_offset(lv, (S5217C45*), 0, "S2824C6");
    check_field_offset(lv, s2824c6f0, 1, "S2824C6.s2824c6f0");
    test_class_info(&lv, &cd_S2824C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2824C6(Test_S2824C6, "S2824C6", 2);

#else // __cplusplus

extern Class_Descriptor cd_S5217C45;
extern VTBL_ENTRY _ZTI8S5217C45[];
static Base_Class bases_S2824C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C45,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2824C6 = {  "S2824C6", // class name
  bases_S2824C6, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2824C5_nt  : S2824C6 {
  void *s2824c5f0[3];
};
//SIG(-1 S2824C5_nt) C1{ BC2{ BC3{} FC4{ BC3}} Fp[3]}



//skip512 S2824C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C45;
extern VTBL_ENTRY _ZTI8S5217C45[];
extern Class_Descriptor cd_S2824C6;
static Base_Class bases_S2824C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C45,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2824C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2824C1  : S2824C2 {
  int s2824c1f0[2];
  ::S2824C5_nt s2824c1f1;
  ::S2824C5_nt s2824c1f2;
  virtual  ~S2824C1(); // _ZN7S2824C1D1Ev
  S2824C1(); // tgen
};
//SIG(1 S2824C1) C1{ BC2{ BC3{ m} BC4{ m} vd} vd Fi[2] FC5{ BC6{ BC7{} FC8{ BC7}} Fp[3]} FC5}


 S2824C1 ::~S2824C1(){ note_dtor("S2824C1", this);}
S2824C1 ::S2824C1(){ note_ctor("S2824C1", this);} // tgen

static void Test_S2824C1()
{
  extern Class_Descriptor cd_S2824C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S2824C1, buf);
    S2824C1 *dp, &lv = *(dp=new (buf) S2824C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S2824C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2824C1)");
    check_base_class_offset(lv, (S2265C38*)(S2824C2*), 0, "S2824C1");
    check_base_class_offset(lv, (S2265C28*)(S2824C2*), 0, "S2824C1");
    check_base_class_offset(lv, (S2824C2*), 0, "S2824C1");
    check_field_offset(lv, s2824c1f0, ABISELECT(8,4), "S2824C1.s2824c1f0");
    check_field_offset(lv, s2824c1f1, ABISELECT(16,12), "S2824C1.s2824c1f1");
    check_field_offset(lv, s2824c1f2, ABISELECT(48,28), "S2824C1.s2824c1f2");
    test_class_info(&lv, &cd_S2824C1);
    dp->~S2824C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2824C1(Test_S2824C1, "S2824C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S2824C1C1Ev();
extern void _ZN7S2824C1D1Ev();
Name_Map name_map_S2824C1[] = {
  NSPAIR(_ZN7S2824C1C1Ev),
  NSPAIR(_ZN7S2824C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S2824C2;
extern VTBL_ENTRY _ZTI7S2824C2[];
extern  VTBL_ENTRY _ZTV7S2824C2[];
static Base_Class bases_S2824C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2824C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2824C1[];
extern void _ZN7S2824C1D1Ev();
extern void _ZN7S2824C1D0Ev();
static  VTBL_ENTRY vtc_S2824C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2824C1[0]),
  (VTBL_ENTRY)&_ZN7S2824C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2824C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S2824C1[];
extern  VTBL_ENTRY _ZTV7S2824C1[];
Class_Descriptor cd_S2824C1 = {  "S2824C1", // class name
  bases_S2824C1, 3,
  &(vtc_S2824C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S2824C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2824C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12302C1  {
  int s12302c1f0;
  char s12302c1f1[4];
  __tsi64 s12302c1f2;
  int s12302c1f3[2];
  void *s12302c1f4;
  int s12302c1f5;
  void *s12302c1f6;
  int s12302c1f7;
  void *s12302c1f8;
  int s12302c1f9;
  void *s12302c1f10;
  int s12302c1f11;
  void *s12302c1f12[2];
  int s12302c1f13;
  void *s12302c1f14[2];
  int s12302c1f15;
  void *s12302c1f16;
  int s12302c1f17;
  void *s12302c1f18[2];
  int s12302c1f19;
  char s12302c1f20[4];
  void *s12302c1f21;
  char s12302c1f22[4];
};
//SIG(1 S12302C1) C1{ Fi Fc[4] FL Fi[2] Fp Fi Fp Fi Fp Fi Fp Fi Fp[2] Fi Fp[2] Fi Fp Fi Fp[2] Fi Fc[4] Fp Fc[4]}



static void Test_S12302C1()
{
  {
    init_simple_test("S12302C1");
    S12302C1 lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S12302C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12302C1)");
    check_field_offset(lv, s12302c1f0, 0, "S12302C1.s12302c1f0");
    check_field_offset(lv, s12302c1f1, 4, "S12302C1.s12302c1f1");
    check_field_offset(lv, s12302c1f2, 8, "S12302C1.s12302c1f2");
    check_field_offset(lv, s12302c1f3, 16, "S12302C1.s12302c1f3");
    check_field_offset(lv, s12302c1f4, 24, "S12302C1.s12302c1f4");
    check_field_offset(lv, s12302c1f5, ABISELECT(32,28), "S12302C1.s12302c1f5");
    check_field_offset(lv, s12302c1f6, ABISELECT(40,32), "S12302C1.s12302c1f6");
    check_field_offset(lv, s12302c1f7, ABISELECT(48,36), "S12302C1.s12302c1f7");
    check_field_offset(lv, s12302c1f8, ABISELECT(56,40), "S12302C1.s12302c1f8");
    check_field_offset(lv, s12302c1f9, ABISELECT(64,44), "S12302C1.s12302c1f9");
    check_field_offset(lv, s12302c1f10, ABISELECT(72,48), "S12302C1.s12302c1f10");
    check_field_offset(lv, s12302c1f11, ABISELECT(80,52), "S12302C1.s12302c1f11");
    check_field_offset(lv, s12302c1f12, ABISELECT(88,56), "S12302C1.s12302c1f12");
    check_field_offset(lv, s12302c1f13, ABISELECT(104,64), "S12302C1.s12302c1f13");
    check_field_offset(lv, s12302c1f14, ABISELECT(112,68), "S12302C1.s12302c1f14");
    check_field_offset(lv, s12302c1f15, ABISELECT(128,76), "S12302C1.s12302c1f15");
    check_field_offset(lv, s12302c1f16, ABISELECT(136,80), "S12302C1.s12302c1f16");
    check_field_offset(lv, s12302c1f17, ABISELECT(144,84), "S12302C1.s12302c1f17");
    check_field_offset(lv, s12302c1f18, ABISELECT(152,88), "S12302C1.s12302c1f18");
    check_field_offset(lv, s12302c1f19, ABISELECT(168,96), "S12302C1.s12302c1f19");
    check_field_offset(lv, s12302c1f20, ABISELECT(172,100), "S12302C1.s12302c1f20");
    check_field_offset(lv, s12302c1f21, ABISELECT(176,104), "S12302C1.s12302c1f21");
    check_field_offset(lv, s12302c1f22, ABISELECT(184,108), "S12302C1.s12302c1f22");
  }
}
static Arrange_To_Call_Me vS12302C1(Test_S12302C1, "S12302C1", ABISELECT(192,112));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9696C2_nt  {
  ::S21540C7_nt s9696c2f0;
  int s9696c2f1[2];
  char s9696c2f2;
  virtual  ~S9696C2_nt(); // _ZN10S9696C2_ntD1Ev
  virtual void  v4(); // _ZN10S9696C2_nt2v4Ev
  virtual void  v5(); // _ZN10S9696C2_nt2v5Ev
  virtual void  v6(); // _ZN10S9696C2_nt2v6Ev
  S9696C2_nt(); // tgen
};
//SIG(-1 S9696C2_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9696C2_nt ::~S9696C2_nt(){ note_dtor("S9696C2_nt", this);}
void  S9696C2_nt ::v4(){vfunc_called(this, "_ZN10S9696C2_nt2v4Ev");}
void  S9696C2_nt ::v5(){vfunc_called(this, "_ZN10S9696C2_nt2v5Ev");}
void  S9696C2_nt ::v6(){vfunc_called(this, "_ZN10S9696C2_nt2v6Ev");}
S9696C2_nt ::S9696C2_nt(){ note_ctor("S9696C2_nt", this);} // tgen

//skip512 S9696C2_nt

#else // __cplusplus

extern void _ZN10S9696C2_ntC1Ev();
extern void _ZN10S9696C2_ntD1Ev();
Name_Map name_map_S9696C2_nt[] = {
  NSPAIR(_ZN10S9696C2_ntC1Ev),
  NSPAIR(_ZN10S9696C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9696C2_nt[];
extern void _ZN10S9696C2_ntD1Ev();
extern void _ZN10S9696C2_ntD0Ev();
extern void _ZN10S9696C2_nt2v4Ev();
extern void _ZN10S9696C2_nt2v5Ev();
extern void _ZN10S9696C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S9696C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9696C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9696C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S9696C2_nt[];
VTBL_ENTRY *P__ZTI10S9696C2_nt = _ZTI10S9696C2_nt; 
extern  VTBL_ENTRY _ZTV10S9696C2_nt[];
Class_Descriptor cd_S9696C2_nt = {  "S9696C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9696C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S9696C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9696C2_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9696C5_nt  {
  void *s9696c5f0[2];
  void  mf9696c5(); // _ZN10S9696C5_nt8mf9696c5Ev
};
//SIG(-1 S9696C5_nt) C1{ m Fp[2]}


void  S9696C5_nt ::mf9696c5(){}

//skip512 S9696C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9696C6_nt  {
  char s9696c6f0[16];
};
//SIG(-1 S9696C6_nt) C1{ Fc[16]}



//skip512 S9696C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9696C1  : S9696C2_nt {
  void *s9696c1f0;
  ::S9696C5_nt s9696c1f1;
  ::S9696C6_nt s9696c1f2;
  void *s9696c1f3[2];
  virtual  ~S9696C1(); // _ZN7S9696C1D1Ev
  virtual void  v1(); // _ZN7S9696C12v1Ev
  virtual void  v2(); // _ZN7S9696C12v2Ev
  virtual void  v3(); // _ZN7S9696C12v3Ev
  S9696C1(); // tgen
};
//SIG(1 S9696C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp FC5{ m Fp[2]} FC6{ Fc[16]} Fp[2]}


 S9696C1 ::~S9696C1(){ note_dtor("S9696C1", this);}
void  S9696C1 ::v1(){vfunc_called(this, "_ZN7S9696C12v1Ev");}
void  S9696C1 ::v2(){vfunc_called(this, "_ZN7S9696C12v2Ev");}
void  S9696C1 ::v3(){vfunc_called(this, "_ZN7S9696C12v3Ev");}
S9696C1 ::S9696C1(){ note_ctor("S9696C1", this);} // tgen

static void Test_S9696C1()
{
  extern Class_Descriptor cd_S9696C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,17)];
    init_test(&cd_S9696C1, buf);
    S9696C1 *dp, &lv = *(dp=new (buf) S9696C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S9696C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9696C1)");
    check_base_class_offset(lv, (S9696C2_nt*), 0, "S9696C1");
    check_field_offset(lv, s9696c1f0, ABISELECT(40,28), "S9696C1.s9696c1f0");
    check_field_offset(lv, s9696c1f1, ABISELECT(48,32), "S9696C1.s9696c1f1");
    check_field_offset(lv, s9696c1f2, ABISELECT(64,40), "S9696C1.s9696c1f2");
    check_field_offset(lv, s9696c1f3, ABISELECT(80,56), "S9696C1.s9696c1f3");
    test_class_info(&lv, &cd_S9696C1);
    dp->~S9696C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9696C1(Test_S9696C1, "S9696C1", ABISELECT(96,64));

#else // __cplusplus

extern void _ZN7S9696C1C1Ev();
extern void _ZN7S9696C1D1Ev();
Name_Map name_map_S9696C1[] = {
  NSPAIR(_ZN7S9696C1C1Ev),
  NSPAIR(_ZN7S9696C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9696C2_nt;
extern VTBL_ENTRY _ZTI10S9696C2_nt[];
extern  VTBL_ENTRY _ZTV10S9696C2_nt[];
static Base_Class bases_S9696C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9696C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9696C1[];
extern void _ZN7S9696C1D1Ev();
extern void _ZN7S9696C1D0Ev();
extern void _ZN10S9696C2_nt2v4Ev();
extern void _ZN10S9696C2_nt2v5Ev();
extern void _ZN10S9696C2_nt2v6Ev();
extern void _ZN7S9696C12v1Ev();
extern void _ZN7S9696C12v2Ev();
extern void _ZN7S9696C12v3Ev();
static  VTBL_ENTRY vtc_S9696C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9696C1[0]),
  (VTBL_ENTRY)&_ZN7S9696C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9696C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S9696C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S9696C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9696C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9696C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9696C1[];
extern  VTBL_ENTRY _ZTV7S9696C1[];
Class_Descriptor cd_S9696C1 = {  "S9696C1", // class name
  bases_S9696C1, 1,
  &(vtc_S9696C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,64), // object size
  NSPAIRA(_ZTI7S9696C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9696C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16272C1  {
  ::S21540C7_nt s16272c1f0;
  int s16272c1f1[2];
  ::S21540C7_nt s16272c1f2;
  ::S2265C19_nt s16272c1f3;
  ::S21540C7_nt s16272c1f4;
  int s16272c1f5;
  ::S2265C20_nt s16272c1f6;
  ::S21540C7_nt s16272c1f7;
  ::S2265C19_nt s16272c1f8;
  void *s16272c1f9[2];
  int s16272c1f10;
  void  mf16272c1(); // _ZN8S16272C19mf16272c1Ev
};
//SIG(1 S16272C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fi[2] FC2 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC2 Fi FC5 FC2 FC4 Fp[2] Fi}


void  S16272C1 ::mf16272c1(){}

static void Test_S16272C1()
{
  {
    init_simple_test("S16272C1");
    S16272C1 lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S16272C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16272C1)");
    check_field_offset(lv, s16272c1f0, 0, "S16272C1.s16272c1f0");
    check_field_offset(lv, s16272c1f1, ABISELECT(16,12), "S16272C1.s16272c1f1");
    check_field_offset(lv, s16272c1f2, ABISELECT(24,20), "S16272C1.s16272c1f2");
    check_field_offset(lv, s16272c1f3, ABISELECT(40,32), "S16272C1.s16272c1f3");
    check_field_offset(lv, s16272c1f4, ABISELECT(64,48), "S16272C1.s16272c1f4");
    check_field_offset(lv, s16272c1f5, ABISELECT(80,60), "S16272C1.s16272c1f5");
    check_field_offset(lv, s16272c1f6, ABISELECT(88,64), "S16272C1.s16272c1f6");
    check_field_offset(lv, s16272c1f7, ABISELECT(104,76), "S16272C1.s16272c1f7");
    check_field_offset(lv, s16272c1f8, ABISELECT(120,88), "S16272C1.s16272c1f8");
    check_field_offset(lv, s16272c1f9, ABISELECT(144,104), "S16272C1.s16272c1f9");
    check_field_offset(lv, s16272c1f10, ABISELECT(160,112), "S16272C1.s16272c1f10");
  }
}
static Arrange_To_Call_Me vS16272C1(Test_S16272C1, "S16272C1", ABISELECT(168,116));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8376C4_nt  {
  __tsi64 s8376c4f0;
  char s8376c4f1;
  void  mf8376c4(); // _ZN10S8376C4_nt8mf8376c4Ev
  virtual  ~S8376C4_nt(); // _ZN10S8376C4_ntD1Ev
  S8376C4_nt(); // tgen
};
//SIG(-1 S8376C4_nt) C1{ vd m FL Fc}


void  S8376C4_nt ::mf8376c4(){}
 S8376C4_nt ::~S8376C4_nt(){ note_dtor("S8376C4_nt", this);}
S8376C4_nt ::S8376C4_nt(){ note_ctor("S8376C4_nt", this);} // tgen

//skip512 S8376C4_nt

#else // __cplusplus

extern void _ZN10S8376C4_ntC1Ev();
extern void _ZN10S8376C4_ntD1Ev();
Name_Map name_map_S8376C4_nt[] = {
  NSPAIR(_ZN10S8376C4_ntC1Ev),
  NSPAIR(_ZN10S8376C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8376C4_nt[];
extern void _ZN10S8376C4_ntD1Ev();
extern void _ZN10S8376C4_ntD0Ev();
static  VTBL_ENTRY vtc_S8376C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8376C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S8376C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8376C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8376C4_nt[];
VTBL_ENTRY *P__ZTI10S8376C4_nt = _ZTI10S8376C4_nt; 
extern  VTBL_ENTRY _ZTV10S8376C4_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8376C3_nt  {
  ::S8376C4_nt s8376c3f0;
  ::S8376C4_nt s8376c3f1;
  void  mf8376c3(); // _ZN10S8376C3_nt8mf8376c3Ev
};
//SIG(-1 S8376C3_nt) C1{ m FC2{ vd m FL Fc} FC2}


void  S8376C3_nt ::mf8376c3(){}

//skip512 S8376C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8376C5  : S1933C4_nt {
  ::S8376C3_nt s8376c5f0;
  ::S8376C3_nt s8376c5f1;
  virtual  ~S8376C5(); // _ZN7S8376C5D1Ev
  S8376C5(); // tgen
};
//SIG(-1 S8376C5) C1{ BC2{ vd m} vd FC3{ m FC4{ vd m FL Fc} FC4} FC3}


 S8376C5 ::~S8376C5(){ note_dtor("S8376C5", this);}
S8376C5 ::S8376C5(){ note_ctor("S8376C5", this);} // tgen

static void Test_S8376C5()
{
  extern Class_Descriptor cd_S8376C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S8376C5, buf);
    S8376C5 *dp, &lv = *(dp=new (buf) S8376C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S8376C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8376C5)");
    check_base_class_offset(lv, (S1933C4_nt*), 0, "S8376C5");
    check_field_offset(lv, s8376c5f0, ABISELECT(8,4), "S8376C5.s8376c5f0");
    check_field_offset(lv, s8376c5f1, ABISELECT(56,36), "S8376C5.s8376c5f1");
    test_class_info(&lv, &cd_S8376C5);
    dp->~S8376C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8376C5(Test_S8376C5, "S8376C5", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S8376C5C1Ev();
extern void _ZN7S8376C5D1Ev();
Name_Map name_map_S8376C5[] = {
  NSPAIR(_ZN7S8376C5C1Ev),
  NSPAIR(_ZN7S8376C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S8376C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8376C5[];
extern void _ZN7S8376C5D1Ev();
extern void _ZN7S8376C5D0Ev();
static  VTBL_ENTRY vtc_S8376C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8376C5[0]),
  (VTBL_ENTRY)&_ZN7S8376C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8376C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S8376C5[];
extern  VTBL_ENTRY _ZTV7S8376C5[];
Class_Descriptor cd_S8376C5 = {  "S8376C5", // class name
  bases_S8376C5, 1,
  &(vtc_S8376C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S8376C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8376C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8376C6_nt  : S1933C4_nt {
  void *s8376c6f0;
  int s8376c6f1[2];
  virtual  ~S8376C6_nt(); // _ZN10S8376C6_ntD1Ev
  S8376C6_nt(); // tgen
};
//SIG(-1 S8376C6_nt) C1{ BC2{ vd m} vd Fp Fi[2]}


 S8376C6_nt ::~S8376C6_nt(){ note_dtor("S8376C6_nt", this);}
S8376C6_nt ::S8376C6_nt(){ note_ctor("S8376C6_nt", this);} // tgen

//skip512 S8376C6_nt

#else // __cplusplus

extern void _ZN10S8376C6_ntC1Ev();
extern void _ZN10S8376C6_ntD1Ev();
Name_Map name_map_S8376C6_nt[] = {
  NSPAIR(_ZN10S8376C6_ntC1Ev),
  NSPAIR(_ZN10S8376C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S8376C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S8376C6_nt[];
extern void _ZN10S8376C6_ntD1Ev();
extern void _ZN10S8376C6_ntD0Ev();
static  VTBL_ENTRY vtc_S8376C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8376C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S8376C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8376C6_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8376C6_nt[];
VTBL_ENTRY *P__ZTI10S8376C6_nt = _ZTI10S8376C6_nt; 
extern  VTBL_ENTRY _ZTV10S8376C6_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8376C1  : S1933C4_nt {
  void *s8376c1f0[3];
  ::S8376C3_nt s8376c1f1;
  ::S8376C5 s8376c1f2;
  ::S8376C6_nt s8376c1f3;
  void *s8376c1f4;
  virtual  ~S8376C1(); // _ZN7S8376C1D1Ev
  S8376C1(); // tgen
};
//SIG(1 S8376C1) C1{ BC2{ vd m} vd Fp[3] FC3{ m FC4{ vd m FL Fc} FC4} FC5{ BC2 vd FC3 FC3} FC6{ BC2 vd Fp Fi[2]} Fp}


 S8376C1 ::~S8376C1(){ note_dtor("S8376C1", this);}
S8376C1 ::S8376C1(){ note_ctor("S8376C1", this);} // tgen

static void Test_S8376C1()
{
  extern Class_Descriptor cd_S8376C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,35)];
    init_test(&cd_S8376C1, buf);
    S8376C1 *dp, &lv = *(dp=new (buf) S8376C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,136), "sizeof(S8376C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8376C1)");
    check_base_class_offset(lv, (S1933C4_nt*), 0, "S8376C1");
    check_field_offset(lv, s8376c1f0, ABISELECT(8,4), "S8376C1.s8376c1f0");
    check_field_offset(lv, s8376c1f1, ABISELECT(32,16), "S8376C1.s8376c1f1");
    check_field_offset(lv, s8376c1f2, ABISELECT(80,48), "S8376C1.s8376c1f2");
    check_field_offset(lv, s8376c1f3, ABISELECT(184,116), "S8376C1.s8376c1f3");
    check_field_offset(lv, s8376c1f4, ABISELECT(208,132), "S8376C1.s8376c1f4");
    test_class_info(&lv, &cd_S8376C1);
    dp->~S8376C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8376C1(Test_S8376C1, "S8376C1", ABISELECT(216,136));

#else // __cplusplus

extern void _ZN7S8376C1C1Ev();
extern void _ZN7S8376C1D1Ev();
Name_Map name_map_S8376C1[] = {
  NSPAIR(_ZN7S8376C1C1Ev),
  NSPAIR(_ZN7S8376C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S8376C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8376C1[];
extern void _ZN7S8376C1D1Ev();
extern void _ZN7S8376C1D0Ev();
static  VTBL_ENTRY vtc_S8376C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8376C1[0]),
  (VTBL_ENTRY)&_ZN7S8376C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8376C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8376C1[];
extern  VTBL_ENTRY _ZTV7S8376C1[];
Class_Descriptor cd_S8376C1 = {  "S8376C1", // class name
  bases_S8376C1, 1,
  &(vtc_S8376C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,136), // object size
  NSPAIRA(_ZTI7S8376C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8376C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15099C4_nt  {
  int s15099c4f0[4];
  __tsi64 s15099c4f1[3];
  char s15099c4f2[76];
};
//SIG(-1 S15099C4_nt) C1{ Fi[4] FL[3] Fc[76]}



//skip512 S15099C4_nt

#else // __cplusplus

Class_Descriptor cd_S15099C4_nt = {  "S15099C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(120,116), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15099C1  {
  char s15099c1f0;
  int s15099c1f1[2];
  __tsi64 s15099c1f2;
  ::S21540C7_nt s15099c1f3;
  ::S21540C7_nt s15099c1f4;
  ::S21540C7_nt s15099c1f5;
  ::S21540C7_nt s15099c1f6;
  __tsi64 s15099c1f7[5];
  int s15099c1f8;
  ::S15099C4_nt s15099c1f9;
  char s15099c1f10[16];
  void  mf15099c1(); // _ZN8S15099C19mf15099c1Ev
};
//SIG(1 S15099C1) C1{ m Fc Fi[2] FL FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FL[5] Fi FC4{ Fi[4] FL[3] Fc[76]} Fc[16]}


void  S15099C1 ::mf15099c1(){}

static void Test_S15099C1()
{
  {
    init_simple_test("S15099C1");
    S15099C1 lv;
    check2(sizeof(lv), ABISELECT(272,244), "sizeof(S15099C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15099C1)");
    check_field_offset(lv, s15099c1f0, 0, "S15099C1.s15099c1f0");
    check_field_offset(lv, s15099c1f1, 4, "S15099C1.s15099c1f1");
    check_field_offset(lv, s15099c1f2, ABISELECT(16,12), "S15099C1.s15099c1f2");
    check_field_offset(lv, s15099c1f3, ABISELECT(24,20), "S15099C1.s15099c1f3");
    check_field_offset(lv, s15099c1f4, ABISELECT(40,32), "S15099C1.s15099c1f4");
    check_field_offset(lv, s15099c1f5, ABISELECT(56,44), "S15099C1.s15099c1f5");
    check_field_offset(lv, s15099c1f6, ABISELECT(72,56), "S15099C1.s15099c1f6");
    check_field_offset(lv, s15099c1f7, ABISELECT(88,68), "S15099C1.s15099c1f7");
    check_field_offset(lv, s15099c1f8, ABISELECT(128,108), "S15099C1.s15099c1f8");
    check_field_offset(lv, s15099c1f9, ABISELECT(136,112), "S15099C1.s15099c1f9");
    check_field_offset(lv, s15099c1f10, ABISELECT(256,228), "S15099C1.s15099c1f10");
  }
}
static Arrange_To_Call_Me vS15099C1(Test_S15099C1, "S15099C1", ABISELECT(272,244));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15415C1  {
  ::S2265C25 s15415c1f0;
  ::S2986C4_nt s15415c1f1;
  ::S2265C5_nt s15415c1f2;
  void  mf15415c1(); // _ZN8S15415C19mf15415c1Ev
};
//SIG(1 S15415C1) C1{ m FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ m FC7{ FL[4]}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}}}


void  S15415C1 ::mf15415c1(){}

static void Test_S15415C1()
{
  {
    init_simple_test("S15415C1");
    S15415C1 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S15415C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15415C1)");
    check_field_offset(lv, s15415c1f0, 0, "S15415C1.s15415c1f0");
    check_field_offset(lv, s15415c1f1, ABISELECT(16,12), "S15415C1.s15415c1f1");
    check_field_offset(lv, s15415c1f2, ABISELECT(48,44), "S15415C1.s15415c1f2");
  }
}
static Arrange_To_Call_Me vS15415C1(Test_S15415C1, "S15415C1", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3199C3_nt  {
  virtual  ~S3199C3_nt(); // _ZN10S3199C3_ntD1Ev
  virtual void  v4(); // _ZN10S3199C3_nt2v4Ev
  virtual void  v5(); // _ZN10S3199C3_nt2v5Ev
  virtual void  v6(); // _ZN10S3199C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3199C3_nt2v7Ev
  S3199C3_nt(); // tgen
};
//SIG(-1 S3199C3_nt) C1{ vd v1 v2 v3 v4}


 S3199C3_nt ::~S3199C3_nt(){ note_dtor("S3199C3_nt", this);}
void  S3199C3_nt ::v4(){vfunc_called(this, "_ZN10S3199C3_nt2v4Ev");}
void  S3199C3_nt ::v5(){vfunc_called(this, "_ZN10S3199C3_nt2v5Ev");}
void  S3199C3_nt ::v6(){vfunc_called(this, "_ZN10S3199C3_nt2v6Ev");}
void  S3199C3_nt ::v7(){vfunc_called(this, "_ZN10S3199C3_nt2v7Ev");}
S3199C3_nt ::S3199C3_nt(){ note_ctor("S3199C3_nt", this);} // tgen

//skip512 S3199C3_nt

#else // __cplusplus

extern void _ZN10S3199C3_ntC1Ev();
extern void _ZN10S3199C3_ntD1Ev();
Name_Map name_map_S3199C3_nt[] = {
  NSPAIR(_ZN10S3199C3_ntC1Ev),
  NSPAIR(_ZN10S3199C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3199C3_nt[];
extern void _ZN10S3199C3_ntD1Ev();
extern void _ZN10S3199C3_ntD0Ev();
extern void _ZN10S3199C3_nt2v4Ev();
extern void _ZN10S3199C3_nt2v5Ev();
extern void _ZN10S3199C3_nt2v6Ev();
extern void _ZN10S3199C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S3199C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3199C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3199C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S3199C3_nt[];
VTBL_ENTRY *P__ZTI10S3199C3_nt = _ZTI10S3199C3_nt; 
extern  VTBL_ENTRY _ZTV10S3199C3_nt[];
Class_Descriptor cd_S3199C3_nt = {  "S3199C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3199C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3199C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3199C3_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3199C4  {
  __tsi64 s3199c4f0;
  int s3199c4f1[3];
  virtual  ~S3199C4(); // _ZN7S3199C4D1Ev
  virtual void  v8(); // _ZN7S3199C42v8Ev
  virtual void  v9(); // _ZN7S3199C42v9Ev
  S3199C4(); // tgen
};
//SIG(-1 S3199C4) C1{ vd v1 v2 FL Fi[3]}


 S3199C4 ::~S3199C4(){ note_dtor("S3199C4", this);}
void  S3199C4 ::v8(){vfunc_called(this, "_ZN7S3199C42v8Ev");}
void  S3199C4 ::v9(){vfunc_called(this, "_ZN7S3199C42v9Ev");}
S3199C4 ::S3199C4(){ note_ctor("S3199C4", this);} // tgen

static void Test_S3199C4()
{
  extern Class_Descriptor cd_S3199C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S3199C4, buf);
    S3199C4 *dp, &lv = *(dp=new (buf) S3199C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S3199C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3199C4)");
    check_field_offset(lv, s3199c4f0, ABISELECT(8,4), "S3199C4.s3199c4f0");
    check_field_offset(lv, s3199c4f1, ABISELECT(16,12), "S3199C4.s3199c4f1");
    test_class_info(&lv, &cd_S3199C4);
    dp->~S3199C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3199C4(Test_S3199C4, "S3199C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S3199C4C1Ev();
extern void _ZN7S3199C4D1Ev();
Name_Map name_map_S3199C4[] = {
  NSPAIR(_ZN7S3199C4C1Ev),
  NSPAIR(_ZN7S3199C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3199C4[];
extern void _ZN7S3199C4D1Ev();
extern void _ZN7S3199C4D0Ev();
extern void _ZN7S3199C42v8Ev();
extern void _ZN7S3199C42v9Ev();
static  VTBL_ENTRY vtc_S3199C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3199C4[0]),
  (VTBL_ENTRY)&_ZN7S3199C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3199C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3199C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3199C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S3199C4[];
extern  VTBL_ENTRY _ZTV7S3199C4[];
Class_Descriptor cd_S3199C4 = {  "S3199C4", // class name
  0,0,//no base classes
  &(vtc_S3199C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S3199C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3199C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3199C2  : S3199C3_nt , S3199C4 {
  int s3199c2f0[2];
  virtual void  v10(); // _ZN7S3199C23v10Ev
  virtual void  v11(); // _ZN7S3199C23v11Ev
  virtual void  v12(); // _ZN7S3199C23v12Ev
  virtual void  v13(); // _ZN7S3199C23v13Ev
  virtual void  v14(); // _ZN7S3199C23v14Ev
  ~S3199C2(); // tgen
  S3199C2(); // tgen
};
//SIG(-1 S3199C2) C1{ BC2{ vd v6 v7 v8 v9} BC3{ vd v10 v11 FL Fi[3]} v1 v2 v3 v4 v5 Fi[2]}


void  S3199C2 ::v10(){vfunc_called(this, "_ZN7S3199C23v10Ev");}
void  S3199C2 ::v11(){vfunc_called(this, "_ZN7S3199C23v11Ev");}
void  S3199C2 ::v12(){vfunc_called(this, "_ZN7S3199C23v12Ev");}
void  S3199C2 ::v13(){vfunc_called(this, "_ZN7S3199C23v13Ev");}
void  S3199C2 ::v14(){vfunc_called(this, "_ZN7S3199C23v14Ev");}
S3199C2 ::~S3199C2(){ note_dtor("S3199C2", this);} // tgen
S3199C2 ::S3199C2(){ note_ctor("S3199C2", this);} // tgen

static void Test_S3199C2()
{
  extern Class_Descriptor cd_S3199C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S3199C2, buf);
    S3199C2 *dp, &lv = *(dp=new (buf) S3199C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S3199C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3199C2)");
    check_base_class_offset(lv, (S3199C3_nt*), 0, "S3199C2");
    check_base_class_offset(lv, (S3199C4*), ABISELECT(8,4), "S3199C2");
    check_field_offset(lv, s3199c2f0, ABISELECT(36,28), "S3199C2.s3199c2f0");
    test_class_info(&lv, &cd_S3199C2);
    dp->~S3199C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3199C2(Test_S3199C2, "S3199C2", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S3199C2C1Ev();
extern void _ZN7S3199C2D1Ev();
Name_Map name_map_S3199C2[] = {
  NSPAIR(_ZN7S3199C2C1Ev),
  NSPAIR(_ZN7S3199C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3199C3_nt;
extern VTBL_ENTRY _ZTI10S3199C3_nt[];
extern  VTBL_ENTRY _ZTV10S3199C3_nt[];
extern Class_Descriptor cd_S3199C4;
extern VTBL_ENTRY _ZTI7S3199C4[];
extern  VTBL_ENTRY _ZTV7S3199C4[];
static Base_Class bases_S3199C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3199C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3199C4,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3199C2[];
extern void _ZN7S3199C2D1Ev();
extern void _ZN7S3199C2D0Ev();
extern void _ZN10S3199C3_nt2v4Ev();
extern void _ZN10S3199C3_nt2v5Ev();
extern void _ZN10S3199C3_nt2v6Ev();
extern void _ZN10S3199C3_nt2v7Ev();
extern void _ZN7S3199C23v10Ev();
extern void _ZN7S3199C23v11Ev();
extern void _ZN7S3199C23v12Ev();
extern void _ZN7S3199C23v13Ev();
extern void _ZN7S3199C23v14Ev();
extern void ABISELECT(_ZThn8_N7S3199C2D1Ev,_ZThn4_N7S3199C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3199C2D0Ev,_ZThn4_N7S3199C2D0Ev)();
extern void _ZN7S3199C42v8Ev();
extern void _ZN7S3199C42v9Ev();
static  VTBL_ENTRY vtc_S3199C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3199C2[0]),
  (VTBL_ENTRY)&_ZN7S3199C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3199C2D0Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v14Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3199C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3199C2D1Ev,_ZThn4_N7S3199C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3199C2D0Ev,_ZThn4_N7S3199C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3199C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3199C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S3199C2[];
extern  VTBL_ENTRY _ZTV7S3199C2[];
Class_Descriptor cd_S3199C2 = {  "S3199C2", // class name
  bases_S3199C2, 2,
  &(vtc_S3199C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S3199C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3199C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3199C1  : S3199C2 {
  virtual void  v1(); // _ZN7S3199C12v1Ev
  virtual void  v2(); // _ZN7S3199C12v2Ev
  virtual void  v3(); // _ZN7S3199C12v3Ev
  ~S3199C1(); // tgen
  S3199C1(); // tgen
};
//SIG(1 S3199C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7} BC4{ vd v8 v9 FL Fi[3]} v10 v11 v12 v13 v14 Fi[2]} v1 v2 v3}


void  S3199C1 ::v1(){vfunc_called(this, "_ZN7S3199C12v1Ev");}
void  S3199C1 ::v2(){vfunc_called(this, "_ZN7S3199C12v2Ev");}
void  S3199C1 ::v3(){vfunc_called(this, "_ZN7S3199C12v3Ev");}
S3199C1 ::~S3199C1(){ note_dtor("S3199C1", this);} // tgen
S3199C1 ::S3199C1(){ note_ctor("S3199C1", this);} // tgen

static void Test_S3199C1()
{
  extern Class_Descriptor cd_S3199C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S3199C1, buf);
    S3199C1 *dp, &lv = *(dp=new (buf) S3199C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S3199C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3199C1)");
    check_base_class_offset(lv, (S3199C3_nt*)(S3199C2*), 0, "S3199C1");
    check_base_class_offset(lv, (S3199C4*)(S3199C2*), ABISELECT(8,4), "S3199C1");
    check_base_class_offset(lv, (S3199C2*), 0, "S3199C1");
    test_class_info(&lv, &cd_S3199C1);
    dp->~S3199C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3199C1(Test_S3199C1, "S3199C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S3199C1C1Ev();
extern void _ZN7S3199C1D1Ev();
Name_Map name_map_S3199C1[] = {
  NSPAIR(_ZN7S3199C1C1Ev),
  NSPAIR(_ZN7S3199C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3199C3_nt;
extern VTBL_ENTRY _ZTI10S3199C3_nt[];
extern  VTBL_ENTRY _ZTV10S3199C3_nt[];
extern Class_Descriptor cd_S3199C4;
extern VTBL_ENTRY _ZTI7S3199C4[];
extern  VTBL_ENTRY _ZTV7S3199C4[];
extern Class_Descriptor cd_S3199C2;
extern VTBL_ENTRY _ZTI7S3199C2[];
extern  VTBL_ENTRY _ZTV7S3199C2[];
static Base_Class bases_S3199C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3199C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3199C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3199C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3199C1[];
extern void _ZN7S3199C1D1Ev();
extern void _ZN7S3199C1D0Ev();
extern void _ZN10S3199C3_nt2v4Ev();
extern void _ZN10S3199C3_nt2v5Ev();
extern void _ZN10S3199C3_nt2v6Ev();
extern void _ZN10S3199C3_nt2v7Ev();
extern void _ZN7S3199C23v10Ev();
extern void _ZN7S3199C23v11Ev();
extern void _ZN7S3199C23v12Ev();
extern void _ZN7S3199C23v13Ev();
extern void _ZN7S3199C23v14Ev();
extern void _ZN7S3199C12v1Ev();
extern void _ZN7S3199C12v2Ev();
extern void _ZN7S3199C12v3Ev();
extern void ABISELECT(_ZThn8_N7S3199C1D1Ev,_ZThn4_N7S3199C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3199C1D0Ev,_ZThn4_N7S3199C1D0Ev)();
extern void _ZN7S3199C42v8Ev();
extern void _ZN7S3199C42v9Ev();
static  VTBL_ENTRY vtc_S3199C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3199C1[0]),
  (VTBL_ENTRY)&_ZN7S3199C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3199C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3199C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3199C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3199C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3199C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3199C12v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3199C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3199C1D1Ev,_ZThn4_N7S3199C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3199C1D0Ev,_ZThn4_N7S3199C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3199C42v8Ev,
  (VTBL_ENTRY)&_ZN7S3199C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S3199C1[];
extern  VTBL_ENTRY _ZTV7S3199C1[];
Class_Descriptor cd_S3199C1 = {  "S3199C1", // class name
  bases_S3199C1, 3,
  &(vtc_S3199C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S3199C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3199C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9353C2  {
  ::S21540C7_nt s9353c2f0;
  int s9353c2f1[2];
  char s9353c2f2;
  virtual  ~S9353C2(); // _ZN7S9353C2D1Ev
  virtual void  v3(); // _ZN7S9353C22v3Ev
  virtual void  v4(); // _ZN7S9353C22v4Ev
  virtual void  v5(); // _ZN7S9353C22v5Ev
  S9353C2(); // tgen
};
//SIG(-1 S9353C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9353C2 ::~S9353C2(){ note_dtor("S9353C2", this);}
void  S9353C2 ::v3(){vfunc_called(this, "_ZN7S9353C22v3Ev");}
void  S9353C2 ::v4(){vfunc_called(this, "_ZN7S9353C22v4Ev");}
void  S9353C2 ::v5(){vfunc_called(this, "_ZN7S9353C22v5Ev");}
S9353C2 ::S9353C2(){ note_ctor("S9353C2", this);} // tgen

static void Test_S9353C2()
{
  extern Class_Descriptor cd_S9353C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9353C2, buf);
    S9353C2 *dp, &lv = *(dp=new (buf) S9353C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9353C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9353C2)");
    check_field_offset(lv, s9353c2f0, ABISELECT(8,4), "S9353C2.s9353c2f0");
    check_field_offset(lv, s9353c2f1, ABISELECT(24,16), "S9353C2.s9353c2f1");
    check_field_offset(lv, s9353c2f2, ABISELECT(32,24), "S9353C2.s9353c2f2");
    test_class_info(&lv, &cd_S9353C2);
    dp->~S9353C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9353C2(Test_S9353C2, "S9353C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9353C2C1Ev();
extern void _ZN7S9353C2D1Ev();
Name_Map name_map_S9353C2[] = {
  NSPAIR(_ZN7S9353C2C1Ev),
  NSPAIR(_ZN7S9353C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9353C2[];
extern void _ZN7S9353C2D1Ev();
extern void _ZN7S9353C2D0Ev();
extern void _ZN7S9353C22v3Ev();
extern void _ZN7S9353C22v4Ev();
extern void _ZN7S9353C22v5Ev();
static  VTBL_ENTRY vtc_S9353C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9353C2[0]),
  (VTBL_ENTRY)&_ZN7S9353C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9353C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9353C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9353C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9353C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9353C2[];
extern  VTBL_ENTRY _ZTV7S9353C2[];
Class_Descriptor cd_S9353C2 = {  "S9353C2", // class name
  0,0,//no base classes
  &(vtc_S9353C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9353C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9353C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9353C1  : S9353C2 {
  void *s9353c1f0;
  ::S21540C7_nt s9353c1f1;
  ::S21540C7_nt s9353c1f2;
  ::S9166C6 s9353c1f3;
  void *s9353c1f4[2];
  virtual  ~S9353C1(); // _ZN7S9353C1D1Ev
  virtual void  v1(); // _ZN7S9353C12v1Ev
  virtual void  v2(); // _ZN7S9353C12v2Ev
  S9353C1(); // tgen
};
//SIG(1 S9353C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC3 FC3 FC5{ m Fp} Fp[2]}


 S9353C1 ::~S9353C1(){ note_dtor("S9353C1", this);}
void  S9353C1 ::v1(){vfunc_called(this, "_ZN7S9353C12v1Ev");}
void  S9353C1 ::v2(){vfunc_called(this, "_ZN7S9353C12v2Ev");}
S9353C1 ::S9353C1(){ note_ctor("S9353C1", this);} // tgen

static void Test_S9353C1()
{
  extern Class_Descriptor cd_S9353C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S9353C1, buf);
    S9353C1 *dp, &lv = *(dp=new (buf) S9353C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S9353C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9353C1)");
    check_base_class_offset(lv, (S9353C2*), 0, "S9353C1");
    check_field_offset(lv, s9353c1f0, ABISELECT(40,28), "S9353C1.s9353c1f0");
    check_field_offset(lv, s9353c1f1, ABISELECT(48,32), "S9353C1.s9353c1f1");
    check_field_offset(lv, s9353c1f2, ABISELECT(64,44), "S9353C1.s9353c1f2");
    check_field_offset(lv, s9353c1f3, ABISELECT(80,56), "S9353C1.s9353c1f3");
    check_field_offset(lv, s9353c1f4, ABISELECT(88,60), "S9353C1.s9353c1f4");
    test_class_info(&lv, &cd_S9353C1);
    dp->~S9353C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9353C1(Test_S9353C1, "S9353C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S9353C1C1Ev();
extern void _ZN7S9353C1D1Ev();
Name_Map name_map_S9353C1[] = {
  NSPAIR(_ZN7S9353C1C1Ev),
  NSPAIR(_ZN7S9353C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9353C2;
extern VTBL_ENTRY _ZTI7S9353C2[];
extern  VTBL_ENTRY _ZTV7S9353C2[];
static Base_Class bases_S9353C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9353C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9353C1[];
extern void _ZN7S9353C1D1Ev();
extern void _ZN7S9353C1D0Ev();
extern void _ZN7S9353C22v3Ev();
extern void _ZN7S9353C22v4Ev();
extern void _ZN7S9353C22v5Ev();
extern void _ZN7S9353C12v1Ev();
extern void _ZN7S9353C12v2Ev();
static  VTBL_ENTRY vtc_S9353C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9353C1[0]),
  (VTBL_ENTRY)&_ZN7S9353C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9353C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9353C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9353C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9353C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9353C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9353C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9353C1[];
extern  VTBL_ENTRY _ZTV7S9353C1[];
Class_Descriptor cd_S9353C1 = {  "S9353C1", // class name
  bases_S9353C1, 1,
  &(vtc_S9353C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S9353C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9353C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11441C2_nt  {
  int s11441c2f0;
  void *s11441c2f1[3];
  int s11441c2f2;
  void *s11441c2f3;
  int s11441c2f4[17];
};
//SIG(-1 S11441C2_nt) C1{ Fi Fp[3] Fi Fp Fi[17]}



//skip512 S11441C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11441C1  {
  ::S11441C2_nt s11441c1f0;
  void *s11441c1f1;
  int s11441c1f2;
  void *s11441c1f3;
  int s11441c1f4[3];
  void *s11441c1f5;
  int s11441c1f6;
  ::S1933C9_nt s11441c1f7;
  int s11441c1f8[2];
  void *s11441c1f9;
  int s11441c1f10[2];
  __tsi64 s11441c1f11;
  int s11441c1f12[2];
};
//SIG(1 S11441C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi Fp Fi[3] Fp Fi FC3{ FL} Fi[2] Fp Fi[2] FL Fi[2]}



static void Test_S11441C1()
{
  {
    init_simple_test("S11441C1");
    S11441C1 lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S11441C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11441C1)");
    check_field_offset(lv, s11441c1f0, 0, "S11441C1.s11441c1f0");
    check_field_offset(lv, s11441c1f1, ABISELECT(120,92), "S11441C1.s11441c1f1");
    check_field_offset(lv, s11441c1f2, ABISELECT(128,96), "S11441C1.s11441c1f2");
    check_field_offset(lv, s11441c1f3, ABISELECT(136,100), "S11441C1.s11441c1f3");
    check_field_offset(lv, s11441c1f4, ABISELECT(144,104), "S11441C1.s11441c1f4");
    check_field_offset(lv, s11441c1f5, ABISELECT(160,116), "S11441C1.s11441c1f5");
    check_field_offset(lv, s11441c1f6, ABISELECT(168,120), "S11441C1.s11441c1f6");
    check_field_offset(lv, s11441c1f7, ABISELECT(176,124), "S11441C1.s11441c1f7");
    check_field_offset(lv, s11441c1f8, ABISELECT(184,132), "S11441C1.s11441c1f8");
    check_field_offset(lv, s11441c1f9, ABISELECT(192,140), "S11441C1.s11441c1f9");
    check_field_offset(lv, s11441c1f10, ABISELECT(200,144), "S11441C1.s11441c1f10");
    check_field_offset(lv, s11441c1f11, ABISELECT(208,152), "S11441C1.s11441c1f11");
    check_field_offset(lv, s11441c1f12, ABISELECT(216,160), "S11441C1.s11441c1f12");
  }
}
static Arrange_To_Call_Me vS11441C1(Test_S11441C1, "S11441C1", ABISELECT(224,168));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11440C1  {
  ::S11441C2_nt s11440c1f0;
  void *s11440c1f1;
  int s11440c1f2;
  void *s11440c1f3;
  int s11440c1f4[3];
  void *s11440c1f5;
  int s11440c1f6;
  ::S1932C9_nt s11440c1f7;
  int s11440c1f8[2];
  void *s11440c1f9;
  int s11440c1f10[2];
  long s11440c1f11;
  int s11440c1f12[2];
};
//SIG(1 S11440C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi Fp Fi[3] Fp Fi FC3{ Fl} Fi[2] Fp Fi[2] Fl Fi[2]}



static void Test_S11440C1()
{
  {
    init_simple_test("S11440C1");
    S11440C1 lv;
    check2(sizeof(lv), ABISELECT(224,160), "sizeof(S11440C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11440C1)");
    check_field_offset(lv, s11440c1f0, 0, "S11440C1.s11440c1f0");
    check_field_offset(lv, s11440c1f1, ABISELECT(120,92), "S11440C1.s11440c1f1");
    check_field_offset(lv, s11440c1f2, ABISELECT(128,96), "S11440C1.s11440c1f2");
    check_field_offset(lv, s11440c1f3, ABISELECT(136,100), "S11440C1.s11440c1f3");
    check_field_offset(lv, s11440c1f4, ABISELECT(144,104), "S11440C1.s11440c1f4");
    check_field_offset(lv, s11440c1f5, ABISELECT(160,116), "S11440C1.s11440c1f5");
    check_field_offset(lv, s11440c1f6, ABISELECT(168,120), "S11440C1.s11440c1f6");
    check_field_offset(lv, s11440c1f7, ABISELECT(176,124), "S11440C1.s11440c1f7");
    check_field_offset(lv, s11440c1f8, ABISELECT(184,128), "S11440C1.s11440c1f8");
    check_field_offset(lv, s11440c1f9, ABISELECT(192,136), "S11440C1.s11440c1f9");
    check_field_offset(lv, s11440c1f10, ABISELECT(200,140), "S11440C1.s11440c1f10");
    check_field_offset(lv, s11440c1f11, ABISELECT(208,148), "S11440C1.s11440c1f11");
    check_field_offset(lv, s11440c1f12, ABISELECT(216,152), "S11440C1.s11440c1f12");
  }
}
static Arrange_To_Call_Me vS11440C1(Test_S11440C1, "S11440C1", ABISELECT(224,160));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11449C1  {
  ::S11441C2_nt s11449c1f0;
  void *s11449c1f1;
  int s11449c1f2[2];
  ::S1933C9_nt s11449c1f3;
  int s11449c1f4[4];
  void *s11449c1f5[4];
  int s11449c1f6;
  void *s11449c1f7;
  int s11449c1f8[3];
  void *s11449c1f9[3];
  int s11449c1f10;
};
//SIG(1 S11449C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi[2] FC3{ FL} Fi[4] Fp[4] Fi Fp Fi[3] Fp[3] Fi}



static void Test_S11449C1()
{
  {
    init_simple_test("S11449C1");
    S11449C1 lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S11449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11449C1)");
    check_field_offset(lv, s11449c1f0, 0, "S11449C1.s11449c1f0");
    check_field_offset(lv, s11449c1f1, ABISELECT(120,92), "S11449C1.s11449c1f1");
    check_field_offset(lv, s11449c1f2, ABISELECT(128,96), "S11449C1.s11449c1f2");
    check_field_offset(lv, s11449c1f3, ABISELECT(136,104), "S11449C1.s11449c1f3");
    check_field_offset(lv, s11449c1f4, ABISELECT(144,112), "S11449C1.s11449c1f4");
    check_field_offset(lv, s11449c1f5, ABISELECT(160,128), "S11449C1.s11449c1f5");
    check_field_offset(lv, s11449c1f6, ABISELECT(192,144), "S11449C1.s11449c1f6");
    check_field_offset(lv, s11449c1f7, ABISELECT(200,148), "S11449C1.s11449c1f7");
    check_field_offset(lv, s11449c1f8, ABISELECT(208,152), "S11449C1.s11449c1f8");
    check_field_offset(lv, s11449c1f9, ABISELECT(224,164), "S11449C1.s11449c1f9");
    check_field_offset(lv, s11449c1f10, ABISELECT(248,176), "S11449C1.s11449c1f10");
  }
}
static Arrange_To_Call_Me vS11449C1(Test_S11449C1, "S11449C1", ABISELECT(256,180));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11448C1  {
  ::S11441C2_nt s11448c1f0;
  void *s11448c1f1;
  int s11448c1f2[2];
  ::S1932C9_nt s11448c1f3;
  int s11448c1f4[4];
  void *s11448c1f5[4];
  int s11448c1f6;
  void *s11448c1f7;
  int s11448c1f8[3];
  void *s11448c1f9[3];
  int s11448c1f10;
};
//SIG(1 S11448C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi[2] FC3{ Fl} Fi[4] Fp[4] Fi Fp Fi[3] Fp[3] Fi}



static void Test_S11448C1()
{
  {
    init_simple_test("S11448C1");
    S11448C1 lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S11448C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11448C1)");
    check_field_offset(lv, s11448c1f0, 0, "S11448C1.s11448c1f0");
    check_field_offset(lv, s11448c1f1, ABISELECT(120,92), "S11448C1.s11448c1f1");
    check_field_offset(lv, s11448c1f2, ABISELECT(128,96), "S11448C1.s11448c1f2");
    check_field_offset(lv, s11448c1f3, ABISELECT(136,104), "S11448C1.s11448c1f3");
    check_field_offset(lv, s11448c1f4, ABISELECT(144,108), "S11448C1.s11448c1f4");
    check_field_offset(lv, s11448c1f5, ABISELECT(160,124), "S11448C1.s11448c1f5");
    check_field_offset(lv, s11448c1f6, ABISELECT(192,140), "S11448C1.s11448c1f6");
    check_field_offset(lv, s11448c1f7, ABISELECT(200,144), "S11448C1.s11448c1f7");
    check_field_offset(lv, s11448c1f8, ABISELECT(208,148), "S11448C1.s11448c1f8");
    check_field_offset(lv, s11448c1f9, ABISELECT(224,160), "S11448C1.s11448c1f9");
    check_field_offset(lv, s11448c1f10, ABISELECT(248,172), "S11448C1.s11448c1f10");
  }
}
static Arrange_To_Call_Me vS11448C1(Test_S11448C1, "S11448C1", ABISELECT(256,176));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11419C1  {
  ::S11441C2_nt s11419c1f0;
  int s11419c1f1[9];
  ::S1933C9_nt s11419c1f2;
  ::S1933C9_nt s11419c1f3;
  ::S1933C9_nt s11419c1f4;
  int s11419c1f5;
  __tsi64 s11419c1f6;
  int s11419c1f7[3];
  void *s11419c1f8[3];
  int s11419c1f9[3];
  void *s11419c1f10;
};
//SIG(1 S11419C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[9] FC3{ FL} FC3 FC3 Fi FL Fi[3] Fp[3] Fi[3] Fp}



static void Test_S11419C1()
{
  {
    init_simple_test("S11419C1");
    S11419C1 lv;
    check2(sizeof(lv), ABISELECT(264,204), "sizeof(S11419C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11419C1)");
    check_field_offset(lv, s11419c1f0, 0, "S11419C1.s11419c1f0");
    check_field_offset(lv, s11419c1f1, ABISELECT(120,92), "S11419C1.s11419c1f1");
    check_field_offset(lv, s11419c1f2, ABISELECT(160,128), "S11419C1.s11419c1f2");
    check_field_offset(lv, s11419c1f3, ABISELECT(168,136), "S11419C1.s11419c1f3");
    check_field_offset(lv, s11419c1f4, ABISELECT(176,144), "S11419C1.s11419c1f4");
    check_field_offset(lv, s11419c1f5, ABISELECT(184,152), "S11419C1.s11419c1f5");
    check_field_offset(lv, s11419c1f6, ABISELECT(192,156), "S11419C1.s11419c1f6");
    check_field_offset(lv, s11419c1f7, ABISELECT(200,164), "S11419C1.s11419c1f7");
    check_field_offset(lv, s11419c1f8, ABISELECT(216,176), "S11419C1.s11419c1f8");
    check_field_offset(lv, s11419c1f9, ABISELECT(240,188), "S11419C1.s11419c1f9");
    check_field_offset(lv, s11419c1f10, ABISELECT(256,200), "S11419C1.s11419c1f10");
  }
}
static Arrange_To_Call_Me vS11419C1(Test_S11419C1, "S11419C1", ABISELECT(264,204));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11418C1  {
  ::S11441C2_nt s11418c1f0;
  int s11418c1f1[9];
  ::S1932C9_nt s11418c1f2;
  ::S1932C9_nt s11418c1f3;
  ::S1932C9_nt s11418c1f4;
  int s11418c1f5;
  long s11418c1f6;
  int s11418c1f7[3];
  void *s11418c1f8[3];
  int s11418c1f9[3];
  void *s11418c1f10;
};
//SIG(1 S11418C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[9] FC3{ Fl} FC3 FC3 Fi Fl Fi[3] Fp[3] Fi[3] Fp}



static void Test_S11418C1()
{
  {
    init_simple_test("S11418C1");
    S11418C1 lv;
    check2(sizeof(lv), ABISELECT(264,188), "sizeof(S11418C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11418C1)");
    check_field_offset(lv, s11418c1f0, 0, "S11418C1.s11418c1f0");
    check_field_offset(lv, s11418c1f1, ABISELECT(120,92), "S11418C1.s11418c1f1");
    check_field_offset(lv, s11418c1f2, ABISELECT(160,128), "S11418C1.s11418c1f2");
    check_field_offset(lv, s11418c1f3, ABISELECT(168,132), "S11418C1.s11418c1f3");
    check_field_offset(lv, s11418c1f4, ABISELECT(176,136), "S11418C1.s11418c1f4");
    check_field_offset(lv, s11418c1f5, ABISELECT(184,140), "S11418C1.s11418c1f5");
    check_field_offset(lv, s11418c1f6, ABISELECT(192,144), "S11418C1.s11418c1f6");
    check_field_offset(lv, s11418c1f7, ABISELECT(200,148), "S11418C1.s11418c1f7");
    check_field_offset(lv, s11418c1f8, ABISELECT(216,160), "S11418C1.s11418c1f8");
    check_field_offset(lv, s11418c1f9, ABISELECT(240,172), "S11418C1.s11418c1f9");
    check_field_offset(lv, s11418c1f10, ABISELECT(256,184), "S11418C1.s11418c1f10");
  }
}
static Arrange_To_Call_Me vS11418C1(Test_S11418C1, "S11418C1", ABISELECT(264,188));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11397C1  {
  ::S11441C2_nt s11397c1f0;
  int s11397c1f1;
  void *s11397c1f2;
  int s11397c1f3[7];
  void *s11397c1f4[3];
  int s11397c1f5[7];
  ::S1933C9_nt s11397c1f6;
  ::S1933C9_nt s11397c1f7;
  int s11397c1f8;
  void *s11397c1f9;
  int s11397c1f10[8];
};
//SIG(1 S11397C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi Fp Fi[7] Fp[3] Fi[7] FC3{ FL} FC3 Fi Fp Fi[8]}



static void Test_S11397C1()
{
  {
    init_simple_test("S11397C1");
    S11397C1 lv;
    check2(sizeof(lv), ABISELECT(288,224), "sizeof(S11397C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11397C1)");
    check_field_offset(lv, s11397c1f0, 0, "S11397C1.s11397c1f0");
    check_field_offset(lv, s11397c1f1, ABISELECT(120,92), "S11397C1.s11397c1f1");
    check_field_offset(lv, s11397c1f2, ABISELECT(128,96), "S11397C1.s11397c1f2");
    check_field_offset(lv, s11397c1f3, ABISELECT(136,100), "S11397C1.s11397c1f3");
    check_field_offset(lv, s11397c1f4, ABISELECT(168,128), "S11397C1.s11397c1f4");
    check_field_offset(lv, s11397c1f5, ABISELECT(192,140), "S11397C1.s11397c1f5");
    check_field_offset(lv, s11397c1f6, ABISELECT(224,168), "S11397C1.s11397c1f6");
    check_field_offset(lv, s11397c1f7, ABISELECT(232,176), "S11397C1.s11397c1f7");
    check_field_offset(lv, s11397c1f8, ABISELECT(240,184), "S11397C1.s11397c1f8");
    check_field_offset(lv, s11397c1f9, ABISELECT(248,188), "S11397C1.s11397c1f9");
    check_field_offset(lv, s11397c1f10, ABISELECT(256,192), "S11397C1.s11397c1f10");
  }
}
static Arrange_To_Call_Me vS11397C1(Test_S11397C1, "S11397C1", ABISELECT(288,224));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11396C1  {
  ::S11441C2_nt s11396c1f0;
  int s11396c1f1;
  void *s11396c1f2;
  int s11396c1f3[7];
  void *s11396c1f4[3];
  int s11396c1f5[7];
  ::S1932C9_nt s11396c1f6;
  ::S1932C9_nt s11396c1f7;
  int s11396c1f8;
  void *s11396c1f9;
  int s11396c1f10[8];
};
//SIG(1 S11396C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi Fp Fi[7] Fp[3] Fi[7] FC3{ Fl} FC3 Fi Fp Fi[8]}



static void Test_S11396C1()
{
  {
    init_simple_test("S11396C1");
    S11396C1 lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S11396C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11396C1)");
    check_field_offset(lv, s11396c1f0, 0, "S11396C1.s11396c1f0");
    check_field_offset(lv, s11396c1f1, ABISELECT(120,92), "S11396C1.s11396c1f1");
    check_field_offset(lv, s11396c1f2, ABISELECT(128,96), "S11396C1.s11396c1f2");
    check_field_offset(lv, s11396c1f3, ABISELECT(136,100), "S11396C1.s11396c1f3");
    check_field_offset(lv, s11396c1f4, ABISELECT(168,128), "S11396C1.s11396c1f4");
    check_field_offset(lv, s11396c1f5, ABISELECT(192,140), "S11396C1.s11396c1f5");
    check_field_offset(lv, s11396c1f6, ABISELECT(224,168), "S11396C1.s11396c1f6");
    check_field_offset(lv, s11396c1f7, ABISELECT(232,172), "S11396C1.s11396c1f7");
    check_field_offset(lv, s11396c1f8, ABISELECT(240,176), "S11396C1.s11396c1f8");
    check_field_offset(lv, s11396c1f9, ABISELECT(248,180), "S11396C1.s11396c1f9");
    check_field_offset(lv, s11396c1f10, ABISELECT(256,184), "S11396C1.s11396c1f10");
  }
}
static Arrange_To_Call_Me vS11396C1(Test_S11396C1, "S11396C1", ABISELECT(288,216));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11451C1  {
  ::S11441C2_nt s11451c1f0;
  void *s11451c1f1;
  int s11451c1f2[2];
  ::S1933C9_nt s11451c1f3;
  int s11451c1f4[4];
  void *s11451c1f5[4];
  int s11451c1f6;
  void *s11451c1f7;
  int s11451c1f8[3];
  void *s11451c1f9[4];
};
//SIG(1 S11451C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi[2] FC3{ FL} Fi[4] Fp[4] Fi Fp Fi[3] Fp[4]}



static void Test_S11451C1()
{
  {
    init_simple_test("S11451C1");
    S11451C1 lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S11451C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11451C1)");
    check_field_offset(lv, s11451c1f0, 0, "S11451C1.s11451c1f0");
    check_field_offset(lv, s11451c1f1, ABISELECT(120,92), "S11451C1.s11451c1f1");
    check_field_offset(lv, s11451c1f2, ABISELECT(128,96), "S11451C1.s11451c1f2");
    check_field_offset(lv, s11451c1f3, ABISELECT(136,104), "S11451C1.s11451c1f3");
    check_field_offset(lv, s11451c1f4, ABISELECT(144,112), "S11451C1.s11451c1f4");
    check_field_offset(lv, s11451c1f5, ABISELECT(160,128), "S11451C1.s11451c1f5");
    check_field_offset(lv, s11451c1f6, ABISELECT(192,144), "S11451C1.s11451c1f6");
    check_field_offset(lv, s11451c1f7, ABISELECT(200,148), "S11451C1.s11451c1f7");
    check_field_offset(lv, s11451c1f8, ABISELECT(208,152), "S11451C1.s11451c1f8");
    check_field_offset(lv, s11451c1f9, ABISELECT(224,164), "S11451C1.s11451c1f9");
  }
}
static Arrange_To_Call_Me vS11451C1(Test_S11451C1, "S11451C1", ABISELECT(256,180));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11450C1  {
  ::S11441C2_nt s11450c1f0;
  void *s11450c1f1;
  int s11450c1f2[2];
  ::S1932C9_nt s11450c1f3;
  int s11450c1f4[4];
  void *s11450c1f5[4];
  int s11450c1f6;
  void *s11450c1f7;
  int s11450c1f8[3];
  void *s11450c1f9[4];
};
//SIG(1 S11450C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi[2] FC3{ Fl} Fi[4] Fp[4] Fi Fp Fi[3] Fp[4]}



static void Test_S11450C1()
{
  {
    init_simple_test("S11450C1");
    S11450C1 lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S11450C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11450C1)");
    check_field_offset(lv, s11450c1f0, 0, "S11450C1.s11450c1f0");
    check_field_offset(lv, s11450c1f1, ABISELECT(120,92), "S11450C1.s11450c1f1");
    check_field_offset(lv, s11450c1f2, ABISELECT(128,96), "S11450C1.s11450c1f2");
    check_field_offset(lv, s11450c1f3, ABISELECT(136,104), "S11450C1.s11450c1f3");
    check_field_offset(lv, s11450c1f4, ABISELECT(144,108), "S11450C1.s11450c1f4");
    check_field_offset(lv, s11450c1f5, ABISELECT(160,124), "S11450C1.s11450c1f5");
    check_field_offset(lv, s11450c1f6, ABISELECT(192,140), "S11450C1.s11450c1f6");
    check_field_offset(lv, s11450c1f7, ABISELECT(200,144), "S11450C1.s11450c1f7");
    check_field_offset(lv, s11450c1f8, ABISELECT(208,148), "S11450C1.s11450c1f8");
    check_field_offset(lv, s11450c1f9, ABISELECT(224,160), "S11450C1.s11450c1f9");
  }
}
static Arrange_To_Call_Me vS11450C1(Test_S11450C1, "S11450C1", ABISELECT(256,176));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11421C1  {
  ::S11441C2_nt s11421c1f0;
  int s11421c1f1[9];
  ::S1933C9_nt s11421c1f2;
  ::S1933C9_nt s11421c1f3;
  ::S1933C9_nt s11421c1f4;
  int s11421c1f5;
  __tsi64 s11421c1f6;
  int s11421c1f7[3];
  void *s11421c1f8[3];
  int s11421c1f9[4];
};
//SIG(1 S11421C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[9] FC3{ FL} FC3 FC3 Fi FL Fi[3] Fp[3] Fi[4]}



static void Test_S11421C1()
{
  {
    init_simple_test("S11421C1");
    S11421C1 lv;
    check2(sizeof(lv), ABISELECT(256,204), "sizeof(S11421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11421C1)");
    check_field_offset(lv, s11421c1f0, 0, "S11421C1.s11421c1f0");
    check_field_offset(lv, s11421c1f1, ABISELECT(120,92), "S11421C1.s11421c1f1");
    check_field_offset(lv, s11421c1f2, ABISELECT(160,128), "S11421C1.s11421c1f2");
    check_field_offset(lv, s11421c1f3, ABISELECT(168,136), "S11421C1.s11421c1f3");
    check_field_offset(lv, s11421c1f4, ABISELECT(176,144), "S11421C1.s11421c1f4");
    check_field_offset(lv, s11421c1f5, ABISELECT(184,152), "S11421C1.s11421c1f5");
    check_field_offset(lv, s11421c1f6, ABISELECT(192,156), "S11421C1.s11421c1f6");
    check_field_offset(lv, s11421c1f7, ABISELECT(200,164), "S11421C1.s11421c1f7");
    check_field_offset(lv, s11421c1f8, ABISELECT(216,176), "S11421C1.s11421c1f8");
    check_field_offset(lv, s11421c1f9, ABISELECT(240,188), "S11421C1.s11421c1f9");
  }
}
static Arrange_To_Call_Me vS11421C1(Test_S11421C1, "S11421C1", ABISELECT(256,204));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11420C1  {
  ::S11441C2_nt s11420c1f0;
  int s11420c1f1[9];
  ::S1932C9_nt s11420c1f2;
  ::S1932C9_nt s11420c1f3;
  ::S1932C9_nt s11420c1f4;
  int s11420c1f5;
  long s11420c1f6;
  int s11420c1f7[3];
  void *s11420c1f8[3];
  int s11420c1f9[4];
};
//SIG(1 S11420C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fi[9] FC3{ Fl} FC3 FC3 Fi Fl Fi[3] Fp[3] Fi[4]}



static void Test_S11420C1()
{
  {
    init_simple_test("S11420C1");
    S11420C1 lv;
    check2(sizeof(lv), ABISELECT(256,188), "sizeof(S11420C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11420C1)");
    check_field_offset(lv, s11420c1f0, 0, "S11420C1.s11420c1f0");
    check_field_offset(lv, s11420c1f1, ABISELECT(120,92), "S11420C1.s11420c1f1");
    check_field_offset(lv, s11420c1f2, ABISELECT(160,128), "S11420C1.s11420c1f2");
    check_field_offset(lv, s11420c1f3, ABISELECT(168,132), "S11420C1.s11420c1f3");
    check_field_offset(lv, s11420c1f4, ABISELECT(176,136), "S11420C1.s11420c1f4");
    check_field_offset(lv, s11420c1f5, ABISELECT(184,140), "S11420C1.s11420c1f5");
    check_field_offset(lv, s11420c1f6, ABISELECT(192,144), "S11420C1.s11420c1f6");
    check_field_offset(lv, s11420c1f7, ABISELECT(200,148), "S11420C1.s11420c1f7");
    check_field_offset(lv, s11420c1f8, ABISELECT(216,160), "S11420C1.s11420c1f8");
    check_field_offset(lv, s11420c1f9, ABISELECT(240,172), "S11420C1.s11420c1f9");
  }
}
static Arrange_To_Call_Me vS11420C1(Test_S11420C1, "S11420C1", ABISELECT(256,188));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8351C1  : S1933C4_nt {
  void *s8351c1f0;
  ::S8376C3_nt s8351c1f1;
  ::S8376C5 s8351c1f2;
  void *s8351c1f3;
  int s8351c1f4;
  void *s8351c1f5[5];
  virtual  ~S8351C1(); // _ZN7S8351C1D1Ev
  S8351C1(); // tgen
};
//SIG(1 S8351C1) C1{ BC2{ vd m} vd Fp FC3{ m FC4{ vd m FL Fc} FC4} FC5{ BC2 vd FC3 FC3} Fp Fi Fp[5]}


 S8351C1 ::~S8351C1(){ note_dtor("S8351C1", this);}
S8351C1 ::S8351C1(){ note_ctor("S8351C1", this);} // tgen

static void Test_S8351C1()
{
  extern Class_Descriptor cd_S8351C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,35)];
    init_test(&cd_S8351C1, buf);
    S8351C1 *dp, &lv = *(dp=new (buf) S8351C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,136), "sizeof(S8351C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8351C1)");
    check_base_class_offset(lv, (S1933C4_nt*), 0, "S8351C1");
    check_field_offset(lv, s8351c1f0, ABISELECT(8,4), "S8351C1.s8351c1f0");
    check_field_offset(lv, s8351c1f1, ABISELECT(16,8), "S8351C1.s8351c1f1");
    check_field_offset(lv, s8351c1f2, ABISELECT(64,40), "S8351C1.s8351c1f2");
    check_field_offset(lv, s8351c1f3, ABISELECT(168,108), "S8351C1.s8351c1f3");
    check_field_offset(lv, s8351c1f4, ABISELECT(176,112), "S8351C1.s8351c1f4");
    check_field_offset(lv, s8351c1f5, ABISELECT(184,116), "S8351C1.s8351c1f5");
    test_class_info(&lv, &cd_S8351C1);
    dp->~S8351C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8351C1(Test_S8351C1, "S8351C1", ABISELECT(224,136));

#else // __cplusplus

extern void _ZN7S8351C1C1Ev();
extern void _ZN7S8351C1D1Ev();
Name_Map name_map_S8351C1[] = {
  NSPAIR(_ZN7S8351C1C1Ev),
  NSPAIR(_ZN7S8351C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S8351C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1933C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8351C1[];
extern void _ZN7S8351C1D1Ev();
extern void _ZN7S8351C1D0Ev();
static  VTBL_ENTRY vtc_S8351C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8351C1[0]),
  (VTBL_ENTRY)&_ZN7S8351C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8351C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8351C1[];
extern  VTBL_ENTRY _ZTV7S8351C1[];
Class_Descriptor cd_S8351C1 = {  "S8351C1", // class name
  bases_S8351C1, 1,
  &(vtc_S8351C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,136), // object size
  NSPAIRA(_ZTI7S8351C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8351C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11473C1  {
  ::S11441C2_nt s11473c1f0;
  void *s11473c1f1[2];
  int s11473c1f2;
  ::S1933C9_nt s11473c1f3;
  int s11473c1f4[2];
  ::S1933C9_nt s11473c1f5;
  ::S1933C9_nt s11473c1f6;
  void *s11473c1f7[3];
  int s11473c1f8[2];
};
//SIG(1 S11473C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp[2] Fi FC3{ FL} Fi[2] FC3 FC3 Fp[3] Fi[2]}



static void Test_S11473C1()
{
  {
    init_simple_test("S11473C1");
    S11473C1 lv;
    check2(sizeof(lv), ABISELECT(208,156), "sizeof(S11473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11473C1)");
    check_field_offset(lv, s11473c1f0, 0, "S11473C1.s11473c1f0");
    check_field_offset(lv, s11473c1f1, ABISELECT(120,92), "S11473C1.s11473c1f1");
    check_field_offset(lv, s11473c1f2, ABISELECT(136,100), "S11473C1.s11473c1f2");
    check_field_offset(lv, s11473c1f3, ABISELECT(144,104), "S11473C1.s11473c1f3");
    check_field_offset(lv, s11473c1f4, ABISELECT(152,112), "S11473C1.s11473c1f4");
    check_field_offset(lv, s11473c1f5, ABISELECT(160,120), "S11473C1.s11473c1f5");
    check_field_offset(lv, s11473c1f6, ABISELECT(168,128), "S11473C1.s11473c1f6");
    check_field_offset(lv, s11473c1f7, ABISELECT(176,136), "S11473C1.s11473c1f7");
    check_field_offset(lv, s11473c1f8, ABISELECT(200,148), "S11473C1.s11473c1f8");
  }
}
static Arrange_To_Call_Me vS11473C1(Test_S11473C1, "S11473C1", ABISELECT(208,156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11472C1  {
  ::S11441C2_nt s11472c1f0;
  void *s11472c1f1[2];
  int s11472c1f2;
  ::S1932C9_nt s11472c1f3;
  int s11472c1f4[2];
  ::S1932C9_nt s11472c1f5;
  ::S1932C9_nt s11472c1f6;
  void *s11472c1f7[3];
  int s11472c1f8[2];
};
//SIG(1 S11472C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp[2] Fi FC3{ Fl} Fi[2] FC3 FC3 Fp[3] Fi[2]}



static void Test_S11472C1()
{
  {
    init_simple_test("S11472C1");
    S11472C1 lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S11472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11472C1)");
    check_field_offset(lv, s11472c1f0, 0, "S11472C1.s11472c1f0");
    check_field_offset(lv, s11472c1f1, ABISELECT(120,92), "S11472C1.s11472c1f1");
    check_field_offset(lv, s11472c1f2, ABISELECT(136,100), "S11472C1.s11472c1f2");
    check_field_offset(lv, s11472c1f3, ABISELECT(144,104), "S11472C1.s11472c1f3");
    check_field_offset(lv, s11472c1f4, ABISELECT(152,108), "S11472C1.s11472c1f4");
    check_field_offset(lv, s11472c1f5, ABISELECT(160,116), "S11472C1.s11472c1f5");
    check_field_offset(lv, s11472c1f6, ABISELECT(168,120), "S11472C1.s11472c1f6");
    check_field_offset(lv, s11472c1f7, ABISELECT(176,124), "S11472C1.s11472c1f7");
    check_field_offset(lv, s11472c1f8, ABISELECT(200,136), "S11472C1.s11472c1f8");
  }
}
static Arrange_To_Call_Me vS11472C1(Test_S11472C1, "S11472C1", ABISELECT(208,144));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11443C1  {
  ::S11441C2_nt s11443c1f0;
  void *s11443c1f1;
  int s11443c1f2;
  void *s11443c1f3[2];
  int s11443c1f4[3];
  void *s11443c1f5;
  int s11443c1f6;
  ::S1933C9_nt s11443c1f7;
  int s11443c1f8;
  void *s11443c1f9[2];
};
//SIG(1 S11443C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi Fp[2] Fi[3] Fp Fi FC3{ FL} Fi Fp[2]}



static void Test_S11443C1()
{
  {
    init_simple_test("S11443C1");
    S11443C1 lv;
    check2(sizeof(lv), ABISELECT(216,148), "sizeof(S11443C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11443C1)");
    check_field_offset(lv, s11443c1f0, 0, "S11443C1.s11443c1f0");
    check_field_offset(lv, s11443c1f1, ABISELECT(120,92), "S11443C1.s11443c1f1");
    check_field_offset(lv, s11443c1f2, ABISELECT(128,96), "S11443C1.s11443c1f2");
    check_field_offset(lv, s11443c1f3, ABISELECT(136,100), "S11443C1.s11443c1f3");
    check_field_offset(lv, s11443c1f4, ABISELECT(152,108), "S11443C1.s11443c1f4");
    check_field_offset(lv, s11443c1f5, ABISELECT(168,120), "S11443C1.s11443c1f5");
    check_field_offset(lv, s11443c1f6, ABISELECT(176,124), "S11443C1.s11443c1f6");
    check_field_offset(lv, s11443c1f7, ABISELECT(184,128), "S11443C1.s11443c1f7");
    check_field_offset(lv, s11443c1f8, ABISELECT(192,136), "S11443C1.s11443c1f8");
    check_field_offset(lv, s11443c1f9, ABISELECT(200,140), "S11443C1.s11443c1f9");
  }
}
static Arrange_To_Call_Me vS11443C1(Test_S11443C1, "S11443C1", ABISELECT(216,148));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11442C1  {
  ::S11441C2_nt s11442c1f0;
  void *s11442c1f1;
  int s11442c1f2;
  void *s11442c1f3[2];
  int s11442c1f4[3];
  void *s11442c1f5;
  int s11442c1f6;
  ::S1932C9_nt s11442c1f7;
  int s11442c1f8;
  void *s11442c1f9[2];
};
//SIG(1 S11442C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi Fp[2] Fi[3] Fp Fi FC3{ Fl} Fi Fp[2]}



static void Test_S11442C1()
{
  {
    init_simple_test("S11442C1");
    S11442C1 lv;
    check2(sizeof(lv), ABISELECT(216,144), "sizeof(S11442C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11442C1)");
    check_field_offset(lv, s11442c1f0, 0, "S11442C1.s11442c1f0");
    check_field_offset(lv, s11442c1f1, ABISELECT(120,92), "S11442C1.s11442c1f1");
    check_field_offset(lv, s11442c1f2, ABISELECT(128,96), "S11442C1.s11442c1f2");
    check_field_offset(lv, s11442c1f3, ABISELECT(136,100), "S11442C1.s11442c1f3");
    check_field_offset(lv, s11442c1f4, ABISELECT(152,108), "S11442C1.s11442c1f4");
    check_field_offset(lv, s11442c1f5, ABISELECT(168,120), "S11442C1.s11442c1f5");
    check_field_offset(lv, s11442c1f6, ABISELECT(176,124), "S11442C1.s11442c1f6");
    check_field_offset(lv, s11442c1f7, ABISELECT(184,128), "S11442C1.s11442c1f7");
    check_field_offset(lv, s11442c1f8, ABISELECT(192,132), "S11442C1.s11442c1f8");
    check_field_offset(lv, s11442c1f9, ABISELECT(200,136), "S11442C1.s11442c1f9");
  }
}
static Arrange_To_Call_Me vS11442C1(Test_S11442C1, "S11442C1", ABISELECT(216,144));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11463C1  {
  ::S11441C2_nt s11463c1f0;
  void *s11463c1f1;
  int s11463c1f2[7];
  ::S1933C9_nt s11463c1f3;
  ::S1933C9_nt s11463c1f4;
  void *s11463c1f5[6];
  int s11463c1f6[3];
  void *s11463c1f7;
};
//SIG(1 S11463C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi[7] FC3{ FL} FC3 Fp[6] Fi[3] Fp}



static void Test_S11463C1()
{
  {
    init_simple_test("S11463C1");
    S11463C1 lv;
    check2(sizeof(lv), ABISELECT(248,180), "sizeof(S11463C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11463C1)");
    check_field_offset(lv, s11463c1f0, 0, "S11463C1.s11463c1f0");
    check_field_offset(lv, s11463c1f1, ABISELECT(120,92), "S11463C1.s11463c1f1");
    check_field_offset(lv, s11463c1f2, ABISELECT(128,96), "S11463C1.s11463c1f2");
    check_field_offset(lv, s11463c1f3, ABISELECT(160,124), "S11463C1.s11463c1f3");
    check_field_offset(lv, s11463c1f4, ABISELECT(168,132), "S11463C1.s11463c1f4");
    check_field_offset(lv, s11463c1f5, ABISELECT(176,140), "S11463C1.s11463c1f5");
    check_field_offset(lv, s11463c1f6, ABISELECT(224,164), "S11463C1.s11463c1f6");
    check_field_offset(lv, s11463c1f7, ABISELECT(240,176), "S11463C1.s11463c1f7");
  }
}
static Arrange_To_Call_Me vS11463C1(Test_S11463C1, "S11463C1", ABISELECT(248,180));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11462C1  {
  ::S11441C2_nt s11462c1f0;
  void *s11462c1f1;
  int s11462c1f2[7];
  ::S1932C9_nt s11462c1f3;
  ::S1932C9_nt s11462c1f4;
  void *s11462c1f5[6];
  int s11462c1f6[3];
  void *s11462c1f7;
};
//SIG(1 S11462C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi[7] FC3{ Fl} FC3 Fp[6] Fi[3] Fp}



static void Test_S11462C1()
{
  {
    init_simple_test("S11462C1");
    S11462C1 lv;
    check2(sizeof(lv), ABISELECT(248,172), "sizeof(S11462C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11462C1)");
    check_field_offset(lv, s11462c1f0, 0, "S11462C1.s11462c1f0");
    check_field_offset(lv, s11462c1f1, ABISELECT(120,92), "S11462C1.s11462c1f1");
    check_field_offset(lv, s11462c1f2, ABISELECT(128,96), "S11462C1.s11462c1f2");
    check_field_offset(lv, s11462c1f3, ABISELECT(160,124), "S11462C1.s11462c1f3");
    check_field_offset(lv, s11462c1f4, ABISELECT(168,128), "S11462C1.s11462c1f4");
    check_field_offset(lv, s11462c1f5, ABISELECT(176,132), "S11462C1.s11462c1f5");
    check_field_offset(lv, s11462c1f6, ABISELECT(224,156), "S11462C1.s11462c1f6");
    check_field_offset(lv, s11462c1f7, ABISELECT(240,168), "S11462C1.s11462c1f7");
  }
}
static Arrange_To_Call_Me vS11462C1(Test_S11462C1, "S11462C1", ABISELECT(248,172));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11439C1  {
  ::S11441C2_nt s11439c1f0;
  void *s11439c1f1;
  int s11439c1f2;
  ::S1933C9_nt s11439c1f3;
  int s11439c1f4[5];
  void *s11439c1f5[4];
  int s11439c1f6;
  void *s11439c1f7[2];
};
//SIG(1 S11439C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi FC3{ FL} Fi[5] Fp[4] Fi Fp[2]}



static void Test_S11439C1()
{
  {
    init_simple_test("S11439C1");
    S11439C1 lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S11439C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11439C1)");
    check_field_offset(lv, s11439c1f0, 0, "S11439C1.s11439c1f0");
    check_field_offset(lv, s11439c1f1, ABISELECT(120,92), "S11439C1.s11439c1f1");
    check_field_offset(lv, s11439c1f2, ABISELECT(128,96), "S11439C1.s11439c1f2");
    check_field_offset(lv, s11439c1f3, ABISELECT(136,100), "S11439C1.s11439c1f3");
    check_field_offset(lv, s11439c1f4, ABISELECT(144,108), "S11439C1.s11439c1f4");
    check_field_offset(lv, s11439c1f5, ABISELECT(168,128), "S11439C1.s11439c1f5");
    check_field_offset(lv, s11439c1f6, ABISELECT(200,144), "S11439C1.s11439c1f6");
    check_field_offset(lv, s11439c1f7, ABISELECT(208,148), "S11439C1.s11439c1f7");
  }
}
static Arrange_To_Call_Me vS11439C1(Test_S11439C1, "S11439C1", ABISELECT(224,156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11438C1  {
  ::S11441C2_nt s11438c1f0;
  void *s11438c1f1;
  int s11438c1f2;
  ::S1932C9_nt s11438c1f3;
  int s11438c1f4[5];
  void *s11438c1f5[4];
  int s11438c1f6;
  void *s11438c1f7[2];
};
//SIG(1 S11438C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi FC3{ Fl} Fi[5] Fp[4] Fi Fp[2]}



static void Test_S11438C1()
{
  {
    init_simple_test("S11438C1");
    S11438C1 lv;
    check2(sizeof(lv), ABISELECT(224,152), "sizeof(S11438C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11438C1)");
    check_field_offset(lv, s11438c1f0, 0, "S11438C1.s11438c1f0");
    check_field_offset(lv, s11438c1f1, ABISELECT(120,92), "S11438C1.s11438c1f1");
    check_field_offset(lv, s11438c1f2, ABISELECT(128,96), "S11438C1.s11438c1f2");
    check_field_offset(lv, s11438c1f3, ABISELECT(136,100), "S11438C1.s11438c1f3");
    check_field_offset(lv, s11438c1f4, ABISELECT(144,104), "S11438C1.s11438c1f4");
    check_field_offset(lv, s11438c1f5, ABISELECT(168,124), "S11438C1.s11438c1f5");
    check_field_offset(lv, s11438c1f6, ABISELECT(200,140), "S11438C1.s11438c1f6");
    check_field_offset(lv, s11438c1f7, ABISELECT(208,144), "S11438C1.s11438c1f7");
  }
}
static Arrange_To_Call_Me vS11438C1(Test_S11438C1, "S11438C1", ABISELECT(224,152));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11437C1  {
  ::S11441C2_nt s11437c1f0;
  void *s11437c1f1;
  int s11437c1f2;
  ::S1933C9_nt s11437c1f3;
  int s11437c1f4[5];
  void *s11437c1f5[4];
  int s11437c1f6;
  void *s11437c1f7;
  int s11437c1f8;
};
//SIG(1 S11437C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fi FC3{ FL} Fi[5] Fp[4] Fi Fp Fi}



static void Test_S11437C1()
{
  {
    init_simple_test("S11437C1");
    S11437C1 lv;
    check2(sizeof(lv), ABISELECT(224,156), "sizeof(S11437C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11437C1)");
    check_field_offset(lv, s11437c1f0, 0, "S11437C1.s11437c1f0");
    check_field_offset(lv, s11437c1f1, ABISELECT(120,92), "S11437C1.s11437c1f1");
    check_field_offset(lv, s11437c1f2, ABISELECT(128,96), "S11437C1.s11437c1f2");
    check_field_offset(lv, s11437c1f3, ABISELECT(136,100), "S11437C1.s11437c1f3");
    check_field_offset(lv, s11437c1f4, ABISELECT(144,108), "S11437C1.s11437c1f4");
    check_field_offset(lv, s11437c1f5, ABISELECT(168,128), "S11437C1.s11437c1f5");
    check_field_offset(lv, s11437c1f6, ABISELECT(200,144), "S11437C1.s11437c1f6");
    check_field_offset(lv, s11437c1f7, ABISELECT(208,148), "S11437C1.s11437c1f7");
    check_field_offset(lv, s11437c1f8, ABISELECT(216,152), "S11437C1.s11437c1f8");
  }
}
static Arrange_To_Call_Me vS11437C1(Test_S11437C1, "S11437C1", ABISELECT(224,156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11471C1  {
  ::S11441C2_nt s11471c1f0;
  void *s11471c1f1[2];
  int s11471c1f2;
  ::S1933C9_nt s11471c1f3;
  ::S1933C9_nt s11471c1f4;
  int s11471c1f5[2];
  void *s11471c1f6;
  int s11471c1f7;
};
//SIG(1 S11471C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp[2] Fi FC3{ FL} FC3 Fi[2] Fp Fi}



static void Test_S11471C1()
{
  {
    init_simple_test("S11471C1");
    S11471C1 lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S11471C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11471C1)");
    check_field_offset(lv, s11471c1f0, 0, "S11471C1.s11471c1f0");
    check_field_offset(lv, s11471c1f1, ABISELECT(120,92), "S11471C1.s11471c1f1");
    check_field_offset(lv, s11471c1f2, ABISELECT(136,100), "S11471C1.s11471c1f2");
    check_field_offset(lv, s11471c1f3, ABISELECT(144,104), "S11471C1.s11471c1f3");
    check_field_offset(lv, s11471c1f4, ABISELECT(152,112), "S11471C1.s11471c1f4");
    check_field_offset(lv, s11471c1f5, ABISELECT(160,120), "S11471C1.s11471c1f5");
    check_field_offset(lv, s11471c1f6, ABISELECT(168,128), "S11471C1.s11471c1f6");
    check_field_offset(lv, s11471c1f7, ABISELECT(176,132), "S11471C1.s11471c1f7");
  }
}
static Arrange_To_Call_Me vS11471C1(Test_S11471C1, "S11471C1", ABISELECT(184,136));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11470C1  {
  ::S11441C2_nt s11470c1f0;
  void *s11470c1f1[2];
  int s11470c1f2;
  ::S1932C9_nt s11470c1f3;
  ::S1932C9_nt s11470c1f4;
  int s11470c1f5[2];
  void *s11470c1f6;
  int s11470c1f7;
};
//SIG(1 S11470C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp[2] Fi FC3{ Fl} FC3 Fi[2] Fp Fi}



static void Test_S11470C1()
{
  {
    init_simple_test("S11470C1");
    S11470C1 lv;
    check2(sizeof(lv), ABISELECT(184,128), "sizeof(S11470C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11470C1)");
    check_field_offset(lv, s11470c1f0, 0, "S11470C1.s11470c1f0");
    check_field_offset(lv, s11470c1f1, ABISELECT(120,92), "S11470C1.s11470c1f1");
    check_field_offset(lv, s11470c1f2, ABISELECT(136,100), "S11470C1.s11470c1f2");
    check_field_offset(lv, s11470c1f3, ABISELECT(144,104), "S11470C1.s11470c1f3");
    check_field_offset(lv, s11470c1f4, ABISELECT(152,108), "S11470C1.s11470c1f4");
    check_field_offset(lv, s11470c1f5, ABISELECT(160,112), "S11470C1.s11470c1f5");
    check_field_offset(lv, s11470c1f6, ABISELECT(168,120), "S11470C1.s11470c1f6");
    check_field_offset(lv, s11470c1f7, ABISELECT(176,124), "S11470C1.s11470c1f7");
  }
}
static Arrange_To_Call_Me vS11470C1(Test_S11470C1, "S11470C1", ABISELECT(184,128));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11185C1  {
  ::S11542C6 s11185c1f0;
  ::S11542C7 s11185c1f1;
  char s11185c1f2[4];
};
//SIG(1 S11185C1) C1{ FC2{ Fc[36] Fi[4]} FC3{ Fc[8] FC4{ Fc[2] Fs Fc[4]}[32]} Fc[4]}



static void Test_S11185C1()
{
  {
    init_simple_test("S11185C1");
    S11185C1 lv;
    check2(sizeof(lv), 320, "sizeof(S11185C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11185C1)");
    check_field_offset(lv, s11185c1f0, 0, "S11185C1.s11185c1f0");
    check_field_offset(lv, s11185c1f1, 52, "S11185C1.s11185c1f1");
    check_field_offset(lv, s11185c1f2, 316, "S11185C1.s11185c1f2");
  }
}
static Arrange_To_Call_Me vS11185C1(Test_S11185C1, "S11185C1", 320);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11469C1  {
  ::S11441C2_nt s11469c1f0;
  void *s11469c1f1;
  __tsi64 s11469c1f2[2];
  int s11469c1f3[3];
  void *s11469c1f4;
  int s11469c1f5[2];
  void *s11469c1f6[3];
};
//SIG(1 S11469C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp FL[2] Fi[3] Fp Fi[2] Fp[3]}



static void Test_S11469C1()
{
  {
    init_simple_test("S11469C1");
    S11469C1 lv;
    check2(sizeof(lv), ABISELECT(200,148), "sizeof(S11469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11469C1)");
    check_field_offset(lv, s11469c1f0, 0, "S11469C1.s11469c1f0");
    check_field_offset(lv, s11469c1f1, ABISELECT(120,92), "S11469C1.s11469c1f1");
    check_field_offset(lv, s11469c1f2, ABISELECT(128,96), "S11469C1.s11469c1f2");
    check_field_offset(lv, s11469c1f3, ABISELECT(144,112), "S11469C1.s11469c1f3");
    check_field_offset(lv, s11469c1f4, ABISELECT(160,124), "S11469C1.s11469c1f4");
    check_field_offset(lv, s11469c1f5, ABISELECT(168,128), "S11469C1.s11469c1f5");
    check_field_offset(lv, s11469c1f6, ABISELECT(176,136), "S11469C1.s11469c1f6");
  }
}
static Arrange_To_Call_Me vS11469C1(Test_S11469C1, "S11469C1", ABISELECT(200,148));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11468C1  {
  ::S11441C2_nt s11468c1f0;
  void *s11468c1f1;
  long s11468c1f2[2];
  int s11468c1f3[3];
  void *s11468c1f4;
  int s11468c1f5[2];
  void *s11468c1f6[3];
};
//SIG(1 S11468C1) C1{ FC2{ Fi Fp[3] Fi Fp Fi[17]} Fp Fl[2] Fi[3] Fp Fi[2] Fp[3]}



static void Test_S11468C1()
{
  {
    init_simple_test("S11468C1");
    S11468C1 lv;
    check2(sizeof(lv), ABISELECT(200,140), "sizeof(S11468C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11468C1)");
    check_field_offset(lv, s11468c1f0, 0, "S11468C1.s11468c1f0");
    check_field_offset(lv, s11468c1f1, ABISELECT(120,92), "S11468C1.s11468c1f1");
    check_field_offset(lv, s11468c1f2, ABISELECT(128,96), "S11468C1.s11468c1f2");
    check_field_offset(lv, s11468c1f3, ABISELECT(144,104), "S11468C1.s11468c1f3");
    check_field_offset(lv, s11468c1f4, ABISELECT(160,116), "S11468C1.s11468c1f4");
    check_field_offset(lv, s11468c1f5, ABISELECT(168,120), "S11468C1.s11468c1f5");
    check_field_offset(lv, s11468c1f6, ABISELECT(176,128), "S11468C1.s11468c1f6");
  }
}
static Arrange_To_Call_Me vS11468C1(Test_S11468C1, "S11468C1", ABISELECT(200,140));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19467C3  : virtual S20634C3_nt {
  void *s19467c3f0;
  ~S19467C3(); // tgen
  S19467C3(); // tgen
};
//SIG(-1 S19467C3) C1{ VBC2{ m Fi[5]} Fp}


S19467C3 ::~S19467C3(){ note_dtor("S19467C3", this);} // tgen
S19467C3 ::S19467C3(){ note_ctor("S19467C3", this);} // tgen

static void Test_S19467C3()
{
  extern Class_Descriptor cd_S19467C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19467C3, buf);
    S19467C3 *dp, &lv = *(dp=new (buf) S19467C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19467C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19467C3)");
    check_base_class_offset(lv, (S20634C3_nt*), ABISELECT(16,8), "S19467C3");
    check_field_offset(lv, s19467c3f0, ABISELECT(8,4), "S19467C3.s19467c3f0");
    test_class_info(&lv, &cd_S19467C3);
    dp->~S19467C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19467C3(Test_S19467C3, "S19467C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S19467C3C1Ev();
extern void _ZN8S19467C3D1Ev();
Name_Map name_map_S19467C3[] = {
  NSPAIR(_ZN8S19467C3C1Ev),
  NSPAIR(_ZN8S19467C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
static Base_Class bases_S19467C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19467C3[];
static  VTBL_ENTRY vtc_S19467C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C3[0]),
};
extern VTBL_ENTRY _ZTV8S19467C3[];
static  VTT_ENTRY vtt_S19467C3[] = {
  {&(_ZTV8S19467C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19467C3[];
extern  VTBL_ENTRY _ZTV8S19467C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C3[];
Class_Descriptor cd_S19467C3 = {  "S19467C3", // class name
  bases_S19467C3, 1,
  &(vtc_S19467C3[0]), // expected_vtbl_contents
  &(vtt_S19467C3[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S19467C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19467C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19467C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19467C2  : S19467C3 {
  ~S19467C2(); // tgen
  S19467C2(); // tgen
};
//SIG(-1 S19467C2) C1{ BC2{ VBC3{ m Fi[5]} Fp}}


S19467C2 ::~S19467C2(){ note_dtor("S19467C2", this);} // tgen
S19467C2 ::S19467C2(){ note_ctor("S19467C2", this);} // tgen

static void Test_S19467C2()
{
  extern Class_Descriptor cd_S19467C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S19467C2, buf);
    S19467C2 *dp, &lv = *(dp=new (buf) S19467C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S19467C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19467C2)");
    check_base_class_offset(lv, (S20634C3_nt*)(S19467C3*), ABISELECT(16,8), "S19467C2");
    check_base_class_offset(lv, (S19467C3*), 0, "S19467C2");
    test_class_info(&lv, &cd_S19467C2);
    dp->~S19467C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19467C2(Test_S19467C2, "S19467C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S19467C2C1Ev();
extern void _ZN8S19467C2D1Ev();
Name_Map name_map_S19467C2[] = {
  NSPAIR(_ZN8S19467C2C1Ev),
  NSPAIR(_ZN8S19467C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S19467C3;
extern VTBL_ENTRY _ZTI8S19467C3[];
extern  VTBL_ENTRY _ZTV8S19467C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C3[];
static Base_Class bases_S19467C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19467C2[];
static  VTBL_ENTRY vtc_S19467C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C2[0]),
};
extern VTBL_ENTRY _ZTV8S19467C2[];
static  VTBL_ENTRY _tg__ZTV8S19467C3__8S19467C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C3[0]),
};
static  VTT_ENTRY vtt_S19467C2[] = {
  {&(_ZTV8S19467C2[3]),  3,3},
  {&(_tg__ZTV8S19467C3__8S19467C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19467C2[];
extern  VTBL_ENTRY _ZTV8S19467C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C2[];
Class_Descriptor cd_S19467C2 = {  "S19467C2", // class name
  bases_S19467C2, 2,
  &(vtc_S19467C2[0]), // expected_vtbl_contents
  &(vtt_S19467C2[0]), // expected_vtt_contents
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S19467C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19467C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19467C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19467C5  : virtual S2265C38 , S2265C28 {
  int s19467c5f0;
  ~S19467C5(); // tgen
  S19467C5(); // tgen
};
//SIG(-1 S19467C5) C1{ VBC2{ m} BC3{ m} Fi}


S19467C5 ::~S19467C5(){ note_dtor("S19467C5", this);} // tgen
S19467C5 ::S19467C5(){ note_ctor("S19467C5", this);} // tgen

static void Test_S19467C5()
{
  extern Class_Descriptor cd_S19467C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19467C5, buf);
    S19467C5 *dp, &lv = *(dp=new (buf) S19467C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19467C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19467C5)");
    check_base_class_offset(lv, (S2265C38*), 0, "S19467C5");
    check_base_class_offset(lv, (S2265C28*), 0, "S19467C5");
    check_field_offset(lv, s19467c5f0, ABISELECT(8,4), "S19467C5.s19467c5f0");
    test_class_info(&lv, &cd_S19467C5);
    dp->~S19467C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19467C5(Test_S19467C5, "S19467C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19467C5C1Ev();
extern void _ZN8S19467C5D1Ev();
Name_Map name_map_S19467C5[] = {
  NSPAIR(_ZN8S19467C5C1Ev),
  NSPAIR(_ZN8S19467C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
static Base_Class bases_S19467C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19467C5[];
static  VTBL_ENTRY vtc_S19467C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C5[0]),
};
extern VTBL_ENTRY _ZTV8S19467C5[];
static  VTT_ENTRY vtt_S19467C5[] = {
  {&(_ZTV8S19467C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19467C5[];
extern  VTBL_ENTRY _ZTV8S19467C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C5[];
Class_Descriptor cd_S19467C5 = {  "S19467C5", // class name
  bases_S19467C5, 2,
  &(vtc_S19467C5[0]), // expected_vtbl_contents
  &(vtt_S19467C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19467C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19467C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19467C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19467C1  : virtual S19467C2 , virtual S19467C5 {
  ::S5217C45 s19467c1f0;
  ~S19467C1(); // tgen
  S19467C1(); // tgen
};
//SIG(1 S19467C1) C1{ VBC2{ BC3{ VBC4{ m Fi[5]} Fp}} VBC5{ VBC6{ m} BC7{ m} Fi} FC8{}}


S19467C1 ::~S19467C1(){ note_dtor("S19467C1", this);} // tgen
S19467C1 ::S19467C1(){ note_ctor("S19467C1", this);} // tgen

static void Test_S19467C1()
{
  extern Class_Descriptor cd_S19467C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S19467C1, buf);
    S19467C1 *dp, &lv = *(dp=new (buf) S19467C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S19467C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19467C1)");
    check_base_class_offset(lv, (S20634C3_nt*)(S19467C3*)(S19467C2*), ABISELECT(32,16), "S19467C1");
    check_base_class_offset(lv, (S19467C3*)(S19467C2*), ABISELECT(16,8), "S19467C1");
    check_base_class_offset(lv, (S19467C2*), ABISELECT(16,8), "S19467C1");
    check_base_class_offset(lv, (S2265C38*)(S19467C5*), 0, "S19467C1");
    check_base_class_offset(lv, (S2265C28*)(S19467C5*), ABISELECT(56,36), "S19467C1");
    check_base_class_offset(lv, (S19467C5*), ABISELECT(56,36), "S19467C1");
    check_field_offset(lv, s19467c1f0, ABISELECT(8,4), "S19467C1.s19467c1f0");
    test_class_info(&lv, &cd_S19467C1);
    dp->~S19467C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19467C1(Test_S19467C1, "S19467C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S19467C1C1Ev();
extern void _ZN8S19467C1D1Ev();
Name_Map name_map_S19467C1[] = {
  NSPAIR(_ZN8S19467C1C1Ev),
  NSPAIR(_ZN8S19467C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20634C3_nt;
extern VTBL_ENTRY _ZTI11S20634C3_nt[];
extern Class_Descriptor cd_S19467C3;
extern VTBL_ENTRY _ZTI8S19467C3[];
extern  VTBL_ENTRY _ZTV8S19467C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C3[];
extern Class_Descriptor cd_S19467C2;
extern VTBL_ENTRY _ZTI8S19467C2[];
extern  VTBL_ENTRY _ZTV8S19467C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C2[];
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S2265C28;
extern VTBL_ENTRY _ZTI8S2265C28[];
extern Class_Descriptor cd_S19467C5;
extern VTBL_ENTRY _ZTI8S19467C5[];
extern  VTBL_ENTRY _ZTV8S19467C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C5[];
static Base_Class bases_S19467C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20634C3_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19467C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19467C2,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2265C28,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19467C5,    ABISELECT(56,36), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19467C1[];
static  VTBL_ENTRY vtc_S19467C1[] = {
  0,
  ABISELECT(56,36),
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C1[0]),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19467C1[0]),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19467C1[0]),
};
extern VTBL_ENTRY _ZTV8S19467C1[];
static  VTBL_ENTRY _tg__ZTV8S19467C2__8S19467C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19467C38S19467C2__8S19467C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19467C5__8S19467C1[] = {
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19467C5[0]),
};
static  VTT_ENTRY vtt_S19467C1[] = {
  {&(_ZTV8S19467C1[6]),  6,12},
  {&(_ZTV8S19467C1[9]),  9,12},
  {&(_ZTV8S19467C1[12]),  12,12},
  {&(_tg__ZTV8S19467C2__8S19467C1[3]),  3,3},
  {&(_tg__ZTV8S19467C38S19467C2__8S19467C1[3]),  3,3},
  {&(_tg__ZTV8S19467C5__8S19467C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19467C1[];
extern  VTBL_ENTRY _ZTV8S19467C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19467C1[];
Class_Descriptor cd_S19467C1 = {  "S19467C1", // class name
  bases_S19467C1, 6,
  &(vtc_S19467C1[0]), // expected_vtbl_contents
  &(vtt_S19467C1[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S19467C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19467C1),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19467C1),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5535C1  : S15099C4_nt {
  int s5535c1f0[2];
  __tsi64 s5535c1f1[2];
  int s5535c1f2[2];
  __tsi64 s5535c1f3[2];
  int s5535c1f4[2];
};
//SIG(1 S5535C1) C1{ BC2{ Fi[4] FL[3] Fc[76]} Fi[2] FL[2] Fi[2] FL[2] Fi[2]}



static void Test_S5535C1()
{
  extern Class_Descriptor cd_S5535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,44)];
    init_test(&cd_S5535C1, buf);
    S5535C1 &lv = *(new (buf) S5535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,172), "sizeof(S5535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5535C1)");
    check_base_class_offset(lv, (S15099C4_nt*), 0, "S5535C1");
    check_field_offset(lv, s5535c1f0, ABISELECT(120,116), "S5535C1.s5535c1f0");
    check_field_offset(lv, s5535c1f1, ABISELECT(128,124), "S5535C1.s5535c1f1");
    check_field_offset(lv, s5535c1f2, ABISELECT(144,140), "S5535C1.s5535c1f2");
    check_field_offset(lv, s5535c1f3, ABISELECT(152,148), "S5535C1.s5535c1f3");
    check_field_offset(lv, s5535c1f4, ABISELECT(168,164), "S5535C1.s5535c1f4");
    test_class_info(&lv, &cd_S5535C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5535C1(Test_S5535C1, "S5535C1", ABISELECT(176,172));

#else // __cplusplus

extern Class_Descriptor cd_S15099C4_nt;
static Base_Class bases_S5535C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15099C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5535C1 = {  "S5535C1", // class name
  bases_S5535C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(176,172), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8845C2_nt  {
  short s8845c2f0[3];
  __tsi64 s8845c2f1;
  virtual  ~S8845C2_nt(); // _ZN10S8845C2_ntD1Ev
  virtual void  v2(); // _ZN10S8845C2_nt2v2Ev
  S8845C2_nt(); // tgen
};
//SIG(-1 S8845C2_nt) C1{ vd v1 Fs[3] FL}


 S8845C2_nt ::~S8845C2_nt(){ note_dtor("S8845C2_nt", this);}
void  S8845C2_nt ::v2(){vfunc_called(this, "_ZN10S8845C2_nt2v2Ev");}
S8845C2_nt ::S8845C2_nt(){ note_ctor("S8845C2_nt", this);} // tgen

//skip512 S8845C2_nt

#else // __cplusplus

extern void _ZN10S8845C2_ntC1Ev();
extern void _ZN10S8845C2_ntD1Ev();
Name_Map name_map_S8845C2_nt[] = {
  NSPAIR(_ZN10S8845C2_ntC1Ev),
  NSPAIR(_ZN10S8845C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8845C2_nt[];
extern void _ZN10S8845C2_ntD1Ev();
extern void _ZN10S8845C2_ntD0Ev();
extern void _ZN10S8845C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8845C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8845C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8845C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8845C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8845C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8845C2_nt[];
VTBL_ENTRY *P__ZTI10S8845C2_nt = _ZTI10S8845C2_nt; 
extern  VTBL_ENTRY _ZTV10S8845C2_nt[];
Class_Descriptor cd_S8845C2_nt = {  "S8845C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8845C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI10S8845C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8845C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8845C3  {
  ::S17256C8 s8845c3f0;
};
//SIG(-1 S8845C3) C1{ FC2{ Fc[2] Fs Fc[4]}}



static void Test_S8845C3()
{
  {
    init_simple_test("S8845C3");
    S8845C3 lv;
    check2(sizeof(lv), 8, "sizeof(S8845C3)");
    check2(__alignof__(lv), 2, "__alignof__(S8845C3)");
    check_field_offset(lv, s8845c3f0, 0, "S8845C3.s8845c3f0");
  }
}
static Arrange_To_Call_Me vS8845C3(Test_S8845C3, "S8845C3", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8845C1  : S8845C2_nt {
  ::S8845C3 s8845c1f0;
  virtual  ~S8845C1(); // _ZN7S8845C1D1Ev
  virtual void  v1(); // _ZN7S8845C12v1Ev
  S8845C1(); // tgen
};
//SIG(1 S8845C1) C1{ BC2{ vd v2 Fs[3] FL} vd v1 FC3{ FC4{ Fc[2] Fs Fc[4]}}}


 S8845C1 ::~S8845C1(){ note_dtor("S8845C1", this);}
void  S8845C1 ::v1(){vfunc_called(this, "_ZN7S8845C12v1Ev");}
S8845C1 ::S8845C1(){ note_ctor("S8845C1", this);} // tgen

static void Test_S8845C1()
{
  extern Class_Descriptor cd_S8845C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S8845C1, buf);
    S8845C1 *dp, &lv = *(dp=new (buf) S8845C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S8845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8845C1)");
    check_base_class_offset(lv, (S8845C2_nt*), 0, "S8845C1");
    check_field_offset(lv, s8845c1f0, ABISELECT(24,20), "S8845C1.s8845c1f0");
    test_class_info(&lv, &cd_S8845C1);
    dp->~S8845C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8845C1(Test_S8845C1, "S8845C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S8845C1C1Ev();
extern void _ZN7S8845C1D1Ev();
Name_Map name_map_S8845C1[] = {
  NSPAIR(_ZN7S8845C1C1Ev),
  NSPAIR(_ZN7S8845C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8845C2_nt;
extern VTBL_ENTRY _ZTI10S8845C2_nt[];
extern  VTBL_ENTRY _ZTV10S8845C2_nt[];
static Base_Class bases_S8845C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8845C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8845C1[];
extern void _ZN7S8845C1D1Ev();
extern void _ZN7S8845C1D0Ev();
extern void _ZN10S8845C2_nt2v2Ev();
extern void _ZN7S8845C12v1Ev();
static  VTBL_ENTRY vtc_S8845C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8845C1[0]),
  (VTBL_ENTRY)&_ZN7S8845C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8845C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8845C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8845C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8845C1[];
extern  VTBL_ENTRY _ZTV7S8845C1[];
Class_Descriptor cd_S8845C1 = {  "S8845C1", // class name
  bases_S8845C1, 1,
  &(vtc_S8845C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S8845C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8845C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8844C2_nt  {
  short s8844c2f0[3];
  long s8844c2f1;
  virtual  ~S8844C2_nt(); // _ZN10S8844C2_ntD1Ev
  virtual void  v2(); // _ZN10S8844C2_nt2v2Ev
  S8844C2_nt(); // tgen
};
//SIG(-1 S8844C2_nt) C1{ vd v1 Fs[3] Fl}


 S8844C2_nt ::~S8844C2_nt(){ note_dtor("S8844C2_nt", this);}
void  S8844C2_nt ::v2(){vfunc_called(this, "_ZN10S8844C2_nt2v2Ev");}
S8844C2_nt ::S8844C2_nt(){ note_ctor("S8844C2_nt", this);} // tgen

//skip512 S8844C2_nt

#else // __cplusplus

extern void _ZN10S8844C2_ntC1Ev();
extern void _ZN10S8844C2_ntD1Ev();
Name_Map name_map_S8844C2_nt[] = {
  NSPAIR(_ZN10S8844C2_ntC1Ev),
  NSPAIR(_ZN10S8844C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8844C2_nt[];
extern void _ZN10S8844C2_ntD1Ev();
extern void _ZN10S8844C2_ntD0Ev();
extern void _ZN10S8844C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8844C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8844C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8844C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8844C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8844C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8844C2_nt[];
VTBL_ENTRY *P__ZTI10S8844C2_nt = _ZTI10S8844C2_nt; 
extern  VTBL_ENTRY _ZTV10S8844C2_nt[];
Class_Descriptor cd_S8844C2_nt = {  "S8844C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8844C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI10S8844C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8844C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8844C1  : S8844C2_nt {
  ::S8845C3 s8844c1f0;
  virtual  ~S8844C1(); // _ZN7S8844C1D1Ev
  virtual void  v1(); // _ZN7S8844C12v1Ev
  S8844C1(); // tgen
};
//SIG(1 S8844C1) C1{ BC2{ vd v2 Fs[3] Fl} vd v1 FC3{ FC4{ Fc[2] Fs Fc[4]}}}


 S8844C1 ::~S8844C1(){ note_dtor("S8844C1", this);}
void  S8844C1 ::v1(){vfunc_called(this, "_ZN7S8844C12v1Ev");}
S8844C1 ::S8844C1(){ note_ctor("S8844C1", this);} // tgen

static void Test_S8844C1()
{
  extern Class_Descriptor cd_S8844C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S8844C1, buf);
    S8844C1 *dp, &lv = *(dp=new (buf) S8844C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S8844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8844C1)");
    check_base_class_offset(lv, (S8844C2_nt*), 0, "S8844C1");
    check_field_offset(lv, s8844c1f0, ABISELECT(24,16), "S8844C1.s8844c1f0");
    test_class_info(&lv, &cd_S8844C1);
    dp->~S8844C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8844C1(Test_S8844C1, "S8844C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S8844C1C1Ev();
extern void _ZN7S8844C1D1Ev();
Name_Map name_map_S8844C1[] = {
  NSPAIR(_ZN7S8844C1C1Ev),
  NSPAIR(_ZN7S8844C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8844C2_nt;
extern VTBL_ENTRY _ZTI10S8844C2_nt[];
extern  VTBL_ENTRY _ZTV10S8844C2_nt[];
static Base_Class bases_S8844C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8844C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8844C1[];
extern void _ZN7S8844C1D1Ev();
extern void _ZN7S8844C1D0Ev();
extern void _ZN10S8844C2_nt2v2Ev();
extern void _ZN7S8844C12v1Ev();
static  VTBL_ENTRY vtc_S8844C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8844C1[0]),
  (VTBL_ENTRY)&_ZN7S8844C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8844C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8844C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8844C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8844C1[];
extern  VTBL_ENTRY _ZTV7S8844C1[];
Class_Descriptor cd_S8844C1 = {  "S8844C1", // class name
  bases_S8844C1, 1,
  &(vtc_S8844C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S8844C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8844C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10624C1  {
  char s10624c1f0[16];
  __tsi64 s10624c1f1[2];
  char s10624c1f2[64];
  ::S17256C8 s10624c1f3[16];
};
//SIG(1 S10624C1) C1{ Fc[16] FL[2] Fc[64] FC2{ Fc[2] Fs Fc[4]}[16]}



static void Test_S10624C1()
{
  {
    init_simple_test("S10624C1");
    S10624C1 lv;
    check2(sizeof(lv), 224, "sizeof(S10624C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10624C1)");
    check_field_offset(lv, s10624c1f0, 0, "S10624C1.s10624c1f0");
    check_field_offset(lv, s10624c1f1, 16, "S10624C1.s10624c1f1");
    check_field_offset(lv, s10624c1f2, 32, "S10624C1.s10624c1f2");
    check_field_offset(lv, s10624c1f3, 96, "S10624C1.s10624c1f3");
  }
}
static Arrange_To_Call_Me vS10624C1(Test_S10624C1, "S10624C1", 224);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18253C3  {
  char s18253c3f0;
  __tsi64 s18253c3f1[2];
  int s18253c3f2[5];
};
//SIG(-1 S18253C3) C1{ Fc FL[2] Fi[5]}



static void Test_S18253C3()
{
  {
    init_simple_test("S18253C3");
    S18253C3 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S18253C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18253C3)");
    check_field_offset(lv, s18253c3f0, 0, "S18253C3.s18253c3f0");
    check_field_offset(lv, s18253c3f1, ABISELECT(8,4), "S18253C3.s18253c3f1");
    check_field_offset(lv, s18253c3f2, ABISELECT(24,20), "S18253C3.s18253c3f2");
  }
}
static Arrange_To_Call_Me vS18253C3(Test_S18253C3, "S18253C3", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18253C2  {
  __tsi64 s18253c2f0;
  ::S18253C3 s18253c2f1;
  void  mf18253c2(); // _ZN8S18253C29mf18253c2Ev
};
//SIG(-1 S18253C2) C1{ m FL FC2{ Fc FL[2] Fi[5]}}


void  S18253C2 ::mf18253c2(){}

static void Test_S18253C2()
{
  {
    init_simple_test("S18253C2");
    S18253C2 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S18253C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18253C2)");
    check_field_offset(lv, s18253c2f0, 0, "S18253C2.s18253c2f0");
    check_field_offset(lv, s18253c2f1, 8, "S18253C2.s18253c2f1");
  }
}
static Arrange_To_Call_Me vS18253C2(Test_S18253C2, "S18253C2", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18253C1  {
  void *s18253c1f0[3];
  ::S18253C2 s18253c1f1;
  char s18253c1f2[2];
  void  mf18253c1(); // _ZN8S18253C19mf18253c1Ev
};
//SIG(1 S18253C1) C1{ m Fp[3] FC2{ m FL FC3{ Fc FL[2] Fi[5]}} Fc[2]}


void  S18253C1 ::mf18253c1(){}

static void Test_S18253C1()
{
  {
    init_simple_test("S18253C1");
    S18253C1 lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S18253C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18253C1)");
    check_field_offset(lv, s18253c1f0, 0, "S18253C1.s18253c1f0");
    check_field_offset(lv, s18253c1f1, ABISELECT(24,12), "S18253C1.s18253c1f1");
    check_field_offset(lv, s18253c1f2, ABISELECT(80,60), "S18253C1.s18253c1f2");
  }
}
static Arrange_To_Call_Me vS18253C1(Test_S18253C1, "S18253C1", ABISELECT(88,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14628C1  {
  void *s14628c1f0[3];
  int s14628c1f1[3];
  char s14628c1f2[9];
  void *s14628c1f3[2];
  __tsi64 s14628c1f4[3];
  int s14628c1f5[3];
  void *s14628c1f6[3];
};
//SIG(1 S14628C1) C1{ Fp[3] Fi[3] Fc[9] Fp[2] FL[3] Fi[3] Fp[3]}



static void Test_S14628C1()
{
  {
    init_simple_test("S14628C1");
    S14628C1 lv;
    check2(sizeof(lv), ABISELECT(128,92), "sizeof(S14628C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14628C1)");
    check_field_offset(lv, s14628c1f0, 0, "S14628C1.s14628c1f0");
    check_field_offset(lv, s14628c1f1, ABISELECT(24,12), "S14628C1.s14628c1f1");
    check_field_offset(lv, s14628c1f2, ABISELECT(36,24), "S14628C1.s14628c1f2");
    check_field_offset(lv, s14628c1f3, ABISELECT(48,36), "S14628C1.s14628c1f3");
    check_field_offset(lv, s14628c1f4, ABISELECT(64,44), "S14628C1.s14628c1f4");
    check_field_offset(lv, s14628c1f5, ABISELECT(88,68), "S14628C1.s14628c1f5");
    check_field_offset(lv, s14628c1f6, ABISELECT(104,80), "S14628C1.s14628c1f6");
  }
}
static Arrange_To_Call_Me vS14628C1(Test_S14628C1, "S14628C1", ABISELECT(128,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8795C2_nt  {
  void *s8795c2f0;
  int s8795c2f1;
  virtual  ~S8795C2_nt(); // _ZN10S8795C2_ntD1Ev
  virtual void  v2(); // _ZN10S8795C2_nt2v2Ev
  S8795C2_nt(); // tgen
};
//SIG(-1 S8795C2_nt) C1{ vd v1 Fp Fi}


 S8795C2_nt ::~S8795C2_nt(){ note_dtor("S8795C2_nt", this);}
void  S8795C2_nt ::v2(){vfunc_called(this, "_ZN10S8795C2_nt2v2Ev");}
S8795C2_nt ::S8795C2_nt(){ note_ctor("S8795C2_nt", this);} // tgen

//skip512 S8795C2_nt

#else // __cplusplus

extern void _ZN10S8795C2_ntC1Ev();
extern void _ZN10S8795C2_ntD1Ev();
Name_Map name_map_S8795C2_nt[] = {
  NSPAIR(_ZN10S8795C2_ntC1Ev),
  NSPAIR(_ZN10S8795C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8795C2_nt[];
extern void _ZN10S8795C2_ntD1Ev();
extern void _ZN10S8795C2_ntD0Ev();
extern void _ZN10S8795C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8795C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8795C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8795C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8795C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8795C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8795C2_nt[];
VTBL_ENTRY *P__ZTI10S8795C2_nt = _ZTI10S8795C2_nt; 
extern  VTBL_ENTRY _ZTV10S8795C2_nt[];
Class_Descriptor cd_S8795C2_nt = {  "S8795C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8795C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8795C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8795C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8795C1  : S8795C2_nt {
  ::S21540C7_nt s8795c1f0;
  virtual  ~S8795C1(); // _ZN7S8795C1D1Ev
  virtual void  v1(); // _ZN7S8795C12v1Ev
  S8795C1(); // tgen
};
//SIG(1 S8795C1) C1{ BC2{ vd v2 Fp Fi} vd v1 FC3{ m Fp Fi FC4{ m}}}


 S8795C1 ::~S8795C1(){ note_dtor("S8795C1", this);}
void  S8795C1 ::v1(){vfunc_called(this, "_ZN7S8795C12v1Ev");}
S8795C1 ::S8795C1(){ note_ctor("S8795C1", this);} // tgen

static void Test_S8795C1()
{
  extern Class_Descriptor cd_S8795C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S8795C1, buf);
    S8795C1 *dp, &lv = *(dp=new (buf) S8795C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S8795C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8795C1)");
    check_base_class_offset(lv, (S8795C2_nt*), 0, "S8795C1");
    check_field_offset(lv, s8795c1f0, ABISELECT(24,12), "S8795C1.s8795c1f0");
    test_class_info(&lv, &cd_S8795C1);
    dp->~S8795C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8795C1(Test_S8795C1, "S8795C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S8795C1C1Ev();
extern void _ZN7S8795C1D1Ev();
Name_Map name_map_S8795C1[] = {
  NSPAIR(_ZN7S8795C1C1Ev),
  NSPAIR(_ZN7S8795C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8795C2_nt;
extern VTBL_ENTRY _ZTI10S8795C2_nt[];
extern  VTBL_ENTRY _ZTV10S8795C2_nt[];
static Base_Class bases_S8795C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8795C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8795C1[];
extern void _ZN7S8795C1D1Ev();
extern void _ZN7S8795C1D0Ev();
extern void _ZN10S8795C2_nt2v2Ev();
extern void _ZN7S8795C12v1Ev();
static  VTBL_ENTRY vtc_S8795C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8795C1[0]),
  (VTBL_ENTRY)&_ZN7S8795C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8795C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8795C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8795C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8795C1[];
extern  VTBL_ENTRY _ZTV7S8795C1[];
Class_Descriptor cd_S8795C1 = {  "S8795C1", // class name
  bases_S8795C1, 1,
  &(vtc_S8795C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S8795C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8795C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5542C2_nt  {
  int s5542c2f0;
};
//SIG(-1 S5542C2_nt) C1{ Fi}



//skip512 S5542C2_nt

#else // __cplusplus

Class_Descriptor cd_S5542C2_nt = {  "S5542C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5542C3_nt  {
  short s5542c3f0;
};
//SIG(-1 S5542C3_nt) C1{ Fs}



//skip512 S5542C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5542C1  : S5542C2_nt {
  int s5542c1f0;
  short s5542c1f1[2];
  char s5542c1f2[4];
  ::S5542C3_nt s5542c1f3;
  char s5542c1f4;
  __tsi64 s5542c1f5;
  void *s5542c1f6;
  int s5542c1f7;
};
//SIG(1 S5542C1) C1{ BC2{ Fi} Fi Fs[2] Fc[4] FC3{ Fs} Fc FL Fp Fi}



static void Test_S5542C1()
{
  extern Class_Descriptor cd_S5542C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S5542C1, buf);
    S5542C1 &lv = *(new (buf) S5542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S5542C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5542C1)");
    check_base_class_offset(lv, (S5542C2_nt*), 0, "S5542C1");
    check_field_offset(lv, s5542c1f0, 4, "S5542C1.s5542c1f0");
    check_field_offset(lv, s5542c1f1, 8, "S5542C1.s5542c1f1");
    check_field_offset(lv, s5542c1f2, 12, "S5542C1.s5542c1f2");
    check_field_offset(lv, s5542c1f3, 16, "S5542C1.s5542c1f3");
    check_field_offset(lv, s5542c1f4, 18, "S5542C1.s5542c1f4");
    check_field_offset(lv, s5542c1f5, ABISELECT(24,20), "S5542C1.s5542c1f5");
    check_field_offset(lv, s5542c1f6, ABISELECT(32,28), "S5542C1.s5542c1f6");
    check_field_offset(lv, s5542c1f7, ABISELECT(40,32), "S5542C1.s5542c1f7");
    test_class_info(&lv, &cd_S5542C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5542C1(Test_S5542C1, "S5542C1", ABISELECT(48,36));

#else // __cplusplus

extern Class_Descriptor cd_S5542C2_nt;
static Base_Class bases_S5542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5542C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5542C1 = {  "S5542C1", // class name
  bases_S5542C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3927C3_nt  {
  __tsi64 s3927c3f0;
  void  mf3927c3(); // _ZN10S3927C3_nt8mf3927c3Ev
  virtual  ~S3927C3_nt(); // _ZN10S3927C3_ntD1Ev
  S3927C3_nt(); // tgen
};
//SIG(-1 S3927C3_nt) C1{ vd m FL}


void  S3927C3_nt ::mf3927c3(){}
 S3927C3_nt ::~S3927C3_nt(){ note_dtor("S3927C3_nt", this);}
S3927C3_nt ::S3927C3_nt(){ note_ctor("S3927C3_nt", this);} // tgen

//skip512 S3927C3_nt

#else // __cplusplus

extern void _ZN10S3927C3_ntC1Ev();
extern void _ZN10S3927C3_ntD1Ev();
Name_Map name_map_S3927C3_nt[] = {
  NSPAIR(_ZN10S3927C3_ntC1Ev),
  NSPAIR(_ZN10S3927C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3927C3_nt[];
extern void _ZN10S3927C3_ntD1Ev();
extern void _ZN10S3927C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3927C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3927C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3927C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3927C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3927C3_nt[];
VTBL_ENTRY *P__ZTI10S3927C3_nt = _ZTI10S3927C3_nt; 
extern  VTBL_ENTRY _ZTV10S3927C3_nt[];
Class_Descriptor cd_S3927C3_nt = {  "S3927C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3927C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3927C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3927C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3927C2_nt  : S3927C3_nt {
  int s3927c2f0[3];
  virtual  ~S3927C2_nt(); // _ZN10S3927C2_ntD1Ev
  S3927C2_nt(); // tgen
};
//SIG(-1 S3927C2_nt) C1{ BC2{ vd m FL} vd Fi[3]}


 S3927C2_nt ::~S3927C2_nt(){ note_dtor("S3927C2_nt", this);}
S3927C2_nt ::S3927C2_nt(){ note_ctor("S3927C2_nt", this);} // tgen

//skip512 S3927C2_nt

#else // __cplusplus

extern void _ZN10S3927C2_ntC1Ev();
extern void _ZN10S3927C2_ntD1Ev();
Name_Map name_map_S3927C2_nt[] = {
  NSPAIR(_ZN10S3927C2_ntC1Ev),
  NSPAIR(_ZN10S3927C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3927C3_nt;
extern VTBL_ENTRY _ZTI10S3927C3_nt[];
extern  VTBL_ENTRY _ZTV10S3927C3_nt[];
static Base_Class bases_S3927C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3927C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3927C2_nt[];
extern void _ZN10S3927C2_ntD1Ev();
extern void _ZN10S3927C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3927C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3927C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3927C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3927C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3927C2_nt[];
VTBL_ENTRY *P__ZTI10S3927C2_nt = _ZTI10S3927C2_nt; 
extern  VTBL_ENTRY _ZTV10S3927C2_nt[];
Class_Descriptor cd_S3927C2_nt = {  "S3927C2_nt", // class name
  bases_S3927C2_nt, 1,
  &(vtc_S3927C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI10S3927C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3927C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3927C1  : S3927C2_nt {
  ::S19859C6 s3927c1f0;
  virtual  ~S3927C1(); // _ZN7S3927C1D1Ev
  S3927C1(); // tgen
};
//SIG(1 S3927C1) C1{ BC2{ BC3{ vd m FL} vd Fi[3]} vd FC4{ vd m Fs}}


 S3927C1 ::~S3927C1(){ note_dtor("S3927C1", this);}
S3927C1 ::S3927C1(){ note_ctor("S3927C1", this);} // tgen

static void Test_S3927C1()
{
  extern Class_Descriptor cd_S3927C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S3927C1, buf);
    S3927C1 *dp, &lv = *(dp=new (buf) S3927C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S3927C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3927C1)");
    check_base_class_offset(lv, (S3927C3_nt*)(S3927C2_nt*), 0, "S3927C1");
    check_base_class_offset(lv, (S3927C2_nt*), 0, "S3927C1");
    check_field_offset(lv, s3927c1f0, ABISELECT(32,24), "S3927C1.s3927c1f0");
    test_class_info(&lv, &cd_S3927C1);
    dp->~S3927C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3927C1(Test_S3927C1, "S3927C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S3927C1C1Ev();
extern void _ZN7S3927C1D1Ev();
Name_Map name_map_S3927C1[] = {
  NSPAIR(_ZN7S3927C1C1Ev),
  NSPAIR(_ZN7S3927C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3927C3_nt;
extern VTBL_ENTRY _ZTI10S3927C3_nt[];
extern  VTBL_ENTRY _ZTV10S3927C3_nt[];
extern Class_Descriptor cd_S3927C2_nt;
extern VTBL_ENTRY _ZTI10S3927C2_nt[];
extern  VTBL_ENTRY _ZTV10S3927C2_nt[];
static Base_Class bases_S3927C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3927C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3927C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3927C1[];
extern void _ZN7S3927C1D1Ev();
extern void _ZN7S3927C1D0Ev();
static  VTBL_ENTRY vtc_S3927C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3927C1[0]),
  (VTBL_ENTRY)&_ZN7S3927C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3927C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3927C1[];
extern  VTBL_ENTRY _ZTV7S3927C1[];
Class_Descriptor cd_S3927C1 = {  "S3927C1", // class name
  bases_S3927C1, 2,
  &(vtc_S3927C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S3927C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3927C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14125C1  {
  void *s14125c1f0;
  ::S11534C3 s14125c1f1;
  ::S11534C3 s14125c1f2;
  ::S11534C3 s14125c1f3;
  int s14125c1f4;
  char s14125c1f5[128];
};
//SIG(1 S14125C1) C1{ Fp FC2{ Fp[2] Fl Fp[3]} FC2 FC2 Fi Fc[128]}



static void Test_S14125C1()
{
  {
    init_simple_test("S14125C1");
    S14125C1 lv;
    check2(sizeof(lv), ABISELECT(288,208), "sizeof(S14125C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14125C1)");
    check_field_offset(lv, s14125c1f0, 0, "S14125C1.s14125c1f0");
    check_field_offset(lv, s14125c1f1, ABISELECT(8,4), "S14125C1.s14125c1f1");
    check_field_offset(lv, s14125c1f2, ABISELECT(56,28), "S14125C1.s14125c1f2");
    check_field_offset(lv, s14125c1f3, ABISELECT(104,52), "S14125C1.s14125c1f3");
    check_field_offset(lv, s14125c1f4, ABISELECT(152,76), "S14125C1.s14125c1f4");
    check_field_offset(lv, s14125c1f5, ABISELECT(156,80), "S14125C1.s14125c1f5");
  }
}
static Arrange_To_Call_Me vS14125C1(Test_S14125C1, "S14125C1", ABISELECT(288,208));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9063C2  {
  virtual  ~S9063C2(); // _ZN7S9063C2D1Ev
  virtual void  v2(); // _ZN7S9063C22v2Ev
  S9063C2(); // tgen
};
//SIG(-1 S9063C2) C1{ vd v1}


 S9063C2 ::~S9063C2(){ note_dtor("S9063C2", this);}
void  S9063C2 ::v2(){vfunc_called(this, "_ZN7S9063C22v2Ev");}
S9063C2 ::S9063C2(){ note_ctor("S9063C2", this);} // tgen

static void Test_S9063C2()
{
  extern Class_Descriptor cd_S9063C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9063C2, buf);
    S9063C2 *dp, &lv = *(dp=new (buf) S9063C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9063C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9063C2)");
    test_class_info(&lv, &cd_S9063C2);
    dp->~S9063C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9063C2(Test_S9063C2, "S9063C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9063C2C1Ev();
extern void _ZN7S9063C2D1Ev();
Name_Map name_map_S9063C2[] = {
  NSPAIR(_ZN7S9063C2C1Ev),
  NSPAIR(_ZN7S9063C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9063C2[];
extern void _ZN7S9063C2D1Ev();
extern void _ZN7S9063C2D0Ev();
extern void _ZN7S9063C22v2Ev();
static  VTBL_ENTRY vtc_S9063C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9063C2[0]),
  (VTBL_ENTRY)&_ZN7S9063C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9063C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9063C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9063C2[];
extern  VTBL_ENTRY _ZTV7S9063C2[];
Class_Descriptor cd_S9063C2 = {  "S9063C2", // class name
  0,0,//no base classes
  &(vtc_S9063C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9063C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9063C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9063C1  : S9063C2 {
  ::S2265C37 s9063c1f0;
  virtual  ~S9063C1(); // _ZN7S9063C1D1Ev
  virtual void  v1(); // _ZN7S9063C12v1Ev
  S9063C1(); // tgen
};
//SIG(1 S9063C1) C1{ BC2{ vd v2} vd v1 FC3{ m Fp Fi[2] FC4{ m}}}


 S9063C1 ::~S9063C1(){ note_dtor("S9063C1", this);}
void  S9063C1 ::v1(){vfunc_called(this, "_ZN7S9063C12v1Ev");}
S9063C1 ::S9063C1(){ note_ctor("S9063C1", this);} // tgen

static void Test_S9063C1()
{
  extern Class_Descriptor cd_S9063C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S9063C1, buf);
    S9063C1 *dp, &lv = *(dp=new (buf) S9063C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S9063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9063C1)");
    check_base_class_offset(lv, (S9063C2*), 0, "S9063C1");
    check_field_offset(lv, s9063c1f0, ABISELECT(8,4), "S9063C1.s9063c1f0");
    test_class_info(&lv, &cd_S9063C1);
    dp->~S9063C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9063C1(Test_S9063C1, "S9063C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S9063C1C1Ev();
extern void _ZN7S9063C1D1Ev();
Name_Map name_map_S9063C1[] = {
  NSPAIR(_ZN7S9063C1C1Ev),
  NSPAIR(_ZN7S9063C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9063C2;
extern VTBL_ENTRY _ZTI7S9063C2[];
extern  VTBL_ENTRY _ZTV7S9063C2[];
static Base_Class bases_S9063C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9063C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9063C1[];
extern void _ZN7S9063C1D1Ev();
extern void _ZN7S9063C1D0Ev();
extern void _ZN7S9063C22v2Ev();
extern void _ZN7S9063C12v1Ev();
static  VTBL_ENTRY vtc_S9063C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9063C1[0]),
  (VTBL_ENTRY)&_ZN7S9063C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9063C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9063C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9063C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9063C1[];
extern  VTBL_ENTRY _ZTV7S9063C1[];
Class_Descriptor cd_S9063C1 = {  "S9063C1", // class name
  bases_S9063C1, 1,
  &(vtc_S9063C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S9063C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9063C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5452C2_nt  : S5217C45 {
  int s5452c2f0;
};
//SIG(-1 S5452C2_nt) C1{ BC2{} Fi}



//skip512 S5452C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S5217C45;
extern VTBL_ENTRY _ZTI8S5217C45[];
static Base_Class bases_S5452C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C45,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5452C2_nt[];
VTBL_ENTRY *P__ZTI10S5452C2_nt = _ZTI10S5452C2_nt; 
Class_Descriptor cd_S5452C2_nt = {  "S5452C2_nt", // class name
  bases_S5452C2_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S5452C2_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5452C1  : S5452C2_nt {
  ::S21540C7_nt s5452c1f0;
  ::S21540C7_nt s5452c1f1;
  virtual  ~S5452C1(); // _ZN7S5452C1D1Ev
  S5452C1(); // tgen
};
//SIG(1 S5452C1) C1{ BC2{ BC3{} Fi} vd FC4{ m Fp Fi FC5{ m}} FC4}


 S5452C1 ::~S5452C1(){ note_dtor("S5452C1", this);}
S5452C1 ::S5452C1(){ note_ctor("S5452C1", this);} // tgen

static void Test_S5452C1()
{
  extern Class_Descriptor cd_S5452C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5452C1, buf);
    S5452C1 *dp, &lv = *(dp=new (buf) S5452C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5452C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5452C1)");
    check_base_class_offset(lv, (S5217C45*)(S5452C2_nt*), ABISELECT(8,4), "S5452C1");
    check_base_class_offset(lv, (S5452C2_nt*), ABISELECT(8,4), "S5452C1");
    check_field_offset(lv, s5452c1f0, ABISELECT(16,8), "S5452C1.s5452c1f0");
    check_field_offset(lv, s5452c1f1, ABISELECT(32,20), "S5452C1.s5452c1f1");
    test_class_info(&lv, &cd_S5452C1);
    dp->~S5452C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5452C1(Test_S5452C1, "S5452C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5452C1C1Ev();
extern void _ZN7S5452C1D1Ev();
Name_Map name_map_S5452C1[] = {
  NSPAIR(_ZN7S5452C1C1Ev),
  NSPAIR(_ZN7S5452C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5217C45;
extern VTBL_ENTRY _ZTI8S5217C45[];
extern Class_Descriptor cd_S5452C2_nt;
extern VTBL_ENTRY _ZTI10S5452C2_nt[];
static Base_Class bases_S5452C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5217C45,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5452C2_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5452C1[];
extern void _ZN7S5452C1D1Ev();
extern void _ZN7S5452C1D0Ev();
static  VTBL_ENTRY vtc_S5452C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5452C1[0]),
  (VTBL_ENTRY)&_ZN7S5452C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5452C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S5452C1[];
extern  VTBL_ENTRY _ZTV7S5452C1[];
Class_Descriptor cd_S5452C1 = {  "S5452C1", // class name
  bases_S5452C1, 2,
  &(vtc_S5452C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5452C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5452C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15533C2  {
  ::S21540C7_nt s15533c2f0;
  ::S21540C7_nt s15533c2f1;
  ::S21540C7_nt s15533c2f2;
};
//SIG(1 S15533C2) C1{ FC2{ m Fp Fi FC3{ m}} FC2 FC2}



static void Test_S15533C2()
{
  {
    init_simple_test("S15533C2");
    S15533C2 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S15533C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15533C2)");
    check_field_offset(lv, s15533c2f0, 0, "S15533C2.s15533c2f0");
    check_field_offset(lv, s15533c2f1, ABISELECT(16,12), "S15533C2.s15533c2f1");
    check_field_offset(lv, s15533c2f2, ABISELECT(32,24), "S15533C2.s15533c2f2");
  }
}
static Arrange_To_Call_Me vS15533C2(Test_S15533C2, "S15533C2", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15533C1  {
  ::S15533C2 s15533c1f0[20];
  void  mf15533c1(); // _ZN8S15533C19mf15533c1Ev
};
//SIG(1 S15533C1) C1{ m FC2{ FC3{ m Fp Fi FC4{ m}} FC3 FC3}[20]}


void  S15533C1 ::mf15533c1(){}

static void Test_S15533C1()
{
  {
    init_simple_test("S15533C1");
    S15533C1 lv;
    check2(sizeof(lv), ABISELECT(960,720), "sizeof(S15533C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15533C1)");
    check_field_offset(lv, s15533c1f0, 0, "S15533C1.s15533c1f0");
  }
}
static Arrange_To_Call_Me vS15533C1(Test_S15533C1, "S15533C1", ABISELECT(960,720));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11635C1  {
  ::S15099C4_nt s11635c1f0;
  short s11635c1f1[2];
  char s11635c1f2[128];
};
//SIG(1 S11635C1) C1{ FC2{ Fi[4] FL[3] Fc[76]} Fs[2] Fc[128]}



static void Test_S11635C1()
{
  {
    init_simple_test("S11635C1");
    S11635C1 lv;
    check2(sizeof(lv), ABISELECT(256,248), "sizeof(S11635C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11635C1)");
    check_field_offset(lv, s11635c1f0, 0, "S11635C1.s11635c1f0");
    check_field_offset(lv, s11635c1f1, ABISELECT(120,116), "S11635C1.s11635c1f1");
    check_field_offset(lv, s11635c1f2, ABISELECT(124,120), "S11635C1.s11635c1f2");
  }
}
static Arrange_To_Call_Me vS11635C1(Test_S11635C1, "S11635C1", ABISELECT(256,248));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14394C1  {
  void *s14394c1f0;
  __tsi64 s14394c1f1;
  short s14394c1f2[2];
  int s14394c1f3;
  ::S17256C8 s14394c1f4;
  void *s14394c1f5;
};
//SIG(1 S14394C1) C1{ Fp FL Fs[2] Fi FC2{ Fc[2] Fs Fc[4]} Fp}



static void Test_S14394C1()
{
  {
    init_simple_test("S14394C1");
    S14394C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S14394C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14394C1)");
    check_field_offset(lv, s14394c1f0, 0, "S14394C1.s14394c1f0");
    check_field_offset(lv, s14394c1f1, ABISELECT(8,4), "S14394C1.s14394c1f1");
    check_field_offset(lv, s14394c1f2, ABISELECT(16,12), "S14394C1.s14394c1f2");
    check_field_offset(lv, s14394c1f3, ABISELECT(20,16), "S14394C1.s14394c1f3");
    check_field_offset(lv, s14394c1f4, ABISELECT(24,20), "S14394C1.s14394c1f4");
    check_field_offset(lv, s14394c1f5, ABISELECT(32,28), "S14394C1.s14394c1f5");
  }
}
static Arrange_To_Call_Me vS14394C1(Test_S14394C1, "S14394C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14393C1  {
  void *s14393c1f0;
  long s14393c1f1;
  short s14393c1f2[2];
  int s14393c1f3;
  ::S17256C8 s14393c1f4;
  void *s14393c1f5;
};
//SIG(1 S14393C1) C1{ Fp Fl Fs[2] Fi FC2{ Fc[2] Fs Fc[4]} Fp}



static void Test_S14393C1()
{
  {
    init_simple_test("S14393C1");
    S14393C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14393C1)");
    check_field_offset(lv, s14393c1f0, 0, "S14393C1.s14393c1f0");
    check_field_offset(lv, s14393c1f1, ABISELECT(8,4), "S14393C1.s14393c1f1");
    check_field_offset(lv, s14393c1f2, ABISELECT(16,8), "S14393C1.s14393c1f2");
    check_field_offset(lv, s14393c1f3, ABISELECT(20,12), "S14393C1.s14393c1f3");
    check_field_offset(lv, s14393c1f4, ABISELECT(24,16), "S14393C1.s14393c1f4");
    check_field_offset(lv, s14393c1f5, ABISELECT(32,24), "S14393C1.s14393c1f5");
  }
}
static Arrange_To_Call_Me vS14393C1(Test_S14393C1, "S14393C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15573C2_nt  {
  __tsi64 s15573c2f0;
  int s15573c2f1[2];
};
//SIG(1 S15573C2_nt) C1{ FL Fi[2]}



//skip512 S15573C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15573C1  {
  ::S15573C2_nt s15573c1f0[200];
  void *s15573c1f1[200];
  int s15573c1f2[4];
  void  mf15573c1(); // _ZN8S15573C19mf15573c1Ev
};
//SIG(1 S15573C1) C1{ m FC2{ FL Fi[2]}[200] Fp[200] Fi[4]}


void  S15573C1 ::mf15573c1(){}

static void Test_S15573C1()
{
  {
    init_simple_test("S15573C1");
    S15573C1 lv;
    check2(sizeof(lv), ABISELECT(4816,4016), "sizeof(S15573C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15573C1)");
    check_field_offset(lv, s15573c1f0, 0, "S15573C1.s15573c1f0");
    check_field_offset(lv, s15573c1f1, 3200, "S15573C1.s15573c1f1");
    check_field_offset(lv, s15573c1f2, ABISELECT(4800,4000), "S15573C1.s15573c1f2");
  }
}
static Arrange_To_Call_Me vS15573C1(Test_S15573C1, "S15573C1", ABISELECT(4816,4016));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18221C2  {
  int s18221c2f0;
  ::S1933C5_nt s18221c2f1;
  void  mf18221c2(); // _ZN8S18221C29mf18221c2Ev
};
//SIG(-1 S18221C2) C1{ m Fi FC2{ Fp[2]}}


void  S18221C2 ::mf18221c2(){}

static void Test_S18221C2()
{
  {
    init_simple_test("S18221C2");
    S18221C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18221C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18221C2)");
    check_field_offset(lv, s18221c2f0, 0, "S18221C2.s18221c2f0");
    check_field_offset(lv, s18221c2f1, ABISELECT(8,4), "S18221C2.s18221c2f1");
  }
}
static Arrange_To_Call_Me vS18221C2(Test_S18221C2, "S18221C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18221C1  {
  void *s18221c1f0[3];
  ::S18221C2 s18221c1f1;
  char s18221c1f2[2];
  void  mf18221c1(); // _ZN8S18221C19mf18221c1Ev
};
//SIG(1 S18221C1) C1{ m Fp[3] FC2{ m Fi FC3{ Fp[2]}} Fc[2]}


void  S18221C1 ::mf18221c1(){}

static void Test_S18221C1()
{
  {
    init_simple_test("S18221C1");
    S18221C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18221C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18221C1)");
    check_field_offset(lv, s18221c1f0, 0, "S18221C1.s18221c1f0");
    check_field_offset(lv, s18221c1f1, ABISELECT(24,12), "S18221C1.s18221c1f1");
    check_field_offset(lv, s18221c1f2, ABISELECT(48,24), "S18221C1.s18221c1f2");
  }
}
static Arrange_To_Call_Me vS18221C1(Test_S18221C1, "S18221C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21042C3  : virtual S2265C38 {
  ~S21042C3(); // tgen
  S21042C3(); // tgen
};
//SIG(-1 S21042C3) C1{ VBC2{ m}}


S21042C3 ::~S21042C3(){ note_dtor("S21042C3", this);} // tgen
S21042C3 ::S21042C3(){ note_ctor("S21042C3", this);} // tgen

static void Test_S21042C3()
{
  extern Class_Descriptor cd_S21042C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21042C3, buf);
    S21042C3 *dp, &lv = *(dp=new (buf) S21042C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21042C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21042C3)");
    check_base_class_offset(lv, (S2265C38*), 0, "S21042C3");
    test_class_info(&lv, &cd_S21042C3);
    dp->~S21042C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21042C3(Test_S21042C3, "S21042C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21042C3C1Ev();
extern void _ZN8S21042C3D1Ev();
Name_Map name_map_S21042C3[] = {
  NSPAIR(_ZN8S21042C3C1Ev),
  NSPAIR(_ZN8S21042C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S21042C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21042C3[];
static  VTBL_ENTRY vtc_S21042C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21042C3[0]),
};
extern VTBL_ENTRY _ZTV8S21042C3[];
static  VTT_ENTRY vtt_S21042C3[] = {
  {&(_ZTV8S21042C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21042C3[];
extern  VTBL_ENTRY _ZTV8S21042C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21042C3[];
Class_Descriptor cd_S21042C3 = {  "S21042C3", // class name
  bases_S21042C3, 1,
  &(vtc_S21042C3[0]), // expected_vtbl_contents
  &(vtt_S21042C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21042C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21042C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21042C3),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21042C2  : virtual S21042C3 , virtual S1933C4_nt {
  virtual  ~S21042C2(); // _ZN8S21042C2D2Ev
  S21042C2(); // tgen
};
//SIG(-1 S21042C2) C1{ VBC2{ VBC3{ m}} VBC4{ vd m} vd}


 S21042C2 ::~S21042C2(){ note_dtor("S21042C2", this);}
S21042C2 ::S21042C2(){ note_ctor("S21042C2", this);} // tgen

static void Test_S21042C2()
{
  extern Class_Descriptor cd_S21042C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21042C2, buf);
    S21042C2 *dp, &lv = *(dp=new (buf) S21042C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21042C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21042C2)");
    check_base_class_offset(lv, (S2265C38*)(S21042C3*), 0, "S21042C2");
    check_base_class_offset(lv, (S21042C3*), 0, "S21042C2");
    check_base_class_offset(lv, (S1933C4_nt*), ABISELECT(8,4), "S21042C2");
    test_class_info(&lv, &cd_S21042C2);
    dp->~S21042C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21042C2(Test_S21042C2, "S21042C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21042C2C1Ev();
extern void _ZN8S21042C2D2Ev();
Name_Map name_map_S21042C2[] = {
  NSPAIR(_ZN8S21042C2C1Ev),
  NSPAIR(_ZN8S21042C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21042C3;
extern VTBL_ENTRY _ZTI8S21042C3[];
extern  VTBL_ENTRY _ZTV8S21042C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21042C3[];
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
static Base_Class bases_S21042C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21042C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1933C4_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21042C2[];
extern void _ZN8S21042C2D1Ev();
extern void _ZN8S21042C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21042C2D1Ev,_ZTv0_n12_N8S21042C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21042C2D1Ev,_ZThn4_N8S21042C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21042C2D0Ev,_ZTv0_n12_N8S21042C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21042C2D0Ev,_ZThn4_N8S21042C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21042C2[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21042C2[0]),
  (VTBL_ENTRY)&_ZN8S21042C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21042C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21042C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21042C2D1Ev,_ZTv0_n12_N8S21042C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21042C2D0Ev,_ZTv0_n12_N8S21042C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21042C2[];
static  VTBL_ENTRY _tg__ZTV8S21042C3__8S21042C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21042C3[0]),
};
static  VTT_ENTRY vtt_S21042C2[] = {
  {&(_ZTV8S21042C2[5]),  5,12},
  {&(_ZTV8S21042C2[5]),  5,12},
  {&(_ZTV8S21042C2[10]),  10,12},
  {&(_tg__ZTV8S21042C3__8S21042C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21042C2[];
extern  VTBL_ENTRY _ZTV8S21042C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21042C2[];
static VTBL_ENTRY alt_thunk_names184[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21042C2D0Ev,_ZTv0_n12_N8S21042C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21042C2D0Ev,_ZThn4_N8S21042C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21042C2D1Ev,_ZTv0_n12_N8S21042C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21042C2D1Ev,_ZThn4_N8S21042C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21042C2 = {  "S21042C2", // class name
  bases_S21042C2, 3,
  &(vtc_S21042C2[0]), // expected_vtbl_contents
  &(vtt_S21042C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21042C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21042C2),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21042C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names184,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21042C1  : virtual S21042C2 {
  virtual  ~S21042C1(); // _ZN8S21042C1D2Ev
  S21042C1(); // tgen
};
//SIG(1 S21042C1) C1{ VBC2{ VBC3{ VBC4{ m}} VBC5{ vd m} vd} vd}


 S21042C1 ::~S21042C1(){ note_dtor("S21042C1", this);}
S21042C1 ::S21042C1(){ note_ctor("S21042C1", this);} // tgen

static void Test_S21042C1()
{
  extern Class_Descriptor cd_S21042C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21042C1, buf);
    S21042C1 *dp, &lv = *(dp=new (buf) S21042C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21042C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21042C1)");
    check_base_class_offset(lv, (S2265C38*)(S21042C3*), 0, "S21042C1");
    check_base_class_offset(lv, (S21042C3*)(S21042C2*), 0, "S21042C1");
    check_base_class_offset(lv, (S1933C4_nt*)(S21042C2*), ABISELECT(8,4), "S21042C1");
    check_base_class_offset(lv, (S21042C2*), 0, "S21042C1");
    test_class_info(&lv, &cd_S21042C1);
    dp->~S21042C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21042C1(Test_S21042C1, "S21042C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21042C1C1Ev();
extern void _ZN8S21042C1D2Ev();
Name_Map name_map_S21042C1[] = {
  NSPAIR(_ZN8S21042C1C1Ev),
  NSPAIR(_ZN8S21042C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S21042C3;
extern VTBL_ENTRY _ZTI8S21042C3[];
extern  VTBL_ENTRY _ZTV8S21042C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21042C3[];
extern Class_Descriptor cd_S1933C4_nt;
extern VTBL_ENTRY _ZTI10S1933C4_nt[];
extern  VTBL_ENTRY _ZTV10S1933C4_nt[];
extern Class_Descriptor cd_S21042C2;
extern VTBL_ENTRY _ZTI8S21042C2[];
extern  VTBL_ENTRY _ZTV8S21042C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21042C2[];
static Base_Class bases_S21042C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21042C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S1933C4_nt,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21042C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21042C1[];
extern void _ZN8S21042C1D1Ev();
extern void _ZN8S21042C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21042C1D1Ev,_ZTv0_n12_N8S21042C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S21042C1D1Ev,_ZThn4_N8S21042C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21042C1D0Ev,_ZTv0_n12_N8S21042C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S21042C1D0Ev,_ZThn4_N8S21042C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21042C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21042C1[0]),
  (VTBL_ENTRY)&_ZN8S21042C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21042C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21042C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21042C1D1Ev,_ZTv0_n12_N8S21042C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21042C1D0Ev,_ZTv0_n12_N8S21042C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21042C1[];
extern void _ZN8S21042C2D1Ev();
extern void _ZN8S21042C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21042C2__8S21042C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21042C2[0]),
  (VTBL_ENTRY)&_ZN8S21042C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21042C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21042C2D1Ev,_ZTv0_n12_N8S21042C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21042C2D1Ev,_ZThn4_N8S21042C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21042C2D0Ev,_ZTv0_n12_N8S21042C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21042C2D0Ev,_ZThn4_N8S21042C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S1933C4_nt__8S21042C2__8S21042C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21042C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21042C2D1Ev,_ZTv0_n12_N8S21042C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21042C2D0Ev,_ZTv0_n12_N8S21042C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S21042C3__8S21042C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21042C3[0]),
};
static  VTT_ENTRY vtt_S21042C1[] = {
  {&(_ZTV8S21042C1[7]),  7,14},
  {&(_ZTV8S21042C1[7]),  7,14},
  {&(_ZTV8S21042C1[7]),  7,14},
  {&(_ZTV8S21042C1[12]),  12,14},
  {&(_tg__ZTV8S21042C2__8S21042C1[5]),  5,7},
  {&(_tg__ZTV8S21042C2__8S21042C1[5]),  5,7},
  {&(_tg__ZTV10S1933C4_nt__8S21042C2__8S21042C1[3]),  3,5},
  {&(_tg__ZTV8S21042C3__8S21042C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21042C1[];
extern  VTBL_ENTRY _ZTV8S21042C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21042C1[];
static VTBL_ENTRY alt_thunk_names185[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21042C2D0Ev,_ZTv0_n12_N8S21042C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21042C2D0Ev,_ZThn4_N8S21042C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21042C2D1Ev,_ZTv0_n12_N8S21042C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21042C2D1Ev,_ZThn4_N8S21042C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21042C1D0Ev,_ZTv0_n12_N8S21042C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21042C1D0Ev,_ZThn4_N8S21042C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21042C1D1Ev,_ZTv0_n12_N8S21042C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21042C1D1Ev,_ZThn4_N8S21042C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21042C1 = {  "S21042C1", // class name
  bases_S21042C1, 4,
  &(vtc_S21042C1[0]), // expected_vtbl_contents
  &(vtt_S21042C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21042C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21042C1),14, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21042C1),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names185,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12241C1  {
  int s12241c1f0;
  char s12241c1f1[2];
  short s12241c1f2;
  ::S17256C9 s12241c1f3[16];
};
//SIG(1 S12241C1) C1{ Fi Fc[2] Fs FC2{ Fi[2] Fs[6]}[16]}



static void Test_S12241C1()
{
  {
    init_simple_test("S12241C1");
    S12241C1 lv;
    check2(sizeof(lv), 328, "sizeof(S12241C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12241C1)");
    check_field_offset(lv, s12241c1f0, 0, "S12241C1.s12241c1f0");
    check_field_offset(lv, s12241c1f1, 4, "S12241C1.s12241c1f1");
    check_field_offset(lv, s12241c1f2, 6, "S12241C1.s12241c1f2");
    check_field_offset(lv, s12241c1f3, 8, "S12241C1.s12241c1f3");
  }
}
static Arrange_To_Call_Me vS12241C1(Test_S12241C1, "S12241C1", 328);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11007C2  {
  char s11007c2f0[96];
  short s11007c2f1[16];
};
//SIG(-1 S11007C2) C1{ Fc[96] Fs[16]}



static void Test_S11007C2()
{
  {
    init_simple_test("S11007C2");
    S11007C2 lv;
    check2(sizeof(lv), 128, "sizeof(S11007C2)");
    check2(__alignof__(lv), 2, "__alignof__(S11007C2)");
    check_field_offset(lv, s11007c2f0, 0, "S11007C2.s11007c2f0");
    check_field_offset(lv, s11007c2f1, 96, "S11007C2.s11007c2f1");
  }
}
static Arrange_To_Call_Me vS11007C2(Test_S11007C2, "S11007C2", 128);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11007C1  {
  char s11007c1f0[768];
  ::S11007C2 s11007c1f1;
  char s11007c1f2[32];
};
//SIG(1 S11007C1) C1{ Fc[768] FC2{ Fc[96] Fs[16]} Fc[32]}



static void Test_S11007C1()
{
  {
    init_simple_test("S11007C1");
    S11007C1 lv;
    check2(sizeof(lv), 928, "sizeof(S11007C1)");
    check2(__alignof__(lv), 2, "__alignof__(S11007C1)");
    check_field_offset(lv, s11007c1f0, 0, "S11007C1.s11007c1f0");
    check_field_offset(lv, s11007c1f1, 768, "S11007C1.s11007c1f1");
    check_field_offset(lv, s11007c1f2, 896, "S11007C1.s11007c1f2");
  }
}
static Arrange_To_Call_Me vS11007C1(Test_S11007C1, "S11007C1", 928);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11291C3_nt  {
  int s11291c3f0;
  void *s11291c3f1;
};
//SIG(-1 S11291C3_nt) C1{ Fi Fp}



//skip512 S11291C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11291C2  {
  ::S11291C3_nt s11291c2f0;
  ::S11291C3_nt s11291c2f1;
  int s11291c2f2;
};
//SIG(1 S11291C2) C1{ FC2{ Fi Fp} FC2 Fi}



static void Test_S11291C2()
{
  {
    init_simple_test("S11291C2");
    S11291C2 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S11291C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11291C2)");
    check_field_offset(lv, s11291c2f0, 0, "S11291C2.s11291c2f0");
    check_field_offset(lv, s11291c2f1, ABISELECT(16,8), "S11291C2.s11291c2f1");
    check_field_offset(lv, s11291c2f2, ABISELECT(32,16), "S11291C2.s11291c2f2");
  }
}
static Arrange_To_Call_Me vS11291C2(Test_S11291C2, "S11291C2", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11291C1  {
  ::S11291C2 s11291c1f0[4];
  ::S11291C2 s11291c1f1[4];
};
//SIG(1 S11291C1) C1{ FC2{ FC3{ Fi Fp} FC3 Fi}[4] FC2[4]}



static void Test_S11291C1()
{
  {
    init_simple_test("S11291C1");
    S11291C1 lv;
    check2(sizeof(lv), ABISELECT(320,160), "sizeof(S11291C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11291C1)");
    check_field_offset(lv, s11291c1f0, 0, "S11291C1.s11291c1f0");
    check_field_offset(lv, s11291c1f1, ABISELECT(160,80), "S11291C1.s11291c1f1");
  }
}
static Arrange_To_Call_Me vS11291C1(Test_S11291C1, "S11291C1", ABISELECT(320,160));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6937C2  {
  virtual  ~S6937C2(); // _ZN7S6937C2D1Ev
  virtual void  v5(); // _ZN7S6937C22v5Ev
  virtual void  v6(); // _ZN7S6937C22v6Ev
  virtual void  v7(); // _ZN7S6937C22v7Ev
  virtual void  v8(); // _ZN7S6937C22v8Ev
  S6937C2(); // tgen
};
//SIG(-1 S6937C2) C1{ vd v1 v2 v3 v4}


 S6937C2 ::~S6937C2(){ note_dtor("S6937C2", this);}
void  S6937C2 ::v5(){vfunc_called(this, "_ZN7S6937C22v5Ev");}
void  S6937C2 ::v6(){vfunc_called(this, "_ZN7S6937C22v6Ev");}
void  S6937C2 ::v7(){vfunc_called(this, "_ZN7S6937C22v7Ev");}
void  S6937C2 ::v8(){vfunc_called(this, "_ZN7S6937C22v8Ev");}
S6937C2 ::S6937C2(){ note_ctor("S6937C2", this);} // tgen

static void Test_S6937C2()
{
  extern Class_Descriptor cd_S6937C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6937C2, buf);
    S6937C2 *dp, &lv = *(dp=new (buf) S6937C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6937C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6937C2)");
    test_class_info(&lv, &cd_S6937C2);
    dp->~S6937C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6937C2(Test_S6937C2, "S6937C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6937C2C1Ev();
extern void _ZN7S6937C2D1Ev();
Name_Map name_map_S6937C2[] = {
  NSPAIR(_ZN7S6937C2C1Ev),
  NSPAIR(_ZN7S6937C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6937C2[];
extern void _ZN7S6937C2D1Ev();
extern void _ZN7S6937C2D0Ev();
extern void _ZN7S6937C22v5Ev();
extern void _ZN7S6937C22v6Ev();
extern void _ZN7S6937C22v7Ev();
extern void _ZN7S6937C22v8Ev();
static  VTBL_ENTRY vtc_S6937C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6937C2[0]),
  (VTBL_ENTRY)&_ZN7S6937C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6937C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S6937C2[];
extern  VTBL_ENTRY _ZTV7S6937C2[];
Class_Descriptor cd_S6937C2 = {  "S6937C2", // class name
  0,0,//no base classes
  &(vtc_S6937C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6937C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6937C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6937C1  : S6937C2 {
  virtual void  v1(); // _ZN7S6937C12v1Ev
  virtual void  v2(); // _ZN7S6937C12v2Ev
  virtual void  v3(); // _ZN7S6937C12v3Ev
  virtual void  v4(); // _ZN7S6937C12v4Ev
  ~S6937C1(); // tgen
  S6937C1(); // tgen
};
//SIG(1 S6937C1) C1{ BC2{ vd v5 v6 v7 v8} v1 v2 v3 v4}


void  S6937C1 ::v1(){vfunc_called(this, "_ZN7S6937C12v1Ev");}
void  S6937C1 ::v2(){vfunc_called(this, "_ZN7S6937C12v2Ev");}
void  S6937C1 ::v3(){vfunc_called(this, "_ZN7S6937C12v3Ev");}
void  S6937C1 ::v4(){vfunc_called(this, "_ZN7S6937C12v4Ev");}
S6937C1 ::~S6937C1(){ note_dtor("S6937C1", this);} // tgen
S6937C1 ::S6937C1(){ note_ctor("S6937C1", this);} // tgen

static void Test_S6937C1()
{
  extern Class_Descriptor cd_S6937C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6937C1, buf);
    S6937C1 *dp, &lv = *(dp=new (buf) S6937C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6937C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6937C1)");
    check_base_class_offset(lv, (S6937C2*), 0, "S6937C1");
    test_class_info(&lv, &cd_S6937C1);
    dp->~S6937C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6937C1(Test_S6937C1, "S6937C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6937C1C1Ev();
extern void _ZN7S6937C1D1Ev();
Name_Map name_map_S6937C1[] = {
  NSPAIR(_ZN7S6937C1C1Ev),
  NSPAIR(_ZN7S6937C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6937C2;
extern VTBL_ENTRY _ZTI7S6937C2[];
extern  VTBL_ENTRY _ZTV7S6937C2[];
static Base_Class bases_S6937C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6937C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6937C1[];
extern void _ZN7S6937C1D1Ev();
extern void _ZN7S6937C1D0Ev();
extern void _ZN7S6937C22v5Ev();
extern void _ZN7S6937C22v6Ev();
extern void _ZN7S6937C22v7Ev();
extern void _ZN7S6937C22v8Ev();
extern void _ZN7S6937C12v1Ev();
extern void _ZN7S6937C12v2Ev();
extern void _ZN7S6937C12v3Ev();
extern void _ZN7S6937C12v4Ev();
static  VTBL_ENTRY vtc_S6937C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6937C1[0]),
  (VTBL_ENTRY)&_ZN7S6937C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6937C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6937C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6937C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6937C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6937C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6937C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6937C1[];
extern  VTBL_ENTRY _ZTV7S6937C1[];
Class_Descriptor cd_S6937C1 = {  "S6937C1", // class name
  bases_S6937C1, 1,
  &(vtc_S6937C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6937C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6937C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18069C2_nt  {
  char s18069c2f0[4];
};
//SIG(-1 S18069C2_nt) C1{ Fc[4]}



//skip512 S18069C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18069C1  {
  void *s18069c1f0[2];
  int s18069c1f1;
  ::S18069C2_nt s18069c1f2;
  ::S18069C2_nt s18069c1f3;
  int s18069c1f4[2];
  void  mf18069c1(); // _ZN8S18069C19mf18069c1Ev
};
//SIG(1 S18069C1) C1{ m Fp[2] Fi FC2{ Fc[4]} FC2 Fi[2]}


void  S18069C1 ::mf18069c1(){}

static void Test_S18069C1()
{
  {
    init_simple_test("S18069C1");
    S18069C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S18069C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18069C1)");
    check_field_offset(lv, s18069c1f0, 0, "S18069C1.s18069c1f0");
    check_field_offset(lv, s18069c1f1, ABISELECT(16,8), "S18069C1.s18069c1f1");
    check_field_offset(lv, s18069c1f2, ABISELECT(20,12), "S18069C1.s18069c1f2");
    check_field_offset(lv, s18069c1f3, ABISELECT(24,16), "S18069C1.s18069c1f3");
    check_field_offset(lv, s18069c1f4, ABISELECT(28,20), "S18069C1.s18069c1f4");
  }
}
static Arrange_To_Call_Me vS18069C1(Test_S18069C1, "S18069C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13022C1  {
  int s13022c1f0[2];
  char s13022c1f1[32];
  int s13022c1f2[2];
  void *s13022c1f3;
  int s13022c1f4[3];
  void *s13022c1f5;
};
//SIG(1 S13022C1) C1{ Fi[2] Fc[32] Fi[2] Fp Fi[3] Fp}



static void Test_S13022C1()
{
  {
    init_simple_test("S13022C1");
    S13022C1 lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S13022C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13022C1)");
    check_field_offset(lv, s13022c1f0, 0, "S13022C1.s13022c1f0");
    check_field_offset(lv, s13022c1f1, 8, "S13022C1.s13022c1f1");
    check_field_offset(lv, s13022c1f2, 40, "S13022C1.s13022c1f2");
    check_field_offset(lv, s13022c1f3, 48, "S13022C1.s13022c1f3");
    check_field_offset(lv, s13022c1f4, ABISELECT(56,52), "S13022C1.s13022c1f4");
    check_field_offset(lv, s13022c1f5, ABISELECT(72,64), "S13022C1.s13022c1f5");
  }
}
static Arrange_To_Call_Me vS13022C1(Test_S13022C1, "S13022C1", ABISELECT(80,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13492C1  {
  int s13492c1f0[4];
  void *s13492c1f1;
  int s13492c1f2;
  void *s13492c1f3;
  int s13492c1f4;
  void *s13492c1f5;
  int s13492c1f6[3];
  void *s13492c1f7;
};
//SIG(1 S13492C1) C1{ Fi[4] Fp Fi Fp Fi Fp Fi[3] Fp}



static void Test_S13492C1()
{
  {
    init_simple_test("S13492C1");
    S13492C1 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S13492C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13492C1)");
    check_field_offset(lv, s13492c1f0, 0, "S13492C1.s13492c1f0");
    check_field_offset(lv, s13492c1f1, 16, "S13492C1.s13492c1f1");
    check_field_offset(lv, s13492c1f2, ABISELECT(24,20), "S13492C1.s13492c1f2");
    check_field_offset(lv, s13492c1f3, ABISELECT(32,24), "S13492C1.s13492c1f3");
    check_field_offset(lv, s13492c1f4, ABISELECT(40,28), "S13492C1.s13492c1f4");
    check_field_offset(lv, s13492c1f5, ABISELECT(48,32), "S13492C1.s13492c1f5");
    check_field_offset(lv, s13492c1f6, ABISELECT(56,36), "S13492C1.s13492c1f6");
    check_field_offset(lv, s13492c1f7, ABISELECT(72,48), "S13492C1.s13492c1f7");
  }
}
static Arrange_To_Call_Me vS13492C1(Test_S13492C1, "S13492C1", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4620C3  {
  virtual  ~S4620C3(); // _ZN7S4620C3D1Ev
  virtual void  v2(); // _ZN7S4620C32v2Ev
  S4620C3(); // tgen
};
//SIG(-1 S4620C3) C1{ vd v1}


 S4620C3 ::~S4620C3(){ note_dtor("S4620C3", this);}
void  S4620C3 ::v2(){vfunc_called(this, "_ZN7S4620C32v2Ev");}
S4620C3 ::S4620C3(){ note_ctor("S4620C3", this);} // tgen

static void Test_S4620C3()
{
  extern Class_Descriptor cd_S4620C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4620C3, buf);
    S4620C3 *dp, &lv = *(dp=new (buf) S4620C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4620C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4620C3)");
    test_class_info(&lv, &cd_S4620C3);
    dp->~S4620C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4620C3(Test_S4620C3, "S4620C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4620C3C1Ev();
extern void _ZN7S4620C3D1Ev();
Name_Map name_map_S4620C3[] = {
  NSPAIR(_ZN7S4620C3C1Ev),
  NSPAIR(_ZN7S4620C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4620C3[];
extern void _ZN7S4620C3D1Ev();
extern void _ZN7S4620C3D0Ev();
extern void _ZN7S4620C32v2Ev();
static  VTBL_ENTRY vtc_S4620C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4620C3[0]),
  (VTBL_ENTRY)&_ZN7S4620C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4620C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4620C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S4620C3[];
extern  VTBL_ENTRY _ZTV7S4620C3[];
Class_Descriptor cd_S4620C3 = {  "S4620C3", // class name
  0,0,//no base classes
  &(vtc_S4620C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4620C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4620C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4620C2_nt  : S4620C3 {
  virtual  ~S4620C2_nt(); // _ZN10S4620C2_ntD1Ev
  S4620C2_nt(); // tgen
};
//SIG(-1 S4620C2_nt) C1{ BC2{ vd v1} vd}


 S4620C2_nt ::~S4620C2_nt(){ note_dtor("S4620C2_nt", this);}
S4620C2_nt ::S4620C2_nt(){ note_ctor("S4620C2_nt", this);} // tgen

//skip512 S4620C2_nt

#else // __cplusplus

extern void _ZN10S4620C2_ntC1Ev();
extern void _ZN10S4620C2_ntD1Ev();
Name_Map name_map_S4620C2_nt[] = {
  NSPAIR(_ZN10S4620C2_ntC1Ev),
  NSPAIR(_ZN10S4620C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4620C3;
extern VTBL_ENTRY _ZTI7S4620C3[];
extern  VTBL_ENTRY _ZTV7S4620C3[];
static Base_Class bases_S4620C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4620C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4620C2_nt[];
extern void _ZN10S4620C2_ntD1Ev();
extern void _ZN10S4620C2_ntD0Ev();
extern void _ZN7S4620C32v2Ev();
static  VTBL_ENTRY vtc_S4620C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4620C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4620C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4620C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4620C32v2Ev,
};
extern VTBL_ENTRY _ZTI10S4620C2_nt[];
VTBL_ENTRY *P__ZTI10S4620C2_nt = _ZTI10S4620C2_nt; 
extern  VTBL_ENTRY _ZTV10S4620C2_nt[];
Class_Descriptor cd_S4620C2_nt = {  "S4620C2_nt", // class name
  bases_S4620C2_nt, 1,
  &(vtc_S4620C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4620C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4620C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4620C1  : S4620C2_nt {
  int s4620c1f0;
  void *s4620c1f1;
  virtual  ~S4620C1(); // _ZN7S4620C1D1Ev
  virtual void  v1(); // _ZN7S4620C12v1Ev
  S4620C1(); // tgen
};
//SIG(1 S4620C1) C1{ BC2{ BC3{ vd v2} vd} vd v1 Fi Fp}


 S4620C1 ::~S4620C1(){ note_dtor("S4620C1", this);}
void  S4620C1 ::v1(){vfunc_called(this, "_ZN7S4620C12v1Ev");}
S4620C1 ::S4620C1(){ note_ctor("S4620C1", this);} // tgen

static void Test_S4620C1()
{
  extern Class_Descriptor cd_S4620C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4620C1, buf);
    S4620C1 *dp, &lv = *(dp=new (buf) S4620C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4620C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4620C1)");
    check_base_class_offset(lv, (S4620C3*)(S4620C2_nt*), 0, "S4620C1");
    check_base_class_offset(lv, (S4620C2_nt*), 0, "S4620C1");
    check_field_offset(lv, s4620c1f0, ABISELECT(8,4), "S4620C1.s4620c1f0");
    check_field_offset(lv, s4620c1f1, ABISELECT(16,8), "S4620C1.s4620c1f1");
    test_class_info(&lv, &cd_S4620C1);
    dp->~S4620C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4620C1(Test_S4620C1, "S4620C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4620C1C1Ev();
extern void _ZN7S4620C1D1Ev();
Name_Map name_map_S4620C1[] = {
  NSPAIR(_ZN7S4620C1C1Ev),
  NSPAIR(_ZN7S4620C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4620C3;
extern VTBL_ENTRY _ZTI7S4620C3[];
extern  VTBL_ENTRY _ZTV7S4620C3[];
extern Class_Descriptor cd_S4620C2_nt;
extern VTBL_ENTRY _ZTI10S4620C2_nt[];
extern  VTBL_ENTRY _ZTV10S4620C2_nt[];
static Base_Class bases_S4620C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4620C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4620C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4620C1[];
extern void _ZN7S4620C1D1Ev();
extern void _ZN7S4620C1D0Ev();
extern void _ZN7S4620C32v2Ev();
extern void _ZN7S4620C12v1Ev();
static  VTBL_ENTRY vtc_S4620C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4620C1[0]),
  (VTBL_ENTRY)&_ZN7S4620C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4620C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4620C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4620C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4620C1[];
extern  VTBL_ENTRY _ZTV7S4620C1[];
Class_Descriptor cd_S4620C1 = {  "S4620C1", // class name
  bases_S4620C1, 2,
  &(vtc_S4620C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4620C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4620C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19812C3  : S9166C6 {
  void *s19812c3f0[2];
};
//SIG(-1 S19812C3) C1{ BC2{ m Fp} Fp[2]}



static void Test_S19812C3()
{
  extern Class_Descriptor cd_S19812C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19812C3, buf);
    S19812C3 &lv = *(new (buf) S19812C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19812C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19812C3)");
    check_base_class_offset(lv, (S9166C6*), 0, "S19812C3");
    check_field_offset(lv, s19812c3f0, ABISELECT(8,4), "S19812C3.s19812c3f0");
    test_class_info(&lv, &cd_S19812C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19812C3(Test_S19812C3, "S19812C3", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
static Base_Class bases_S19812C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9166C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19812C3[];
Class_Descriptor cd_S19812C3 = {  "S19812C3", // class name
  bases_S19812C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19812C3),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19812C1  : virtual S2265C38 , S19812C3 {
  virtual  ~S19812C1(); // _ZN8S19812C1D2Ev
  S19812C1(); // tgen
};
//SIG(1 S19812C1) C1{ VBC2{ m} BC3{ BC4{ m Fp} Fp[2]} vd}


 S19812C1 ::~S19812C1(){ note_dtor("S19812C1", this);}
S19812C1 ::S19812C1(){ note_ctor("S19812C1", this);} // tgen

static void Test_S19812C1()
{
  extern Class_Descriptor cd_S19812C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19812C1, buf);
    S19812C1 *dp, &lv = *(dp=new (buf) S19812C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19812C1)");
    check_base_class_offset(lv, (S2265C38*), 0, "S19812C1");
    check_base_class_offset(lv, (S9166C6*)(S19812C3*), ABISELECT(8,4), "S19812C1");
    check_base_class_offset(lv, (S19812C3*), ABISELECT(8,4), "S19812C1");
    test_class_info(&lv, &cd_S19812C1);
    dp->~S19812C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19812C1(Test_S19812C1, "S19812C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19812C1C1Ev();
extern void _ZN8S19812C1D2Ev();
Name_Map name_map_S19812C1[] = {
  NSPAIR(_ZN8S19812C1C1Ev),
  NSPAIR(_ZN8S19812C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S9166C6;
extern VTBL_ENTRY _ZTI7S9166C6[];
extern Class_Descriptor cd_S19812C3;
extern VTBL_ENTRY _ZTI8S19812C3[];
static Base_Class bases_S19812C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S9166C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19812C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19812C1[];
extern void _ZN8S19812C1D1Ev();
extern void _ZN8S19812C1D0Ev();
static  VTBL_ENTRY vtc_S19812C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19812C1[0]),
  (VTBL_ENTRY)&_ZN8S19812C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19812C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19812C1[];
static  VTT_ENTRY vtt_S19812C1[] = {
  {&(_ZTV8S19812C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19812C1[];
extern  VTBL_ENTRY _ZTV8S19812C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19812C1[];
Class_Descriptor cd_S19812C1 = {  "S19812C1", // class name
  bases_S19812C1, 3,
  &(vtc_S19812C1[0]), // expected_vtbl_contents
  &(vtt_S19812C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19812C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19812C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19812C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16762C1  {
  int s16762c1f0;
  ::S1409C14_nt s16762c1f1;
  ::S1409C14_nt s16762c1f2;
  ::S1409C14_nt s16762c1f3;
  char s16762c1f4;
  void  mf16762c1(); // _ZN8S16762C19mf16762c1Ev
};
//SIG(1 S16762C1) C1{ m Fi FC2{ m Fi[3]} FC2 FC2 Fc}


void  S16762C1 ::mf16762c1(){}

static void Test_S16762C1()
{
  {
    init_simple_test("S16762C1");
    S16762C1 lv;
    check2(sizeof(lv), 44, "sizeof(S16762C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16762C1)");
    check_field_offset(lv, s16762c1f0, 0, "S16762C1.s16762c1f0");
    check_field_offset(lv, s16762c1f1, 4, "S16762C1.s16762c1f1");
    check_field_offset(lv, s16762c1f2, 16, "S16762C1.s16762c1f2");
    check_field_offset(lv, s16762c1f3, 28, "S16762C1.s16762c1f3");
    check_field_offset(lv, s16762c1f4, 40, "S16762C1.s16762c1f4");
  }
}
static Arrange_To_Call_Me vS16762C1(Test_S16762C1, "S16762C1", 44);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6774C2  {
  virtual  ~S6774C2(); // _ZN7S6774C2D1Ev
  virtual void  v3(); // _ZN7S6774C22v3Ev
  virtual void  v4(); // _ZN7S6774C22v4Ev
  S6774C2(); // tgen
};
//SIG(-1 S6774C2) C1{ vd v1 v2}


 S6774C2 ::~S6774C2(){ note_dtor("S6774C2", this);}
void  S6774C2 ::v3(){vfunc_called(this, "_ZN7S6774C22v3Ev");}
void  S6774C2 ::v4(){vfunc_called(this, "_ZN7S6774C22v4Ev");}
S6774C2 ::S6774C2(){ note_ctor("S6774C2", this);} // tgen

static void Test_S6774C2()
{
  extern Class_Descriptor cd_S6774C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6774C2, buf);
    S6774C2 *dp, &lv = *(dp=new (buf) S6774C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6774C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6774C2)");
    test_class_info(&lv, &cd_S6774C2);
    dp->~S6774C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6774C2(Test_S6774C2, "S6774C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6774C2C1Ev();
extern void _ZN7S6774C2D1Ev();
Name_Map name_map_S6774C2[] = {
  NSPAIR(_ZN7S6774C2C1Ev),
  NSPAIR(_ZN7S6774C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6774C2[];
extern void _ZN7S6774C2D1Ev();
extern void _ZN7S6774C2D0Ev();
extern void _ZN7S6774C22v3Ev();
extern void _ZN7S6774C22v4Ev();
static  VTBL_ENTRY vtc_S6774C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6774C2[0]),
  (VTBL_ENTRY)&_ZN7S6774C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6774C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6774C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6774C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6774C2[];
extern  VTBL_ENTRY _ZTV7S6774C2[];
Class_Descriptor cd_S6774C2 = {  "S6774C2", // class name
  0,0,//no base classes
  &(vtc_S6774C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6774C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6774C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6774C1  : S6774C2 {
  void *s6774c1f0[6];
  virtual  ~S6774C1(); // _ZN7S6774C1D1Ev
  virtual void  v1(); // _ZN7S6774C12v1Ev
  virtual void  v2(); // _ZN7S6774C12v2Ev
  S6774C1(); // tgen
};
//SIG(1 S6774C1) C1{ BC2{ vd v3 v4} vd v1 v2 Fp[6]}


 S6774C1 ::~S6774C1(){ note_dtor("S6774C1", this);}
void  S6774C1 ::v1(){vfunc_called(this, "_ZN7S6774C12v1Ev");}
void  S6774C1 ::v2(){vfunc_called(this, "_ZN7S6774C12v2Ev");}
S6774C1 ::S6774C1(){ note_ctor("S6774C1", this);} // tgen

static void Test_S6774C1()
{
  extern Class_Descriptor cd_S6774C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S6774C1, buf);
    S6774C1 *dp, &lv = *(dp=new (buf) S6774C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S6774C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6774C1)");
    check_base_class_offset(lv, (S6774C2*), 0, "S6774C1");
    check_field_offset(lv, s6774c1f0, ABISELECT(8,4), "S6774C1.s6774c1f0");
    test_class_info(&lv, &cd_S6774C1);
    dp->~S6774C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6774C1(Test_S6774C1, "S6774C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S6774C1C1Ev();
extern void _ZN7S6774C1D1Ev();
Name_Map name_map_S6774C1[] = {
  NSPAIR(_ZN7S6774C1C1Ev),
  NSPAIR(_ZN7S6774C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6774C2;
extern VTBL_ENTRY _ZTI7S6774C2[];
extern  VTBL_ENTRY _ZTV7S6774C2[];
static Base_Class bases_S6774C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6774C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6774C1[];
extern void _ZN7S6774C1D1Ev();
extern void _ZN7S6774C1D0Ev();
extern void _ZN7S6774C22v3Ev();
extern void _ZN7S6774C22v4Ev();
extern void _ZN7S6774C12v1Ev();
extern void _ZN7S6774C12v2Ev();
static  VTBL_ENTRY vtc_S6774C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6774C1[0]),
  (VTBL_ENTRY)&_ZN7S6774C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6774C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6774C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6774C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6774C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6774C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6774C1[];
extern  VTBL_ENTRY _ZTV7S6774C1[];
Class_Descriptor cd_S6774C1 = {  "S6774C1", // class name
  bases_S6774C1, 1,
  &(vtc_S6774C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S6774C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6774C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8224C2_nt  {
  void *s8224c2f0;
  void  mf8224c2(); // _ZN10S8224C2_nt8mf8224c2Ev
  virtual  ~S8224C2_nt(); // _ZN10S8224C2_ntD1Ev
  S8224C2_nt(); // tgen
};
//SIG(-1 S8224C2_nt) C1{ vd m Fp}


void  S8224C2_nt ::mf8224c2(){}
 S8224C2_nt ::~S8224C2_nt(){ note_dtor("S8224C2_nt", this);}
S8224C2_nt ::S8224C2_nt(){ note_ctor("S8224C2_nt", this);} // tgen

//skip512 S8224C2_nt

#else // __cplusplus

extern void _ZN10S8224C2_ntC1Ev();
extern void _ZN10S8224C2_ntD1Ev();
Name_Map name_map_S8224C2_nt[] = {
  NSPAIR(_ZN10S8224C2_ntC1Ev),
  NSPAIR(_ZN10S8224C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8224C2_nt[];
extern void _ZN10S8224C2_ntD1Ev();
extern void _ZN10S8224C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8224C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8224C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8224C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8224C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8224C2_nt[];
VTBL_ENTRY *P__ZTI10S8224C2_nt = _ZTI10S8224C2_nt; 
extern  VTBL_ENTRY _ZTV10S8224C2_nt[];
Class_Descriptor cd_S8224C2_nt = {  "S8224C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8224C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8224C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8224C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8224C1  : S8224C2_nt {
  void *s8224c1f0;
  int s8224c1f1;
  void *s8224c1f2[2];
  virtual  ~S8224C1(); // _ZN7S8224C1D1Ev
  S8224C1(); // tgen
};
//SIG(1 S8224C1) C1{ BC2{ vd m Fp} vd Fp Fi Fp[2]}


 S8224C1 ::~S8224C1(){ note_dtor("S8224C1", this);}
S8224C1 ::S8224C1(){ note_ctor("S8224C1", this);} // tgen

static void Test_S8224C1()
{
  extern Class_Descriptor cd_S8224C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8224C1, buf);
    S8224C1 *dp, &lv = *(dp=new (buf) S8224C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8224C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8224C1)");
    check_base_class_offset(lv, (S8224C2_nt*), 0, "S8224C1");
    check_field_offset(lv, s8224c1f0, ABISELECT(16,8), "S8224C1.s8224c1f0");
    check_field_offset(lv, s8224c1f1, ABISELECT(24,12), "S8224C1.s8224c1f1");
    check_field_offset(lv, s8224c1f2, ABISELECT(32,16), "S8224C1.s8224c1f2");
    test_class_info(&lv, &cd_S8224C1);
    dp->~S8224C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8224C1(Test_S8224C1, "S8224C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8224C1C1Ev();
extern void _ZN7S8224C1D1Ev();
Name_Map name_map_S8224C1[] = {
  NSPAIR(_ZN7S8224C1C1Ev),
  NSPAIR(_ZN7S8224C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8224C2_nt;
extern VTBL_ENTRY _ZTI10S8224C2_nt[];
extern  VTBL_ENTRY _ZTV10S8224C2_nt[];
static Base_Class bases_S8224C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8224C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8224C1[];
extern void _ZN7S8224C1D1Ev();
extern void _ZN7S8224C1D0Ev();
static  VTBL_ENTRY vtc_S8224C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8224C1[0]),
  (VTBL_ENTRY)&_ZN7S8224C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8224C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8224C1[];
extern  VTBL_ENTRY _ZTV7S8224C1[];
Class_Descriptor cd_S8224C1 = {  "S8224C1", // class name
  bases_S8224C1, 1,
  &(vtc_S8224C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8224C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8224C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13583C1  {
  int s13583c1f0[6];
  void *s13583c1f1;
  int s13583c1f2;
  void *s13583c1f3;
  int s13583c1f4[2];
  void *s13583c1f5[3];
};
//SIG(1 S13583C1) C1{ Fi[6] Fp Fi Fp Fi[2] Fp[3]}



static void Test_S13583C1()
{
  {
    init_simple_test("S13583C1");
    S13583C1 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S13583C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13583C1)");
    check_field_offset(lv, s13583c1f0, 0, "S13583C1.s13583c1f0");
    check_field_offset(lv, s13583c1f1, 24, "S13583C1.s13583c1f1");
    check_field_offset(lv, s13583c1f2, ABISELECT(32,28), "S13583C1.s13583c1f2");
    check_field_offset(lv, s13583c1f3, ABISELECT(40,32), "S13583C1.s13583c1f3");
    check_field_offset(lv, s13583c1f4, ABISELECT(48,36), "S13583C1.s13583c1f4");
    check_field_offset(lv, s13583c1f5, ABISELECT(56,44), "S13583C1.s13583c1f5");
  }
}
static Arrange_To_Call_Me vS13583C1(Test_S13583C1, "S13583C1", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S403C4_nt  : S1409C9_nt {
};
//SIG(-1 S403C4_nt) C1{ BC2{ m Fi}}



//skip512 S403C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S1409C9_nt;
static Base_Class bases_S403C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S403C4_nt = {  "S403C4_nt", // class name
  bases_S403C4_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S403C3  : S403C4_nt {
};
//SIG(-1 S403C3) C1{ BC2{ BC3{ m Fi}}}



static void Test_S403C3()
{
  extern Class_Descriptor cd_S403C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S403C3, buf);
    S403C3 &lv = *(new (buf) S403C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S403C3)");
    check2(__alignof__(lv), 4, "__alignof__(S403C3)");
    check_base_class_offset(lv, (S1409C9_nt*)(S403C4_nt*), 0, "S403C3");
    check_base_class_offset(lv, (S403C4_nt*), 0, "S403C3");
    test_class_info(&lv, &cd_S403C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS403C3(Test_S403C3, "S403C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S1409C9_nt;
extern Class_Descriptor cd_S403C4_nt;
static Base_Class bases_S403C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S403C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S403C3 = {  "S403C3", // class name
  bases_S403C3, 2,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S403C2  : S403C3 {
};
//SIG(-1 S403C2) C1{ BC2{ BC3{ BC4{ m Fi}}}}



static void Test_S403C2()
{
  extern Class_Descriptor cd_S403C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S403C2, buf);
    S403C2 &lv = *(new (buf) S403C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S403C2)");
    check2(__alignof__(lv), 4, "__alignof__(S403C2)");
    check_base_class_offset(lv, (S1409C9_nt*)(S403C4_nt*)(S403C3*), 0, "S403C2");
    check_base_class_offset(lv, (S403C4_nt*)(S403C3*), 0, "S403C2");
    check_base_class_offset(lv, (S403C3*), 0, "S403C2");
    test_class_info(&lv, &cd_S403C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS403C2(Test_S403C2, "S403C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S1409C9_nt;
extern Class_Descriptor cd_S403C4_nt;
extern Class_Descriptor cd_S403C3;
static Base_Class bases_S403C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S403C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S403C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S403C2 = {  "S403C2", // class name
  bases_S403C2, 3,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S403C1  : S403C2 {
  int s403c1f0;
};
//SIG(1 S403C1) C1{ BC2{ BC3{ BC4{ BC5{ m Fi}}}} Fi}



static void Test_S403C1()
{
  extern Class_Descriptor cd_S403C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S403C1, buf);
    S403C1 &lv = *(new (buf) S403C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S403C1)");
    check2(__alignof__(lv), 4, "__alignof__(S403C1)");
    check_base_class_offset(lv, (S1409C9_nt*)(S403C4_nt*)(S403C3*)(S403C2*), 0, "S403C1");
    check_base_class_offset(lv, (S403C4_nt*)(S403C3*)(S403C2*), 0, "S403C1");
    check_base_class_offset(lv, (S403C3*)(S403C2*), 0, "S403C1");
    check_base_class_offset(lv, (S403C2*), 0, "S403C1");
    check_field_offset(lv, s403c1f0, 4, "S403C1.s403c1f0");
    test_class_info(&lv, &cd_S403C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS403C1(Test_S403C1, "S403C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S1409C9_nt;
extern Class_Descriptor cd_S403C4_nt;
extern Class_Descriptor cd_S403C3;
extern Class_Descriptor cd_S403C2;
static Base_Class bases_S403C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1409C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S403C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S403C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S403C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S403C1 = {  "S403C1", // class name
  bases_S403C1, 4,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16880C1  {
  int s16880c1f0;
  void *s16880c1f1;
  char s16880c1f2[2];
  void *s16880c1f3[2];
  int s16880c1f4[2];
  void  mf16880c1(); // _ZN8S16880C19mf16880c1Ev
};
//SIG(1 S16880C1) C1{ m Fi Fp Fc[2] Fp[2] Fi[2]}


void  S16880C1 ::mf16880c1(){}

static void Test_S16880C1()
{
  {
    init_simple_test("S16880C1");
    S16880C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16880C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16880C1)");
    check_field_offset(lv, s16880c1f0, 0, "S16880C1.s16880c1f0");
    check_field_offset(lv, s16880c1f1, ABISELECT(8,4), "S16880C1.s16880c1f1");
    check_field_offset(lv, s16880c1f2, ABISELECT(16,8), "S16880C1.s16880c1f2");
    check_field_offset(lv, s16880c1f3, ABISELECT(24,12), "S16880C1.s16880c1f3");
    check_field_offset(lv, s16880c1f4, ABISELECT(40,20), "S16880C1.s16880c1f4");
  }
}
static Arrange_To_Call_Me vS16880C1(Test_S16880C1, "S16880C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12652C1  {
  int s12652c1f0;
  void *s12652c1f1;
  char s12652c1f2[12];
  int s12652c1f3[3];
  void *s12652c1f4[10];
};
//SIG(1 S12652C1) C1{ Fi Fp Fc[12] Fi[3] Fp[10]}



static void Test_S12652C1()
{
  {
    init_simple_test("S12652C1");
    S12652C1 lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S12652C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12652C1)");
    check_field_offset(lv, s12652c1f0, 0, "S12652C1.s12652c1f0");
    check_field_offset(lv, s12652c1f1, ABISELECT(8,4), "S12652C1.s12652c1f1");
    check_field_offset(lv, s12652c1f2, ABISELECT(16,8), "S12652C1.s12652c1f2");
    check_field_offset(lv, s12652c1f3, ABISELECT(28,20), "S12652C1.s12652c1f3");
    check_field_offset(lv, s12652c1f4, ABISELECT(40,32), "S12652C1.s12652c1f4");
  }
}
static Arrange_To_Call_Me vS12652C1(Test_S12652C1, "S12652C1", ABISELECT(120,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13019C1  {
  int s13019c1f0[2];
  char s13019c1f1[32];
  int s13019c1f2;
  void *s13019c1f3[2];
  int s13019c1f4;
};
//SIG(1 S13019C1) C1{ Fi[2] Fc[32] Fi Fp[2] Fi}



static void Test_S13019C1()
{
  {
    init_simple_test("S13019C1");
    S13019C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S13019C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13019C1)");
    check_field_offset(lv, s13019c1f0, 0, "S13019C1.s13019c1f0");
    check_field_offset(lv, s13019c1f1, 8, "S13019C1.s13019c1f1");
    check_field_offset(lv, s13019c1f2, 40, "S13019C1.s13019c1f2");
    check_field_offset(lv, s13019c1f3, ABISELECT(48,44), "S13019C1.s13019c1f3");
    check_field_offset(lv, s13019c1f4, ABISELECT(64,52), "S13019C1.s13019c1f4");
  }
}
static Arrange_To_Call_Me vS13019C1(Test_S13019C1, "S13019C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10414C1  {
  char s10414c1f0;
  char s10414c1f1[15];
  char s10414c1f2;
  char s10414c1f3[15];
};
//SIG(1 S10414C1) C1{ Fc[32]}



static void Test_S10414C1()
{
  {
    init_simple_test("S10414C1");
    S10414C1 lv;
    check2(sizeof(lv), 32, "sizeof(S10414C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10414C1)");
    check_field_offset(lv, s10414c1f0, 0, "S10414C1.s10414c1f0");
    check_field_offset(lv, s10414c1f1, 1, "S10414C1.s10414c1f1");
    check_field_offset(lv, s10414c1f2, 16, "S10414C1.s10414c1f2");
    check_field_offset(lv, s10414c1f3, 17, "S10414C1.s10414c1f3");
  }
}
static Arrange_To_Call_Me vS10414C1(Test_S10414C1, "S10414C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10768C1  {
  char s10768c1f0[21];
  int s10768c1f1[5];
  char s10768c1f2[401];
  int s10768c1f3;
};
//SIG(1 S10768C1) C1{ Fc[21] Fi[5] Fc[401] Fi}



static void Test_S10768C1()
{
  {
    init_simple_test("S10768C1");
    S10768C1 lv;
    check2(sizeof(lv), 452, "sizeof(S10768C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10768C1)");
    check_field_offset(lv, s10768c1f0, 0, "S10768C1.s10768c1f0");
    check_field_offset(lv, s10768c1f1, 24, "S10768C1.s10768c1f1");
    check_field_offset(lv, s10768c1f2, 44, "S10768C1.s10768c1f2");
    check_field_offset(lv, s10768c1f3, 448, "S10768C1.s10768c1f3");
  }
}
static Arrange_To_Call_Me vS10768C1(Test_S10768C1, "S10768C1", 452);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11595C2_nt  {
  int s11595c2f0[2];
};
//SIG(-1 S11595C2_nt) C1{ Fi[2]}



//skip512 S11595C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11595C1  {
  ::S11595C2_nt s11595c1f0;
  short s11595c1f1;
  int s11595c1f2;
  char s11595c1f3[20];
};
//SIG(1 S11595C1) C1{ FC2{ Fi[2]} Fs Fi Fc[20]}



static void Test_S11595C1()
{
  {
    init_simple_test("S11595C1");
    S11595C1 lv;
    check2(sizeof(lv), 36, "sizeof(S11595C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11595C1)");
    check_field_offset(lv, s11595c1f0, 0, "S11595C1.s11595c1f0");
    check_field_offset(lv, s11595c1f1, 8, "S11595C1.s11595c1f1");
    check_field_offset(lv, s11595c1f2, 12, "S11595C1.s11595c1f2");
    check_field_offset(lv, s11595c1f3, 16, "S11595C1.s11595c1f3");
  }
}
static Arrange_To_Call_Me vS11595C1(Test_S11595C1, "S11595C1", 36);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17860C1  {
  void *s17860c1f0[2];
  char s17860c1f1;
  int s17860c1f2;
  char s17860c1f3;
  void *s17860c1f4[3];
  void  mf17860c1(); // _ZN8S17860C19mf17860c1Ev
};
//SIG(1 S17860C1) C1{ m Fp[2] Fc Fi Fc Fp[3]}


void  S17860C1 ::mf17860c1(){}

static void Test_S17860C1()
{
  {
    init_simple_test("S17860C1");
    S17860C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S17860C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17860C1)");
    check_field_offset(lv, s17860c1f0, 0, "S17860C1.s17860c1f0");
    check_field_offset(lv, s17860c1f1, ABISELECT(16,8), "S17860C1.s17860c1f1");
    check_field_offset(lv, s17860c1f2, ABISELECT(20,12), "S17860C1.s17860c1f2");
    check_field_offset(lv, s17860c1f3, ABISELECT(24,16), "S17860C1.s17860c1f3");
    check_field_offset(lv, s17860c1f4, ABISELECT(32,20), "S17860C1.s17860c1f4");
  }
}
static Arrange_To_Call_Me vS17860C1(Test_S17860C1, "S17860C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13690C1  {
  __tsi64 s13690c1f0;
  ::S17256C8 s13690c1f1;
};
//SIG(1 S13690C1) C1{ FL FC2{ Fc[2] Fs Fc[4]}}



static void Test_S13690C1()
{
  {
    init_simple_test("S13690C1");
    S13690C1 lv;
    check2(sizeof(lv), 16, "sizeof(S13690C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13690C1)");
    check_field_offset(lv, s13690c1f0, 0, "S13690C1.s13690c1f0");
    check_field_offset(lv, s13690c1f1, 8, "S13690C1.s13690c1f1");
  }
}
static Arrange_To_Call_Me vS13690C1(Test_S13690C1, "S13690C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13689C1  {
  long s13689c1f0;
  ::S17256C8 s13689c1f1;
};
//SIG(1 S13689C1) C1{ Fl FC2{ Fc[2] Fs Fc[4]}}



static void Test_S13689C1()
{
  {
    init_simple_test("S13689C1");
    S13689C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13689C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13689C1)");
    check_field_offset(lv, s13689c1f0, 0, "S13689C1.s13689c1f0");
    check_field_offset(lv, s13689c1f1, ABISELECT(8,4), "S13689C1.s13689c1f1");
  }
}
static Arrange_To_Call_Me vS13689C1(Test_S13689C1, "S13689C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19853C1  : virtual S2265C38 , S19859C6 {
  virtual  ~S19853C1(); // _ZN8S19853C1D2Ev
  S19853C1(); // tgen
};
//SIG(1 S19853C1) C1{ VBC2{ m} BC3{ vd m Fs} vd}


 S19853C1 ::~S19853C1(){ note_dtor("S19853C1", this);}
S19853C1 ::S19853C1(){ note_ctor("S19853C1", this);} // tgen

static void Test_S19853C1()
{
  extern Class_Descriptor cd_S19853C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19853C1, buf);
    S19853C1 *dp, &lv = *(dp=new (buf) S19853C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19853C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19853C1)");
    check_base_class_offset(lv, (S2265C38*), 0, "S19853C1");
    check_base_class_offset(lv, (S19859C6*), 0, "S19853C1");
    test_class_info(&lv, &cd_S19853C1);
    dp->~S19853C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19853C1(Test_S19853C1, "S19853C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19853C1C1Ev();
extern void _ZN8S19853C1D2Ev();
Name_Map name_map_S19853C1[] = {
  NSPAIR(_ZN8S19853C1C1Ev),
  NSPAIR(_ZN8S19853C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
extern Class_Descriptor cd_S19859C6;
extern VTBL_ENTRY _ZTI8S19859C6[];
extern  VTBL_ENTRY _ZTV8S19859C6[];
static Base_Class bases_S19853C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19859C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19853C1[];
extern void _ZN8S19853C1D1Ev();
extern void _ZN8S19853C1D0Ev();
static  VTBL_ENTRY vtc_S19853C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19853C1[0]),
  (VTBL_ENTRY)&_ZN8S19853C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19853C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19853C1[];
static  VTT_ENTRY vtt_S19853C1[] = {
  {&(_ZTV8S19853C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19853C1[];
extern  VTBL_ENTRY _ZTV8S19853C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19853C1[];
Class_Descriptor cd_S19853C1 = {  "S19853C1", // class name
  bases_S19853C1, 2,
  &(vtc_S19853C1[0]), // expected_vtbl_contents
  &(vtt_S19853C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19853C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19853C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19853C1),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14334C1  {
  void *s14334c1f0;
  int s14334c1f1[3];
  void *s14334c1f2;
  char s14334c1f3[8];
  int s14334c1f4;
};
//SIG(1 S14334C1) C1{ Fp Fi[3] Fp Fc[8] Fi}



static void Test_S14334C1()
{
  {
    init_simple_test("S14334C1");
    S14334C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14334C1)");
    check_field_offset(lv, s14334c1f0, 0, "S14334C1.s14334c1f0");
    check_field_offset(lv, s14334c1f1, ABISELECT(8,4), "S14334C1.s14334c1f1");
    check_field_offset(lv, s14334c1f2, ABISELECT(24,16), "S14334C1.s14334c1f2");
    check_field_offset(lv, s14334c1f3, ABISELECT(32,20), "S14334C1.s14334c1f3");
    check_field_offset(lv, s14334c1f4, ABISELECT(40,28), "S14334C1.s14334c1f4");
  }
}
static Arrange_To_Call_Me vS14334C1(Test_S14334C1, "S14334C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6027C2_nt  {
  void *s6027c2f0[2];
  int s6027c2f1;
  void  mf6027c2(); // _ZN10S6027C2_nt8mf6027c2Ev
};
//SIG(-1 S6027C2_nt) C1{ m Fp[2] Fi}


void  S6027C2_nt ::mf6027c2(){}

//skip512 S6027C2_nt

#else // __cplusplus

Class_Descriptor cd_S6027C2_nt = {  "S6027C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6027C1  : S6027C2_nt {
  void *s6027c1f0;
  int s6027c1f1;
};
//SIG(1 S6027C1) C1{ BC2{ m Fp[2] Fi} Fp Fi}



static void Test_S6027C1()
{
  extern Class_Descriptor cd_S6027C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6027C1, buf);
    S6027C1 &lv = *(new (buf) S6027C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6027C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6027C1)");
    check_base_class_offset(lv, (S6027C2_nt*), 0, "S6027C1");
    check_field_offset(lv, s6027c1f0, ABISELECT(24,12), "S6027C1.s6027c1f0");
    check_field_offset(lv, s6027c1f1, ABISELECT(32,16), "S6027C1.s6027c1f1");
    test_class_info(&lv, &cd_S6027C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6027C1(Test_S6027C1, "S6027C1", ABISELECT(40,20));

#else // __cplusplus

extern Class_Descriptor cd_S6027C2_nt;
static Base_Class bases_S6027C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6027C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6027C1 = {  "S6027C1", // class name
  bases_S6027C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18509C1  {
  int s18509c1f0[2];
  void *s18509c1f1;
  long double s18509c1f2;
  long s18509c1f3;
  short s18509c1f4;
  virtual void  v1(); // _ZN8S18509C12v1Ev
  ~S18509C1(); // tgen
  S18509C1(); // tgen
};
//SIG(1 S18509C1) C1{ v1 Fi[2] Fp FD Fl Fs}


void  S18509C1 ::v1(){vfunc_called(this, "_ZN8S18509C12v1Ev");}
S18509C1 ::~S18509C1(){ note_dtor("S18509C1", this);} // tgen
S18509C1 ::S18509C1(){ note_ctor("S18509C1", this);} // tgen

static void Test_S18509C1()
{
  extern Class_Descriptor cd_S18509C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S18509C1, buf);
    S18509C1 *dp, &lv = *(dp=new (buf) S18509C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18509C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18509C1)");
    check_field_offset(lv, s18509c1f0, ABISELECT(8,4), "S18509C1.s18509c1f0");
    check_field_offset(lv, s18509c1f1, ABISELECT(16,12), "S18509C1.s18509c1f1");
    check_field_offset(lv, s18509c1f2, ABISELECT(32,16), "S18509C1.s18509c1f2");
    check_field_offset(lv, s18509c1f3, ABISELECT(48,28), "S18509C1.s18509c1f3");
    check_field_offset(lv, s18509c1f4, ABISELECT(56,32), "S18509C1.s18509c1f4");
    test_class_info(&lv, &cd_S18509C1);
    dp->~S18509C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18509C1(Test_S18509C1, "S18509C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S18509C1C1Ev();
extern void _ZN8S18509C1D1Ev();
Name_Map name_map_S18509C1[] = {
  NSPAIR(_ZN8S18509C1C1Ev),
  NSPAIR(_ZN8S18509C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18509C1[];
extern void _ZN8S18509C12v1Ev();
static  VTBL_ENTRY vtc_S18509C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18509C1[0]),
  (VTBL_ENTRY)&_ZN8S18509C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18509C1[];
extern  VTBL_ENTRY _ZTV8S18509C1[];
Class_Descriptor cd_S18509C1 = {  "S18509C1", // class name
  0,0,//no base classes
  &(vtc_S18509C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S18509C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18509C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21562C1  {
  int s21562c1f0;
  char s21562c1f1;
  int s21562c1f2;
  void *s21562c1f3;
  int s21562c1f4;
  void  mf21562c1(); // _ZN8S21562C19mf21562c1Ev
  virtual  ~S21562C1(); // _ZN8S21562C1D1Ev
  S21562C1(); // tgen
};
//SIG(1 S21562C1) C1{ vd m Fi Fc Fi Fp Fi}


void  S21562C1 ::mf21562c1(){}
 S21562C1 ::~S21562C1(){ note_dtor("S21562C1", this);}
S21562C1 ::S21562C1(){ note_ctor("S21562C1", this);} // tgen

static void Test_S21562C1()
{
  extern Class_Descriptor cd_S21562C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S21562C1, buf);
    S21562C1 *dp, &lv = *(dp=new (buf) S21562C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S21562C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21562C1)");
    check_field_offset(lv, s21562c1f0, ABISELECT(8,4), "S21562C1.s21562c1f0");
    check_field_offset(lv, s21562c1f1, ABISELECT(12,8), "S21562C1.s21562c1f1");
    check_field_offset(lv, s21562c1f2, ABISELECT(16,12), "S21562C1.s21562c1f2");
    check_field_offset(lv, s21562c1f3, ABISELECT(24,16), "S21562C1.s21562c1f3");
    check_field_offset(lv, s21562c1f4, ABISELECT(32,20), "S21562C1.s21562c1f4");
    test_class_info(&lv, &cd_S21562C1);
    dp->~S21562C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21562C1(Test_S21562C1, "S21562C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S21562C1C1Ev();
extern void _ZN8S21562C1D1Ev();
Name_Map name_map_S21562C1[] = {
  NSPAIR(_ZN8S21562C1C1Ev),
  NSPAIR(_ZN8S21562C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21562C1[];
extern void _ZN8S21562C1D1Ev();
extern void _ZN8S21562C1D0Ev();
static  VTBL_ENTRY vtc_S21562C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21562C1[0]),
  (VTBL_ENTRY)&_ZN8S21562C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21562C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21562C1[];
extern  VTBL_ENTRY _ZTV8S21562C1[];
Class_Descriptor cd_S21562C1 = {  "S21562C1", // class name
  0,0,//no base classes
  &(vtc_S21562C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S21562C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21562C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12440C1  {
  int s12440c1f0;
  ::S17256C9 s12440c1f1;
};
//SIG(1 S12440C1) C1{ Fi FC2{ Fi[2] Fs[6]}}



static void Test_S12440C1()
{
  {
    init_simple_test("S12440C1");
    S12440C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12440C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12440C1)");
    check_field_offset(lv, s12440c1f0, 0, "S12440C1.s12440c1f0");
    check_field_offset(lv, s12440c1f1, 4, "S12440C1.s12440c1f1");
  }
}
static Arrange_To_Call_Me vS12440C1(Test_S12440C1, "S12440C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10867C1  {
  char s10867c1f0[38];
  int s10867c1f1[4];
  void *s10867c1f2[2];
};
//SIG(1 S10867C1) C1{ Fc[38] Fi[4] Fp[2]}



static void Test_S10867C1()
{
  {
    init_simple_test("S10867C1");
    S10867C1 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S10867C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10867C1)");
    check_field_offset(lv, s10867c1f0, 0, "S10867C1.s10867c1f0");
    check_field_offset(lv, s10867c1f1, 40, "S10867C1.s10867c1f1");
    check_field_offset(lv, s10867c1f2, 56, "S10867C1.s10867c1f2");
  }
}
static Arrange_To_Call_Me vS10867C1(Test_S10867C1, "S10867C1", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11371C2  {
  int s11371c2f0;
  ::S1409C9_nt s11371c2f1;
};
//SIG(-1 S11371C2) C1{ Fi FC2{ m Fi}}



static void Test_S11371C2()
{
  {
    init_simple_test("S11371C2");
    S11371C2 lv;
    check2(sizeof(lv), 8, "sizeof(S11371C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11371C2)");
    check_field_offset(lv, s11371c2f0, 0, "S11371C2.s11371c2f0");
    check_field_offset(lv, s11371c2f1, 4, "S11371C2.s11371c2f1");
  }
}
static Arrange_To_Call_Me vS11371C2(Test_S11371C2, "S11371C2", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11371C1  {
  ::S11371C2 s11371c1f0;
};
//SIG(1 S11371C1) C1{ FC2{ Fi FC3{ m Fi}}}



static void Test_S11371C1()
{
  {
    init_simple_test("S11371C1");
    S11371C1 lv;
    check2(sizeof(lv), 8, "sizeof(S11371C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11371C1)");
    check_field_offset(lv, s11371c1f0, 0, "S11371C1.s11371c1f0");
  }
}
static Arrange_To_Call_Me vS11371C1(Test_S11371C1, "S11371C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10901C1  {
  char s10901c1f0[4];
  int s10901c1f1;
  short s10901c1f2;
  char s10901c1f3[2];
};
//SIG(1 S10901C1) C1{ Fc[4] Fi Fs Fc[2]}



static void Test_S10901C1()
{
  {
    init_simple_test("S10901C1");
    S10901C1 lv;
    check2(sizeof(lv), 12, "sizeof(S10901C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10901C1)");
    check_field_offset(lv, s10901c1f0, 0, "S10901C1.s10901c1f0");
    check_field_offset(lv, s10901c1f1, 4, "S10901C1.s10901c1f1");
    check_field_offset(lv, s10901c1f2, 8, "S10901C1.s10901c1f2");
    check_field_offset(lv, s10901c1f3, 10, "S10901C1.s10901c1f3");
  }
}
static Arrange_To_Call_Me vS10901C1(Test_S10901C1, "S10901C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14583C1  {
  void *s14583c1f0[3];
  char s14583c1f1[2];
  short s14583c1f2[3];
};
//SIG(1 S14583C1) C1{ Fp[3] Fc[2] Fs[3]}



static void Test_S14583C1()
{
  {
    init_simple_test("S14583C1");
    S14583C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S14583C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14583C1)");
    check_field_offset(lv, s14583c1f0, 0, "S14583C1.s14583c1f0");
    check_field_offset(lv, s14583c1f1, ABISELECT(24,12), "S14583C1.s14583c1f1");
    check_field_offset(lv, s14583c1f2, ABISELECT(26,14), "S14583C1.s14583c1f2");
  }
}
static Arrange_To_Call_Me vS14583C1(Test_S14583C1, "S14583C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12755C1  {
  int s12755c1f0;
  void *s12755c1f1[2];
  int s12755c1f2;
  void *s12755c1f3[2];
};
//SIG(1 S12755C1) C1{ Fi Fp[2] Fi Fp[2]}



static void Test_S12755C1()
{
  {
    init_simple_test("S12755C1");
    S12755C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S12755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12755C1)");
    check_field_offset(lv, s12755c1f0, 0, "S12755C1.s12755c1f0");
    check_field_offset(lv, s12755c1f1, ABISELECT(8,4), "S12755C1.s12755c1f1");
    check_field_offset(lv, s12755c1f2, ABISELECT(24,12), "S12755C1.s12755c1f2");
    check_field_offset(lv, s12755c1f3, ABISELECT(32,16), "S12755C1.s12755c1f3");
  }
}
static Arrange_To_Call_Me vS12755C1(Test_S12755C1, "S12755C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15160C1  {
  char s15160c1f0[1024];
  void *s15160c1f1;
  int s15160c1f2;
  void  mf15160c1(); // _ZN8S15160C19mf15160c1Ev
};
//SIG(1 S15160C1) C1{ m Fc[1024] Fp Fi}


void  S15160C1 ::mf15160c1(){}

static void Test_S15160C1()
{
  {
    init_simple_test("S15160C1");
    S15160C1 lv;
    check2(sizeof(lv), ABISELECT(1040,1032), "sizeof(S15160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15160C1)");
    check_field_offset(lv, s15160c1f0, 0, "S15160C1.s15160c1f0");
    check_field_offset(lv, s15160c1f1, 1024, "S15160C1.s15160c1f1");
    check_field_offset(lv, s15160c1f2, ABISELECT(1032,1028), "S15160C1.s15160c1f2");
  }
}
static Arrange_To_Call_Me vS15160C1(Test_S15160C1, "S15160C1", ABISELECT(1040,1032));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20019C2  {
  long s20019c2f0;
  __tsi64 s20019c2f1;
  virtual void  v2(); // _ZN8S20019C22v2Ev
  ~S20019C2(); // tgen
  S20019C2(); // tgen
};
//SIG(-1 S20019C2) C1{ v1 Fl FL}


void  S20019C2 ::v2(){vfunc_called(this, "_ZN8S20019C22v2Ev");}
S20019C2 ::~S20019C2(){ note_dtor("S20019C2", this);} // tgen
S20019C2 ::S20019C2(){ note_ctor("S20019C2", this);} // tgen

static void Test_S20019C2()
{
  extern Class_Descriptor cd_S20019C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20019C2, buf);
    S20019C2 *dp, &lv = *(dp=new (buf) S20019C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20019C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20019C2)");
    check_field_offset(lv, s20019c2f0, ABISELECT(8,4), "S20019C2.s20019c2f0");
    check_field_offset(lv, s20019c2f1, ABISELECT(16,8), "S20019C2.s20019c2f1");
    test_class_info(&lv, &cd_S20019C2);
    dp->~S20019C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20019C2(Test_S20019C2, "S20019C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20019C2C1Ev();
extern void _ZN8S20019C2D1Ev();
Name_Map name_map_S20019C2[] = {
  NSPAIR(_ZN8S20019C2C1Ev),
  NSPAIR(_ZN8S20019C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20019C2[];
extern void _ZN8S20019C22v2Ev();
static  VTBL_ENTRY vtc_S20019C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20019C2[0]),
  (VTBL_ENTRY)&_ZN8S20019C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S20019C2[];
extern  VTBL_ENTRY _ZTV8S20019C2[];
Class_Descriptor cd_S20019C2 = {  "S20019C2", // class name
  0,0,//no base classes
  &(vtc_S20019C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20019C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20019C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20019C1  : virtual S20019C2 {
  virtual void  v1(); // _ZN8S20019C12v1Ev
  ~S20019C1(); // tgen
  S20019C1(); // tgen
};
//SIG(1 S20019C1) C1{ VBC2{ v2 Fl FL} v1}


void  S20019C1 ::v1(){vfunc_called(this, "_ZN8S20019C12v1Ev");}
S20019C1 ::~S20019C1(){ note_dtor("S20019C1", this);} // tgen
S20019C1 ::S20019C1(){ note_ctor("S20019C1", this);} // tgen

static void Test_S20019C1()
{
  extern Class_Descriptor cd_S20019C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20019C1, buf);
    S20019C1 *dp, &lv = *(dp=new (buf) S20019C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20019C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20019C1)");
    check_base_class_offset(lv, (S20019C2*), ABISELECT(8,4), "S20019C1");
    test_class_info(&lv, &cd_S20019C1);
    dp->~S20019C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20019C1(Test_S20019C1, "S20019C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20019C1C1Ev();
extern void _ZN8S20019C1D1Ev();
Name_Map name_map_S20019C1[] = {
  NSPAIR(_ZN8S20019C1C1Ev),
  NSPAIR(_ZN8S20019C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20019C2;
extern VTBL_ENTRY _ZTI8S20019C2[];
extern  VTBL_ENTRY _ZTV8S20019C2[];
static Base_Class bases_S20019C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20019C2,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20019C1[];
extern void _ZN8S20019C12v1Ev();
extern void _ZN8S20019C22v2Ev();
static  VTBL_ENTRY vtc_S20019C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20019C1[0]),
  (VTBL_ENTRY)&_ZN8S20019C12v1Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20019C1[0]),
  (VTBL_ENTRY)&_ZN8S20019C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S20019C1[];
static  VTT_ENTRY vtt_S20019C1[] = {
  {&(_ZTV8S20019C1[3]),  3,8},
  {&(_ZTV8S20019C1[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S20019C1[];
extern  VTBL_ENTRY _ZTV8S20019C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20019C1[];
Class_Descriptor cd_S20019C1 = {  "S20019C1", // class name
  bases_S20019C1, 1,
  &(vtc_S20019C1[0]), // expected_vtbl_contents
  &(vtt_S20019C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20019C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20019C1),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20019C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11579C1  {
  ::S11595C2_nt s11579c1f0;
  int s11579c1f1;
  void *s11579c1f2;
};
//SIG(1 S11579C1) C1{ FC2{ Fi[2]} Fi Fp}



static void Test_S11579C1()
{
  {
    init_simple_test("S11579C1");
    S11579C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11579C1)");
    check_field_offset(lv, s11579c1f0, 0, "S11579C1.s11579c1f0");
    check_field_offset(lv, s11579c1f1, 8, "S11579C1.s11579c1f1");
    check_field_offset(lv, s11579c1f2, ABISELECT(16,12), "S11579C1.s11579c1f2");
  }
}
static Arrange_To_Call_Me vS11579C1(Test_S11579C1, "S11579C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16524C1  {
  long double s16524c1f0[2];
  int s16524c1f1:9;
  void *s16524c1f2;
  void  mf16524c1(); // _ZN8S16524C19mf16524c1Ev
};
//SIG(1 S16524C1) C1{ m FD[2] Fi:9 Fp}


void  S16524C1 ::mf16524c1(){}

static void Test_S16524C1()
{
  {
    init_simple_test("S16524C1");
    static S16524C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S16524C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16524C1)");
    check_field_offset(lv, s16524c1f0, 0, "S16524C1.s16524c1f0");
    set_bf_and_test(lv, s16524c1f1, ABISELECT(32,24), 0, 9, 1, "S16524C1");
    set_bf_and_test(lv, s16524c1f1, ABISELECT(32,24), 0, 9, hide_sll(1LL<<8), "S16524C1");
    check_field_offset(lv, s16524c1f2, ABISELECT(40,28), "S16524C1.s16524c1f2");
  }
}
static Arrange_To_Call_Me vS16524C1(Test_S16524C1, "S16524C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13208C1  {
  int s13208c1f0[2];
  void *s13208c1f1;
  int s13208c1f2[4];
};
//SIG(1 S13208C1) C1{ Fi[2] Fp Fi[4]}



static void Test_S13208C1()
{
  {
    init_simple_test("S13208C1");
    S13208C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S13208C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13208C1)");
    check_field_offset(lv, s13208c1f0, 0, "S13208C1.s13208c1f0");
    check_field_offset(lv, s13208c1f1, 8, "S13208C1.s13208c1f1");
    check_field_offset(lv, s13208c1f2, ABISELECT(16,12), "S13208C1.s13208c1f2");
  }
}
static Arrange_To_Call_Me vS13208C1(Test_S13208C1, "S13208C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14718C1  {
  void *s14718c1f0[6];
  int s14718c1f1[2];
  long s14718c1f2;
};
//SIG(1 S14718C1) C1{ Fp[6] Fi[2] Fl}



static void Test_S14718C1()
{
  {
    init_simple_test("S14718C1");
    S14718C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S14718C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14718C1)");
    check_field_offset(lv, s14718c1f0, 0, "S14718C1.s14718c1f0");
    check_field_offset(lv, s14718c1f1, ABISELECT(48,24), "S14718C1.s14718c1f1");
    check_field_offset(lv, s14718c1f2, ABISELECT(56,32), "S14718C1.s14718c1f2");
  }
}
static Arrange_To_Call_Me vS14718C1(Test_S14718C1, "S14718C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14905C1  {
  short s14905c1f0[2];
  __tsi64 s14905c1f1;
  char s14905c1f2[4];
};
//SIG(1 S14905C1) C1{ Fs[2] FL Fc[4]}



static void Test_S14905C1()
{
  {
    init_simple_test("S14905C1");
    S14905C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S14905C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14905C1)");
    check_field_offset(lv, s14905c1f0, 0, "S14905C1.s14905c1f0");
    check_field_offset(lv, s14905c1f1, ABISELECT(8,4), "S14905C1.s14905c1f1");
    check_field_offset(lv, s14905c1f2, ABISELECT(16,12), "S14905C1.s14905c1f2");
  }
}
static Arrange_To_Call_Me vS14905C1(Test_S14905C1, "S14905C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18393C1  {
  void *s18393c1f0[7];
  int s18393c1f1[2];
  void  mf18393c1(); // _ZN8S18393C19mf18393c1Ev
};
//SIG(1 S18393C1) C1{ m Fp[7] Fi[2]}


void  S18393C1 ::mf18393c1(){}

static void Test_S18393C1()
{
  {
    init_simple_test("S18393C1");
    S18393C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18393C1)");
    check_field_offset(lv, s18393c1f0, 0, "S18393C1.s18393c1f0");
    check_field_offset(lv, s18393c1f1, ABISELECT(56,28), "S18393C1.s18393c1f1");
  }
}
static Arrange_To_Call_Me vS18393C1(Test_S18393C1, "S18393C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16568C1  {
  int s16568c1f0;
  char s16568c1f1;
  void *s16568c1f2[2];
  void  mf16568c1(); // _ZN8S16568C19mf16568c1Ev
};
//SIG(1 S16568C1) C1{ m Fi Fc Fp[2]}


void  S16568C1 ::mf16568c1(){}

static void Test_S16568C1()
{
  {
    init_simple_test("S16568C1");
    S16568C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S16568C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16568C1)");
    check_field_offset(lv, s16568c1f0, 0, "S16568C1.s16568c1f0");
    check_field_offset(lv, s16568c1f1, 4, "S16568C1.s16568c1f1");
    check_field_offset(lv, s16568c1f2, 8, "S16568C1.s16568c1f2");
  }
}
static Arrange_To_Call_Me vS16568C1(Test_S16568C1, "S16568C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14955C1  {
  short s14955c1f0[8];
  char s14955c1f1[32];
};
//SIG(1 S14955C1) C1{ Fs[8] Fc[32]}



static void Test_S14955C1()
{
  {
    init_simple_test("S14955C1");
    S14955C1 lv;
    check2(sizeof(lv), 48, "sizeof(S14955C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14955C1)");
    check_field_offset(lv, s14955c1f0, 0, "S14955C1.s14955c1f0");
    check_field_offset(lv, s14955c1f1, 16, "S14955C1.s14955c1f1");
  }
}
static Arrange_To_Call_Me vS14955C1(Test_S14955C1, "S14955C1", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13415C1  {
  int s13415c1f0[3];
  short s13415c1f1[62];
};
//SIG(1 S13415C1) C1{ Fi[3] Fs[62]}



static void Test_S13415C1()
{
  {
    init_simple_test("S13415C1");
    S13415C1 lv;
    check2(sizeof(lv), 136, "sizeof(S13415C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13415C1)");
    check_field_offset(lv, s13415c1f0, 0, "S13415C1.s13415c1f0");
    check_field_offset(lv, s13415c1f1, 12, "S13415C1.s13415c1f1");
  }
}
static Arrange_To_Call_Me vS13415C1(Test_S13415C1, "S13415C1", 136);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13512C1  {
  int s13512c1f0[4];
  void *s13512c1f1[9];
};
//SIG(1 S13512C1) C1{ Fi[4] Fp[9]}



static void Test_S13512C1()
{
  {
    init_simple_test("S13512C1");
    S13512C1 lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S13512C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13512C1)");
    check_field_offset(lv, s13512c1f0, 0, "S13512C1.s13512c1f0");
    check_field_offset(lv, s13512c1f1, 16, "S13512C1.s13512c1f1");
  }
}
static Arrange_To_Call_Me vS13512C1(Test_S13512C1, "S13512C1", ABISELECT(88,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12643C1  {
  int s12643c1f0;
  long s12643c1f1[3];
  int s12643c1f2;
};
//SIG(1 S12643C1) C1{ Fi Fl[3] Fi}



static void Test_S12643C1()
{
  {
    init_simple_test("S12643C1");
    S12643C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S12643C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12643C1)");
    check_field_offset(lv, s12643c1f0, 0, "S12643C1.s12643c1f0");
    check_field_offset(lv, s12643c1f1, ABISELECT(8,4), "S12643C1.s12643c1f1");
    check_field_offset(lv, s12643c1f2, ABISELECT(32,16), "S12643C1.s12643c1f2");
  }
}
static Arrange_To_Call_Me vS12643C1(Test_S12643C1, "S12643C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6247C1  : S2265C38 {
  void *s6247c1f0[4];
};
//SIG(1 S6247C1) C1{ BC2{ m} Fp[4]}



static void Test_S6247C1()
{
  extern Class_Descriptor cd_S6247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6247C1, buf);
    S6247C1 &lv = *(new (buf) S6247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6247C1)");
    check_base_class_offset(lv, (S2265C38*), 0, "S6247C1");
    check_field_offset(lv, s6247c1f0, 0, "S6247C1.s6247c1f0");
    test_class_info(&lv, &cd_S6247C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6247C1(Test_S6247C1, "S6247C1", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S2265C38;
extern VTBL_ENTRY _ZTI8S2265C38[];
static Base_Class bases_S6247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2265C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6247C1 = {  "S6247C1", // class name
  bases_S6247C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16520C1  {
  long double s16520c1f0;
  void *s16520c1f1[5];
  void  mf16520c1(); // _ZN8S16520C19mf16520c1Ev
};
//SIG(1 S16520C1) C1{ m FD Fp[5]}


void  S16520C1 ::mf16520c1(){}

static void Test_S16520C1()
{
  {
    init_simple_test("S16520C1");
    S16520C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S16520C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16520C1)");
    check_field_offset(lv, s16520c1f0, 0, "S16520C1.s16520c1f0");
    check_field_offset(lv, s16520c1f1, ABISELECT(16,12), "S16520C1.s16520c1f1");
  }
}
static Arrange_To_Call_Me vS16520C1(Test_S16520C1, "S16520C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17162C1  {
  int s17162c1f0[21];
  void  mf17162c1(); // _ZN8S17162C19mf17162c1Ev
};
//SIG(1 S17162C1) C1{ m Fi[21]}


void  S17162C1 ::mf17162c1(){}

static void Test_S17162C1()
{
  {
    init_simple_test("S17162C1");
    S17162C1 lv;
    check2(sizeof(lv), 84, "sizeof(S17162C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17162C1)");
    check_field_offset(lv, s17162c1f0, 0, "S17162C1.s17162c1f0");
  }
}
static Arrange_To_Call_Me vS17162C1(Test_S17162C1, "S17162C1", 84);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13787C1  {
  __tsi64 s13787c1f0;
  int s13787c1f1[3];
};
//SIG(1 S13787C1) C1{ FL Fi[3]}



static void Test_S13787C1()
{
  {
    init_simple_test("S13787C1");
    S13787C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S13787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13787C1)");
    check_field_offset(lv, s13787c1f0, 0, "S13787C1.s13787c1f0");
    check_field_offset(lv, s13787c1f1, 8, "S13787C1.s13787c1f1");
  }
}
static Arrange_To_Call_Me vS13787C1(Test_S13787C1, "S13787C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17016C1  {
  int s17016c1f0:32;
  void  mf17016c1(); // _ZN8S17016C19mf17016c1Ev
};
//SIG(1 S17016C1) C1{ m Fi:32}


void  S17016C1 ::mf17016c1(){}

static void Test_S17016C1()
{
  {
    init_simple_test("S17016C1");
    static S17016C1 lv;
    check2(sizeof(lv), 4, "sizeof(S17016C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17016C1)");
    set_bf_and_test(lv, s17016c1f0, 0, 0, 32, 1, "S17016C1");
    set_bf_and_test(lv, s17016c1f0, 0, 0, 32, hide_sll(1LL<<31), "S17016C1");
  }
}
static Arrange_To_Call_Me vS17016C1(Test_S17016C1, "S17016C1", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14847C1  {
  short s14847c1f0[11];
};
//SIG(1 S14847C1) C1{ Fs[11]}



static void Test_S14847C1()
{
  {
    init_simple_test("S14847C1");
    S14847C1 lv;
    check2(sizeof(lv), 22, "sizeof(S14847C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14847C1)");
    check_field_offset(lv, s14847c1f0, 0, "S14847C1.s14847c1f0");
  }
}
static Arrange_To_Call_Me vS14847C1(Test_S14847C1, "S14847C1", 22);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

